diff --git a/.eslintignore b/.eslintignore index 391b44cdd89..1eb52b86b10 100644 --- a/.eslintignore +++ b/.eslintignore @@ -6,7 +6,7 @@ **/venv/** .opentrons_config **/tsconfig*.json -**/vite.config.ts +**/vite.config.mts # prettier **/package.json **/CHANGELOG.md diff --git a/.eslintrc.js b/.eslintrc.js index 3d54b0c8fe9..7de339ebde5 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -13,9 +13,10 @@ module.exports = { 'prettier', 'plugin:json/recommended', 'plugin:storybook/recommended', + 'plugin:react/jsx-runtime', ], - plugins: ['react', 'react-hooks', 'json', 'testing-library'], + plugins: ['react', 'react-hooks', 'json', 'testing-library', 'opentrons'], rules: { camelcase: 'off', @@ -167,5 +168,25 @@ module.exports = { 'no-restricted-imports': 'off', }, }, + // Apply tree-of-life import requirements to app as errors + { + files: ['./app/src/**/*.@(ts|tsx)'], + rules: { + 'opentrons/no-imports-up-the-tree-of-life': 'error', + }, + }, + { + files: ['./protocol-designer/src/**/*.@(ts|tsx)'], + rules: { + 'opentrons/no-imports-up-the-tree-of-life': 'warn', + }, + }, + // apply application structure import requirements to app + { + files: ['./app/src/**/*.@(ts|tsx)'], + rules: { + 'opentrons/no-imports-across-applications': 'error', + }, + }, ], } diff --git a/.github/workflows/analyses-snapshot-lint.yaml b/.github/workflows/analyses-snapshot-lint.yaml index 90724f3c7a2..7a51a5e976a 100644 --- a/.github/workflows/analyses-snapshot-lint.yaml +++ b/.github/workflows/analyses-snapshot-lint.yaml @@ -27,7 +27,7 @@ jobs: - name: Setup Python uses: 'actions/setup-python@v5' with: - python-version: '3.12' + python-version: '3.13.0' cache: 'pipenv' cache-dependency-path: analyses-snapshot-testing/Pipfile.lock - name: Setup diff --git a/.github/workflows/analyses-snapshot-test.yaml b/.github/workflows/analyses-snapshot-test.yaml index 26576899188..09539d873e9 100644 --- a/.github/workflows/analyses-snapshot-test.yaml +++ b/.github/workflows/analyses-snapshot-test.yaml @@ -48,8 +48,8 @@ jobs: ANALYSIS_REF: ${{ github.event.inputs.ANALYSIS_REF || github.head_ref || 'edge' }} SNAPSHOT_REF: ${{ github.event.inputs.SNAPSHOT_REF || github.head_ref || 'edge' }} # If we're running because of workflow_dispatch, use the user input to decide - # whether to open a PR on failure. Otherwise, there is no user input, so always - # open a PR on failure. + # whether to open a PR on failure. Otherwise, there is no user input, + # so we only open a PR if the PR has the label 'gen-analyses-snapshot-pr' OPEN_PR_ON_FAILURE: ${{ (github.event_name == 'workflow_dispatch' && github.events.inputs.OPEN_PR_ON_FAILURE) || ((github.event_name != 'workflow_dispatch') && (contains(github.event.pull_request.labels.*.name, 'gen-analyses-snapshot-pr'))) }} PR_TARGET_BRANCH: ${{ github.event.pull_request.base.ref || 'not a pr'}} steps: @@ -75,10 +75,10 @@ jobs: working-directory: analyses-snapshot-testing run: make build-opentrons-analysis - - name: Set up Python 3.12 + - name: Set up Python 3.13 uses: actions/setup-python@v5 with: - python-version: '3.12' + python-version: '3.13.0' cache: 'pipenv' cache-dependency-path: analyses-snapshot-testing/Pipfile.lock @@ -107,7 +107,7 @@ jobs: - name: Create Snapshot update Request id: create_pull_request if: always() && steps.handle_failure.outcome == 'success' && env.OPEN_PR_ON_FAILURE == 'true' && github.event_name == 'pull_request' - uses: peter-evans/create-pull-request@v6 + uses: peter-evans/create-pull-request@v7 with: commit-message: 'fix(analyses-snapshot-testing): heal analyses snapshots' title: 'fix(analyses-snapshot-testing): heal ${{ env.ANALYSIS_REF }} snapshots' @@ -130,7 +130,7 @@ jobs: - name: Create Snapshot update Request on edge overnight failure if: always() && steps.handle_failure.outcome == 'success' && github.event_name == 'schedule' - uses: peter-evans/create-pull-request@v6 + uses: peter-evans/create-pull-request@v7 with: # scheduled run uses the default values for ANALYSIS_REF and SNAPSHOT_REF which are edge commit-message: 'fix(analyses-snapshot-testing): heal ${{ env.ANALYSIS_REF }} snapshots' title: 'fix(analyses-snapshot-testing): heal ${{ env.ANALYSIS_REF }} snapshots' diff --git a/.github/workflows/opentrons-ai-server-lint-test.yaml b/.github/workflows/opentrons-ai-server-lint-test.yaml index d1a169b024d..8fe9bcb19ea 100644 --- a/.github/workflows/opentrons-ai-server-lint-test.yaml +++ b/.github/workflows/opentrons-ai-server-lint-test.yaml @@ -27,7 +27,7 @@ jobs: - name: Setup Python uses: 'actions/setup-python@v5' with: - python-version: '3.12.4' + python-version: '3.12' cache: 'pipenv' cache-dependency-path: opentrons-ai-server/Pipfile.lock - name: Setup diff --git a/.storybook/preview.jsx b/.storybook/preview.jsx index 4d97efe9c4d..bdae9a4f833 100644 --- a/.storybook/preview.jsx +++ b/.storybook/preview.jsx @@ -1,4 +1,3 @@ -import React from 'react' import { I18nextProvider } from 'react-i18next' import { GlobalStyle } from '../app/src/atoms/GlobalStyle' import { i18n } from '../app/src/i18n' diff --git a/abr-testing/Pipfile b/abr-testing/Pipfile index c046e523a69..0ea9e6f76aa 100644 --- a/abr-testing/Pipfile +++ b/abr-testing/Pipfile @@ -18,7 +18,7 @@ slackclient = "*" slack-sdk = "*" pandas = "*" pandas-stubs = "*" - +numpy = "==1.8.3" [dev-packages] atomicwrites = "==1.4.1" diff --git a/abr-testing/Pipfile.lock b/abr-testing/Pipfile.lock index 05e3c72eeda..08da1926e92 100644 --- a/abr-testing/Pipfile.lock +++ b/abr-testing/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "b82b82f6cc192a520ccaa5f2c94a2dda16993ef31ebd9e140f85f80b6a96cc6a" + "sha256": "f2a4a8a95be01ccb8425c8069a3dc8e3f932c1f9b36f5b12c838ee9cfc26015e" }, "pipfile-spec": 6, "requires": { @@ -394,12 +394,12 @@ }, "google-api-python-client": { "hashes": [ - "sha256:8b84dde11aaccadc127e4846f5cd932331d804ea324e353131595e3f25376e97", - "sha256:d74da1358f3f2d63daf3c6f26bd96d89652051183bc87cf10a56ceb2a70beb50" + "sha256:41f671be10fa077ee5143ee9f0903c14006d39dc644564f4e044ae96b380bf68", + "sha256:b1e62c9889c5ef6022f11d30d7ef23dc55100300f0e8aaf8aa09e8e92540acad" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==2.145.0" + "version": "==2.146.0" }, "google-auth": { "hashes": [ @@ -456,11 +456,11 @@ }, "idna": { "hashes": [ - "sha256:050b4e5baadcd44d760cedbd2b8e639f2ff89bbc7a5730fcc662954303377aac", - "sha256:d838c2c0ed6fced7693d5e8ab8e734d5f8fda53a039c0164afb0b82e771e3603" + "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", + "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3" ], "markers": "python_version >= '3.6'", - "version": "==3.8" + "version": "==3.10" }, "jsonschema": { "hashes": [ @@ -607,6 +607,7 @@ "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3", "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f" ], + "index": "pypi", "markers": "python_version >= '3.9'", "version": "==1.26.4" }, @@ -709,23 +710,24 @@ }, "protobuf": { "hashes": [ - "sha256:018db9056b9d75eb93d12a9d35120f97a84d9a919bcab11ed56ad2d399d6e8dd", - "sha256:510ed78cd0980f6d3218099e874714cdf0d8a95582e7b059b06cabad855ed0a0", - "sha256:532627e8fdd825cf8767a2d2b94d77e874d5ddb0adefb04b237f7cc296748681", - "sha256:6206afcb2d90181ae8722798dcb56dc76675ab67458ac24c0dd7d75d632ac9bd", - "sha256:66c3edeedb774a3508ae70d87b3a19786445fe9a068dd3585e0cefa8a77b83d0", - "sha256:6d7cc9e60f976cf3e873acb9a40fed04afb5d224608ed5c1a105db4a3f09c5b6", - "sha256:853db610214e77ee817ecf0514e0d1d052dff7f63a0c157aa6eabae98db8a8de", - "sha256:d001a73c8bc2bf5b5c1360d59dd7573744e163b3607fa92788b7f3d5fefbd9a5", - "sha256:dde74af0fa774fa98892209992295adbfb91da3fa98c8f67a88afe8f5a349add", - "sha256:dde9fcaa24e7a9654f4baf2a55250b13a5ea701493d904c54069776b99a8216b", - "sha256:eef7a8a2f4318e2cb2dee8666d26e58eaf437c14788f3a2911d0c3da40405ae8" + "sha256:2c69461a7fcc8e24be697624c09a839976d82ae75062b11a0972e41fd2cd9132", + "sha256:35cfcb15f213449af7ff6198d6eb5f739c37d7e4f1c09b5d0641babf2cc0c68f", + "sha256:52235802093bd8a2811abbe8bf0ab9c5f54cca0a751fdd3f6ac2a21438bffece", + "sha256:59379674ff119717404f7454647913787034f03fe7049cbef1d74a97bb4593f0", + "sha256:5e8a95246d581eef20471b5d5ba010d55f66740942b95ba9b872d918c459452f", + "sha256:87317e9bcda04a32f2ee82089a204d3a2f0d3c8aeed16568c7daf4756e4f1fe0", + "sha256:8ddc60bf374785fb7cb12510b267f59067fa10087325b8e1855b898a0d81d276", + "sha256:a8b9403fc70764b08d2f593ce44f1d2920c5077bf7d311fefec999f8c40f78b7", + "sha256:c0ea0123dac3399a2eeb1a1443d82b7afc9ff40241433296769f7da42d142ec3", + "sha256:ca53faf29896c526863366a52a8f4d88e69cd04ec9571ed6082fa117fac3ab36", + "sha256:eeea10f3dc0ac7e6b4933d32db20662902b4ab81bf28df12218aa389e9c2102d" ], "markers": "python_version >= '3.8'", - "version": "==5.28.0" + "version": "==5.28.2" }, "pyasn1": { "hashes": [ + "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629", "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034" ], "markers": "python_version >= '3.8'", @@ -733,6 +735,7 @@ }, "pyasn1-modules": { "hashes": [ + "sha256:49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd", "sha256:c28e2dbf9c06ad61c71a075c7e0f9fd0f1b0bb2d2ad4377f240d33ac2ab60a7c" ], "markers": "python_version >= '3.8'", @@ -917,11 +920,11 @@ }, "setuptools": { "hashes": [ - "sha256:5f4c08aa4d3ebcb57a50c33b1b07e94315d7fc7230f7115e47fc99776c8ce308", - "sha256:95b40ed940a1c67eb70fc099094bd6e99c6ee7c23aa2306f4d2697ba7916f9c6" + "sha256:35ab7fd3bcd95e6b7fd704e4a1539513edad446c097797f2985e0e4b960772f2", + "sha256:d59a21b17a275fb872a9c3dae73963160ae079f1049ed956880cd7c09b120538" ], "markers": "python_version >= '3.8'", - "version": "==74.1.2" + "version": "==75.1.0" }, "six": { "hashes": [ @@ -933,12 +936,12 @@ }, "slack-sdk": { "hashes": [ - "sha256:af8fc4ef1d1cbcecd28d01acf6955a3bb5b13d56f0a43a1b1c7e3b212cc5ec5b", - "sha256:f35e85f2847e6c25cf7c2d1df206ca0ad75556263fb592457bf03cca68ef64bb" + "sha256:070eb1fb355c149a5f80fa0be6eeb5f5588e4ddff4dd76acf060454435cb037e", + "sha256:853bb55154115d080cae342c4099f2ccb559a78ae8d0f5109b49842401a920fa" ], "index": "pypi", "markers": "python_version >= '3.6'", - "version": "==3.32.0" + "version": "==3.33.0" }, "slackclient": { "hashes": [ @@ -975,11 +978,11 @@ }, "types-pytz": { "hashes": [ - "sha256:6810c8a1f68f21fdf0f4f374a432487c77645a0ac0b31de4bf4690cf21ad3981", - "sha256:8335d443310e2db7b74e007414e74c4f53b67452c0cb0d228ca359ccfba59659" + "sha256:4433b5df4a6fc587bbed41716d86a5ba5d832b4378e506f40d34bc9c81df2c24", + "sha256:a1eebf57ebc6e127a99d2fa2ba0a88d2b173784ef9b3defcc2004ab6855a44df" ], "markers": "python_version >= '3.8'", - "version": "==2024.1.0.20240417" + "version": "==2024.2.0.20240913" }, "typing-extensions": { "hashes": [ @@ -1007,11 +1010,11 @@ }, "urllib3": { "hashes": [ - "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472", - "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168" + "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac", + "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9" ], "markers": "python_version >= '3.8'", - "version": "==2.2.2" + "version": "==2.2.3" }, "wrapt": { "hashes": [ @@ -1485,12 +1488,12 @@ }, "google-api-python-client": { "hashes": [ - "sha256:8b84dde11aaccadc127e4846f5cd932331d804ea324e353131595e3f25376e97", - "sha256:d74da1358f3f2d63daf3c6f26bd96d89652051183bc87cf10a56ceb2a70beb50" + "sha256:41f671be10fa077ee5143ee9f0903c14006d39dc644564f4e044ae96b380bf68", + "sha256:b1e62c9889c5ef6022f11d30d7ef23dc55100300f0e8aaf8aa09e8e92540acad" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==2.145.0" + "version": "==2.146.0" }, "google-api-python-client-stubs": { "hashes": [ @@ -1535,11 +1538,11 @@ }, "idna": { "hashes": [ - "sha256:050b4e5baadcd44d760cedbd2b8e639f2ff89bbc7a5730fcc662954303377aac", - "sha256:d838c2c0ed6fced7693d5e8ab8e734d5f8fda53a039c0164afb0b82e771e3603" + "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", + "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3" ], "markers": "python_version >= '3.6'", - "version": "==3.8" + "version": "==3.10" }, "iniconfig": { "hashes": [ @@ -1616,11 +1619,11 @@ }, "platformdirs": { "hashes": [ - "sha256:9e5e27a08aa095dd127b9f2e764d74254f482fef22b0970773bfba79d091ab8c", - "sha256:eb1c8582560b34ed4ba105009a4badf7f6f85768b30126f351328507b2beb617" + "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907", + "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb" ], "markers": "python_version >= '3.8'", - "version": "==4.3.2" + "version": "==4.3.6" }, "pluggy": { "hashes": [ @@ -1640,20 +1643,20 @@ }, "protobuf": { "hashes": [ - "sha256:018db9056b9d75eb93d12a9d35120f97a84d9a919bcab11ed56ad2d399d6e8dd", - "sha256:510ed78cd0980f6d3218099e874714cdf0d8a95582e7b059b06cabad855ed0a0", - "sha256:532627e8fdd825cf8767a2d2b94d77e874d5ddb0adefb04b237f7cc296748681", - "sha256:6206afcb2d90181ae8722798dcb56dc76675ab67458ac24c0dd7d75d632ac9bd", - "sha256:66c3edeedb774a3508ae70d87b3a19786445fe9a068dd3585e0cefa8a77b83d0", - "sha256:6d7cc9e60f976cf3e873acb9a40fed04afb5d224608ed5c1a105db4a3f09c5b6", - "sha256:853db610214e77ee817ecf0514e0d1d052dff7f63a0c157aa6eabae98db8a8de", - "sha256:d001a73c8bc2bf5b5c1360d59dd7573744e163b3607fa92788b7f3d5fefbd9a5", - "sha256:dde74af0fa774fa98892209992295adbfb91da3fa98c8f67a88afe8f5a349add", - "sha256:dde9fcaa24e7a9654f4baf2a55250b13a5ea701493d904c54069776b99a8216b", - "sha256:eef7a8a2f4318e2cb2dee8666d26e58eaf437c14788f3a2911d0c3da40405ae8" + "sha256:2c69461a7fcc8e24be697624c09a839976d82ae75062b11a0972e41fd2cd9132", + "sha256:35cfcb15f213449af7ff6198d6eb5f739c37d7e4f1c09b5d0641babf2cc0c68f", + "sha256:52235802093bd8a2811abbe8bf0ab9c5f54cca0a751fdd3f6ac2a21438bffece", + "sha256:59379674ff119717404f7454647913787034f03fe7049cbef1d74a97bb4593f0", + "sha256:5e8a95246d581eef20471b5d5ba010d55f66740942b95ba9b872d918c459452f", + "sha256:87317e9bcda04a32f2ee82089a204d3a2f0d3c8aeed16568c7daf4756e4f1fe0", + "sha256:8ddc60bf374785fb7cb12510b267f59067fa10087325b8e1855b898a0d81d276", + "sha256:a8b9403fc70764b08d2f593ce44f1d2920c5077bf7d311fefec999f8c40f78b7", + "sha256:c0ea0123dac3399a2eeb1a1443d82b7afc9ff40241433296769f7da42d142ec3", + "sha256:ca53faf29896c526863366a52a8f4d88e69cd04ec9571ed6082fa117fac3ab36", + "sha256:eeea10f3dc0ac7e6b4933d32db20662902b4ab81bf28df12218aa389e9c2102d" ], "markers": "python_version >= '3.8'", - "version": "==5.28.0" + "version": "==5.28.2" }, "py": { "hashes": [ @@ -1665,6 +1668,7 @@ }, "pyasn1": { "hashes": [ + "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629", "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034" ], "markers": "python_version >= '3.8'", @@ -1672,6 +1676,7 @@ }, "pyasn1-modules": { "hashes": [ + "sha256:49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd", "sha256:c28e2dbf9c06ad61c71a075c7e0f9fd0f1b0bb2d2ad4377f240d33ac2ab60a7c" ], "markers": "python_version >= '3.8'", @@ -1793,11 +1798,11 @@ }, "urllib3": { "hashes": [ - "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472", - "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168" + "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac", + "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9" ], "markers": "python_version >= '3.8'", - "version": "==2.2.2" + "version": "==2.2.3" } } } diff --git a/abr-testing/abr_testing/automation/google_sheets_tool.py b/abr-testing/abr_testing/automation/google_sheets_tool.py index c150eb93f5e..beeb141dc9a 100644 --- a/abr-testing/abr_testing/automation/google_sheets_tool.py +++ b/abr-testing/abr_testing/automation/google_sheets_tool.py @@ -225,8 +225,8 @@ def get_sheet_by_name(self, title: str) -> None: def token_check(self) -> None: """Check if credentials are still valid and refresh if expired.""" - if self.credentials.expired: - self.credentials.refresh() # Refresh the credentials + if self.credentials.access_token_expired: + self.gc.login() # Refresh the credentials def get_row_index_with_value(self, some_string: str, col_num: int) -> Any: """Find row index of string by looking in specific column.""" diff --git a/abr-testing/abr_testing/data_collection/abr_google_drive.py b/abr-testing/abr_testing/data_collection/abr_google_drive.py index f1fe6ad0c8f..4556b62800b 100644 --- a/abr-testing/abr_testing/data_collection/abr_google_drive.py +++ b/abr-testing/abr_testing/data_collection/abr_google_drive.py @@ -7,7 +7,7 @@ from abr_testing.data_collection import read_robot_logs from typing import Set, Dict, Any, Tuple, List, Union from abr_testing.automation import google_drive_tool, google_sheets_tool -from abr_testing.tools import sync_abr_sheet +from abr_testing.tools import sync_abr_sheet, plate_reader def get_modules(file_results: Dict[str, str]) -> Dict[str, Any]: @@ -17,6 +17,7 @@ def get_modules(file_results: Dict[str, str]) -> Dict[str, Any]: "temperatureModuleV2", "magneticBlockV1", "thermocyclerModuleV2", + "absorbanceReaderV1", ) all_modules = {key: "" for key in modList} for module in file_results.get("modules", []): @@ -35,6 +36,7 @@ def create_data_dictionary( issue_url: str, plate: str, accuracy: Any, + hellma_plate_standards: List[Dict[str, Any]], ) -> Tuple[List[List[Any]], List[str], List[List[Any]], List[str]]: """Pull data from run files and format into a dictionary.""" runs_and_robots: List[Any] = [] @@ -113,6 +115,9 @@ def create_data_dictionary( hs_dict = read_robot_logs.hs_commands(file_results) tm_dict = read_robot_logs.temperature_module_commands(file_results) pipette_dict = read_robot_logs.instrument_commands(file_results) + plate_reader_dict = read_robot_logs.plate_reader_commands( + file_results, hellma_plate_standards + ) notes = {"Note1": "", "Jira Link": issue_url} plate_measure = { "Plate Measured": plate, @@ -132,6 +137,7 @@ def create_data_dictionary( **hs_dict, **tm_dict, **tc_dict, + **plate_reader_dict, **pipette_dict, **plate_measure, } @@ -181,6 +187,7 @@ def create_data_dictionary( storage_directory = args.storage_directory[0] google_sheet_name = args.google_sheet_name[0] email = args.email[0] + try: credentials_path = os.path.join(storage_directory, "credentials.json") except FileNotFoundError: @@ -203,13 +210,22 @@ def create_data_dictionary( missing_runs_from_gs = read_robot_logs.get_unseen_run_ids( run_ids_on_gd, run_ids_on_gs ) + # Read Hellma Files + file_values = plate_reader.read_hellma_plate_files(storage_directory, 101934) # Add missing runs to google sheet ( transposed_runs_and_robots, headers, transposed_runs_and_lpc, headers_lpc, - ) = create_data_dictionary(missing_runs_from_gs, storage_directory, "", "", "") + ) = create_data_dictionary( + missing_runs_from_gs, + storage_directory, + "", + "", + "", + hellma_plate_standards=file_values, + ) start_row = google_sheet.get_index_row() + 1 print(start_row) google_sheet.batch_update_cells(transposed_runs_and_robots, "A", start_row, "0") diff --git a/abr-testing/abr_testing/data_collection/abr_robot_error.py b/abr-testing/abr_testing/data_collection/abr_robot_error.py index 9f87f7d4c46..3edf9b315c8 100644 --- a/abr-testing/abr_testing/data_collection/abr_robot_error.py +++ b/abr-testing/abr_testing/data_collection/abr_robot_error.py @@ -13,6 +13,7 @@ import re import pandas as pd from statistics import mean, StatisticsError +from abr_testing.tools import plate_reader def compare_current_trh_to_average( @@ -590,13 +591,21 @@ def get_run_error_info_from_robot( except FileNotFoundError: print("Run file not uploaded.") run_id = os.path.basename(error_run_log).split("_")[1].split(".")[0] + # Get hellma readings + file_values = plate_reader.read_hellma_plate_files(storage_directory, 101934) + ( runs_and_robots, headers, runs_and_lpc, headers_lpc, ) = abr_google_drive.create_data_dictionary( - run_id, error_folder_path, issue_url, "", "" + run_id, + error_folder_path, + issue_url, + "", + "", + hellma_plate_standards=file_values, ) start_row = google_sheet.get_index_row() + 1 diff --git a/abr-testing/abr_testing/data_collection/get_run_logs.py b/abr-testing/abr_testing/data_collection/get_run_logs.py index cc36acd5760..3d8eb851197 100644 --- a/abr-testing/abr_testing/data_collection/get_run_logs.py +++ b/abr-testing/abr_testing/data_collection/get_run_logs.py @@ -47,7 +47,7 @@ def get_run_data(one_run: Any, ip: str) -> Dict[str, Any]: params={"cursor": cursor, "pageLength": page_length}, ) command_data = response.json() - commands.extend(command_data["data"]) + commands.extend(command_data.get("data", "")) run["commands"] = commands response = requests.get( f"http://{ip}:31950/runs/{one_run}", headers={"opentrons-version": "3"} diff --git a/abr-testing/abr_testing/data_collection/read_robot_logs.py b/abr-testing/abr_testing/data_collection/read_robot_logs.py index 96182609c49..3501a330a70 100644 --- a/abr-testing/abr_testing/data_collection/read_robot_logs.py +++ b/abr-testing/abr_testing/data_collection/read_robot_logs.py @@ -14,6 +14,7 @@ import json import requests import sys +from abr_testing.tools import plate_reader def lpc_data( @@ -168,6 +169,69 @@ def instrument_commands(file_results: Dict[str, Any]) -> Dict[str, float]: return pipette_dict +def plate_reader_commands( + file_results: Dict[str, Any], hellma_plate_standards: List[Dict[str, Any]] +) -> Dict[str, object]: + """Plate Reader Command Counts.""" + commandData = file_results.get("commands", "") + move_lid_count: int = 0 + initialize_count: int = 0 + read = "no" + final_result = {} + # Count Number of Reads + read_count, avg_read_time = count_command_in_run_data( + commandData, "absorbanceReader/read", True + ) + # Count Number of Initializations + initialize_count, avg_initialize_time = count_command_in_run_data( + commandData, "absorbanceReader/initialize", True + ) + # Count Number of Lid Movements + for command in commandData: + commandType = command["commandType"] + if ( + commandType == "absorbanceReader/openLid" + or commandType == "absorbanceReader/closeLid" + ): + move_lid_count += 1 + elif commandType == "absorbanceReader/read": + read = "yes" + elif read == "yes" and commandType == "comment": + result = command["params"].get("message", "") + wavelength = result.split("result: {")[1].split(":")[0] + wavelength_str = wavelength + ": " + rest_of_string = result.split(wavelength_str)[1][:-1] + result_dict = eval(rest_of_string) + result_ndarray = plate_reader.convert_read_dictionary_to_array(result_dict) + for item in hellma_plate_standards: + wavelength_of_interest = item["wavelength"] + if str(wavelength) == str(wavelength_of_interest): + error_cells = plate_reader.check_byonoy_data_accuracy( + result_ndarray, item, False + ) + if len(error_cells[0]) > 0: + percent = (96 - len(error_cells)) / 96 * 100 + for cell in error_cells: + print("FAIL: Cell " + str(cell) + " out of accuracy spec.") + else: + percent = 100 + print( + f"PASS: {wavelength_of_interest} meet accuracy specification" + ) + final_result[wavelength] = percent + input("###########################") + read = "no" + plate_dict = { + "Plate Reader # of Reads": read_count, + "Plate Reader Avg Read Time (sec)": avg_read_time, + "Plate Reader # of Initializations": initialize_count, + "Plate Reader Avg Initialize Time (sec)": avg_initialize_time, + "Plate Reader # of Lid Movements": move_lid_count, + "Plate Reader Result": final_result, + } + return plate_dict + + def hs_commands(file_results: Dict[str, Any]) -> Dict[str, float]: """Gets total latch engagements, homes, rotations and total on time (sec) for heater shaker.""" # TODO: modify for cases that have more than 1 heater shaker. diff --git a/abr-testing/abr_testing/data_collection/single_run_log_reader.py b/abr-testing/abr_testing/data_collection/single_run_log_reader.py index 5304842b550..39060529c89 100644 --- a/abr-testing/abr_testing/data_collection/single_run_log_reader.py +++ b/abr-testing/abr_testing/data_collection/single_run_log_reader.py @@ -5,6 +5,7 @@ import csv from abr_testing.data_collection import read_robot_logs from abr_testing.data_collection import abr_google_drive +from abr_testing.tools import plate_reader if __name__ == "__main__": parser = argparse.ArgumentParser(description="Read single run log locally saved.") @@ -25,13 +26,21 @@ sys.exit() # Get Runs from Storage and Read Logs run_ids_in_storage = read_robot_logs.get_run_ids_from_storage(run_log_file_path) + # Get hellma readins + file_values = plate_reader.read_hellma_plate_files(run_log_file_path, 101934) + ( runs_and_robots, header, runs_and_lpc, lpc_headers, ) = abr_google_drive.create_data_dictionary( - run_ids_in_storage, run_log_file_path, "", "", "" + run_ids_in_storage, + run_log_file_path, + "", + "", + "", + hellma_plate_standards=file_values, ) transposed_list = list(zip(*runs_and_robots)) # Adds Run to local csv diff --git a/abr-testing/abr_testing/tools/abr_scale.py b/abr-testing/abr_testing/tools/abr_scale.py index d02bf0acfed..0f6c29c3f69 100644 --- a/abr-testing/abr_testing/tools/abr_scale.py +++ b/abr-testing/abr_testing/tools/abr_scale.py @@ -10,6 +10,7 @@ from typing import Any, Tuple import sys import json +from abr_testing.tools import plate_reader def get_protocol_step_as_int( @@ -141,14 +142,20 @@ def get_most_recent_run_and_record( ) # Record run to google sheets. print(most_recent_run_id) - + # Read Hellma Files + hellma_file_values = plate_reader.read_hellma_plate_files(storage_directory, 101934) ( runs_and_robots, headers, runs_and_lpc, headers_lpc, ) = abr_google_drive.create_data_dictionary( - most_recent_run_id, storage_directory, "", labware, accuracy + most_recent_run_id, + storage_directory, + "", + labware, + accuracy, + hellma_plate_standards=hellma_file_values, ) google_sheet_abr_data = google_sheets_tool.google_sheet( credentials_path, "ABR-run-data", tab_number=0 diff --git a/abr-testing/abr_testing/tools/plate_reader.py b/abr-testing/abr_testing/tools/plate_reader.py new file mode 100644 index 00000000000..3be15fa4268 --- /dev/null +++ b/abr-testing/abr_testing/tools/plate_reader.py @@ -0,0 +1,144 @@ +"""Plate Reader Functions.""" +import argparse +import os +import numpy as np +from typing import Dict, Any, List + + +def convert_read_dictionary_to_array(read_data: Dict[str, Any]) -> np.ndarray: + """Convert a dictionary of read results to an array. + + Converts a dictionary of OD values, as formatted by the Opentrons API's + plate reader read() function, to a 2D numpy.array of shape (8,12) for + further processing. + + read_data: dict + a dictonary of read values with celll numbers for keys, e.g. 'A1' + """ + data = np.empty((8, 12)) + for key, value in read_data.items(): + row_index = ord(key[0]) - ord("A") + column_index = int(key[1:]) - 1 + data[row_index][column_index] = value + + return data + + +def check_byonoy_data_accuracy( + output: Any, cal: Dict[str, np.ndarray], flipped: bool +) -> List[Any]: + """Check multiple OD measurements for accuracy. + + od_list: list of 2D numpy.array of shape (8,12) + a list of multiple plate readings as returned by read_byonoy_directory_to_list() + cal: namedtuple + 2D numpy.array of shape (8,12) of calibration values, and 1D + numpy.array of tolerances, as returned by read_byonoy_file_to_array + flipped: bool + True if reference plate was rotated 180 degrees for measurment + """ + print("entered analysis") + run_error_cells = [] + cal_data = cal["data"] + cal_tolerance = cal["tolerance"] + # Calculate absolute accuracy tolerances for each cell + # The last two columns have a higher tolerance per the Byonoy datasheet + # because OD>2.0 and wavelength>=450nm on the Hellma plate + output_array = np.asarray(output) + accuracy_tols = np.zeros((8, 12)) + accuracy_tols[:, :10] = cal_data[:, :10] * 0.01 + cal_tolerance[:10] + 0.01 + accuracy_tols[:, 10:] = cal_data[:, 10:] * 0.015 + cal_tolerance[10:] + 0.01 + if flipped: + within_tolerance = np.isclose( + output_array, + np.rot90(cal_data, 2), + atol=np.rot90(accuracy_tols, 2), + ) # type: ignore + else: + within_tolerance = np.isclose(output_array, cal_data, atol=accuracy_tols) # type: ignore + errors = np.where(within_tolerance is False) + error_cells = [ + (chr(ord("@") + errors[0][i] + 1) + str(errors[1][i] + 1)) + for i in range(0, len(errors[0])) + ] + run_error_cells.append(error_cells) + return run_error_cells + + +def read_byonoy_file_to_array(filename: str) -> Dict[str, Any]: + """Read a Byonoy endpoint CSV file into a numpy array. + + Returns a named tuple with a 2D numpy array of shape (8,12) of OD values + from a Byonoy endpoint CSV file and a 1D numpy array of tolerances (which + are present in the reference plate calibration data files). + + filename: str + absolute path and filename of the CSV file to be read + """ + wavelength = filename.split("nm.csv")[0].split("_")[-1] + with open(filename, "r") as f: + # print(filename) + + f.seek(0) + file_data = np.genfromtxt( + f, usecols=range(1, 13), skip_header=1, max_rows=8, delimiter="," + ) + # print(file_data.shape, file_data) + + f.seek(0) + file_tolerance = np.genfromtxt( + f, usecols=range(1, 13), skip_header=9, max_rows=1, delimiter="," + ) + # print(file_tolerance.shape, file_tolerance) + + File_Values = { + "wavelength": wavelength, + "data": file_data, + "tolerance": file_tolerance, + } + return File_Values + + +def read_hellma_plate_files( + storage_directory: str, hellma_plate_number: int +) -> List[Any]: + """Read hellma files for the following wavelengths.""" + wavelengths = [405, 450, 490, 650] + file_values = [] + for wave in wavelengths: + file_name = "_".join(["hellma", str(hellma_plate_number), str(wave)]) + file_name_csv = file_name + "nm.csv" + try: + file_path = os.path.join(storage_directory, file_name_csv) + File_Values = read_byonoy_file_to_array(file_path) + file_values.append(File_Values) + except FileNotFoundError: + print( + f"Hellma plate {hellma_plate_number} file at {wave} does not exist in this folder." + ) + continue + return file_values + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description="Read storage directory with hellma plate files." + ) + parser.add_argument( + "storage_directory", + metavar="STORAGE_DIRECTORY", + type=str, + nargs=1, + help="Path to storage directory for hellma plate files.", + ) + parser.add_argument( + "hellma_plate_number", + metavar="HELLMA_PLATE_NUMBER", + type=int, + nargs=1, + help="Hellma Plate Number.", + ) + args = parser.parse_args() + storage_directory = args.storage_directory[0] + hellma_plate_number = args.hellma_plate_number[0] + read_hellma_plate_files(storage_directory, hellma_plate_number) diff --git a/abr-testing/protocol_simulation/__init__.py b/abr-testing/protocol_simulation/__init__.py new file mode 100644 index 00000000000..157c21fd93e --- /dev/null +++ b/abr-testing/protocol_simulation/__init__.py @@ -0,0 +1 @@ +"""The package holding code for simulating protocols.""" \ No newline at end of file diff --git a/abr-testing/protocol_simulation/simulation_metrics.py b/abr-testing/protocol_simulation/simulation_metrics.py new file mode 100644 index 00000000000..544bc3fb4bc --- /dev/null +++ b/abr-testing/protocol_simulation/simulation_metrics.py @@ -0,0 +1,353 @@ +import re +import sys +import os +from pathlib import Path +from click import Context +from opentrons.cli import analyze +import json +import argparse +from datetime import datetime +from abr_testing.automation import google_sheets_tool +from abr_testing.data_collection import read_robot_logs +from typing import Set, Dict, Any, Tuple, List, Union +from abr_testing.tools import plate_reader + +def look_for_air_gaps(protocol_file_path: str) -> int: + instances = 0 + try: + with open(protocol_file_path, "r") as open_file: + protocol_lines = open_file.readlines() + for line in protocol_lines: + if "air_gap" in line: + print(line) + instances += 1 + print(f'Found {instances} instance(s) of the air gap function') + open_file.close() + except Exception as error: + print("Error reading protocol:", error.with_traceback()) + return instances + +def set_api_level(protocol_file_path) -> None: + with open(protocol_file_path, "r") as file: + file_contents = file.readlines() + # Look for current'apiLevel:' + for i, line in enumerate(file_contents): + print(line) + if 'apiLevel' in line: + print(f"The current API level of this protocol is: {line}") + change = input("Would you like to simulate with a different API level? (Y/N) ").strip().upper() + + if change == "Y": + api_level = input("Protocol API Level to Simulate with: ") + # Update new API level + file_contents[i] = f'apiLevel: {api_level}\n' + print(f"Updated line: {file_contents[i]}") + break + with open(protocol_file_path, "w") as file: + file.writelines(file_contents) + print("File updated successfully.") + +original_exit = sys.exit + +def mock_exit(code=None) -> None: + print(f"sys.exit() called with code: {code}") + raise SystemExit(code) + +def get_labware_name(id: str, object_dict: dict, json_data: dict) -> str: + slot = "" + for obj in object_dict: + if obj['id'] == id: + try: + # Try to get the slotName from the location + slot = obj['location']['slotName'] + return " SLOT: " + slot + except KeyError: + location = obj.get('location', {}) + + # Check if location contains 'moduleId' + if 'moduleId' in location: + return get_labware_name(location['moduleId'], json_data['modules'], json_data) + + # Check if location contains 'labwareId' + elif 'labwareId' in location: + return get_labware_name(location['labwareId'], json_data['labware'], json_data) + + return " Labware not found" + +def parse_results_volume(json_data_file: str) -> Tuple[ + List[str], List[str], List[str], List[str], + List[str], List[str], List[str], List[str], + List[str], List[str], List[str] + ]: + json_data = [] + with open(json_data_file, "r") as json_file: + json_data = json.load(json_file) + commands = json_data.get("commands", []) + start_time = datetime.fromisoformat(commands[0]["createdAt"]) + end_time = datetime.fromisoformat(commands[len(commands)-1]["completedAt"]) + header = ["", "Protocol Name", "Date", "Time"] + header_fill_row = ["", protocol_name, str(file_date.date()), str(file_date.time())] + labware_names_row =["Labware Name"] + volume_dispensed_row =["Total Volume Dispensed uL"] + volume_aspirated_row =["Total Volume Aspirated uL"] + change_in_volume_row = ["Total Change in Volume uL"] + start_time_row = ["Start Time"] + end_time_row = ["End Time"] + total_time_row = ["Total Time of Execution"] + metrics_row = [ + "Metric", + "Heatershaker # of Latch Open/Close", + "Heatershaker # of Homes", + "Heatershaker # of Rotations", + "Heatershaker Temp On Time (sec)", + "Temp Module # of Temp Changes", + "Temp Module Temp On Time (sec)", + "Temp Mod Time to 4C (sec)", + "Thermocycler # of Lid Open/Close", + "Thermocycler Block # of Temp Changes", + "Thermocycler Block Temp On Time (sec)", + "Thermocycler Block Time to 4C (sec)", + "Thermocycler Lid # of Temp Changes", + "Thermocycler Lid Temp On Time (sec)", + "Thermocycler Lid Time to 105C (sec)", + "Plate Reader # of Reads", + "Plate Reader Avg Read Time (sec)", + "Plate Reader # of Initializations", + "Plate Reader Avg Initialize Time (sec)", + "Plate Reader # of Lid Movements", + "Plate Reader Result", + "Left Pipette Total Tip Pick Up(s)", + "Left Pipette Total Aspirates", + "Left Pipette Total Dispenses", + "Right Pipette Total Tip Pick Up(s)", + "Right Pipette Total Aspirates", + "Right Pipette Total Dispenses", + "Gripper Pick Ups", + "Total Liquid Probes", + "Average Liquid Probe Time (sec)", + ] + values_row = ["Value"] + labware_well_dict = {} + hs_dict, temp_module_dict, thermo_cycler_dict, plate_reader_dict, instrument_dict = {}, {}, {}, {}, {} + try: + hs_dict = read_robot_logs.hs_commands(json_data) + temp_module_dict = read_robot_logs.temperature_module_commands(json_data) + thermo_cycler_dict = read_robot_logs.thermocycler_commands(json_data) + plate_reader_dict = read_robot_logs.plate_reader_commands(json_data, hellma_plate_standards) + instrument_dict = read_robot_logs.instrument_commands(json_data) + except: + pass + + metrics = [hs_dict, temp_module_dict, thermo_cycler_dict, plate_reader_dict, instrument_dict] + + # Iterate through all the commands executed in the protocol run log + for x, command in enumerate(commands): + if x != 0: + prev_command = commands[x-1] + if command["commandType"] == "aspirate": + if not (prev_command["commandType"] == "comment" and (prev_command['params']['message'] == "AIR GAP" or prev_command['params']['message'] == "MIXING")): + labware_id = command["params"]["labwareId"] + labware_name = "" + for labware in json_data.get("labware"): + if labware["id"] == labware_id: + labware_name = (labware["loadName"]) + get_labware_name(labware["id"], json_data["labware"], json_data) + well_name = command["params"]["wellName"] + + if labware_id not in labware_well_dict: + labware_well_dict[labware_id] = {} + + if well_name not in labware_well_dict[labware_id]: + labware_well_dict[labware_id][well_name] = (labware_name, 0, 0, "") + + vol = int(command["params"]["volume"]) + + labware_name, added_volumes, subtracted_volumes, log = labware_well_dict[labware_id][well_name] + + subtracted_volumes += vol + log+=(f"aspirated {vol} ") + labware_well_dict[labware_id][well_name] = (labware_name, added_volumes, subtracted_volumes, log) + elif command["commandType"] == "dispense": + if not (prev_command["commandType"] == "comment" and (prev_command['params']['message'] == "MIXING")): + labware_id = command["params"]["labwareId"] + labware_name = "" + for labware in json_data.get("labware"): + if labware["id"] == labware_id: + labware_name = (labware["loadName"]) + get_labware_name(labware["id"], json_data["labware"], json_data) + well_name = command["params"]["wellName"] + + if labware_id not in labware_well_dict: + labware_well_dict[labware_id] = {} + + if well_name not in labware_well_dict[labware_id]: + labware_well_dict[labware_id][well_name] = (labware_name, 0, 0, "") + + vol = int(command["params"]["volume"]) + labware_name, added_volumes, subtracted_volumes, log = labware_well_dict[labware_id][well_name] + added_volumes += vol + log+=(f"dispensed {vol} ") + labware_well_dict[labware_id][well_name] = (labware_name, added_volumes, subtracted_volumes, log) + # file_date_formatted = file_date.strftime("%Y-%m-%d_%H-%M-%S") + with open(f"{os.path.dirname(json_data_file)}\\{protocol_name}_well_volumes_{file_date_formatted}.json", "w") as output_file: + json.dump(labware_well_dict, output_file) + output_file.close() + + # populate row lists + for labware_id in labware_well_dict.keys(): + volume_added = 0 + volume_subtracted = 0 + labware_name ="" + for well in labware_well_dict[labware_id].keys(): + labware_name, added_volumes, subtracted_volumes, log = labware_well_dict[labware_id][well] + volume_added += added_volumes + volume_subtracted += subtracted_volumes + labware_names_row.append(labware_name) + volume_dispensed_row.append(str(volume_added)) + volume_aspirated_row.append(str(volume_subtracted)) + change_in_volume_row.append(str(volume_added - volume_subtracted)) + start_time_row.append(str(start_time.time())) + end_time_row.append(str(end_time.time())) + total_time_row.append(str(end_time - start_time)) + + for metric in metrics: + for cmd in metric.keys(): + values_row.append(str(metric[cmd])) + return( + header, + header_fill_row, + labware_names_row, + volume_dispensed_row, + volume_aspirated_row, + change_in_volume_row, + start_time_row, + end_time_row, + total_time_row, + metrics_row, + values_row) + +def main(storage_directory, google_sheet_name, protocol_file_path): + sys.exit = mock_exit + + # Read file path from arguments + protocol_file_path = Path(protocol_file_path) + global protocol_name + protocol_name = protocol_file_path.stem + print("Simulating", protocol_name) + global file_date + file_date = datetime.now() + global file_date_formatted + file_date_formatted = file_date.strftime("%Y-%m-%d_%H-%M-%S") + # Prepare output file + json_file_path = f"{storage_directory}\\{protocol_name}_{file_date_formatted}.json" + json_file_output = open(json_file_path, "wb+") + error_output = f"{storage_directory}\\error_log" + # Run protocol simulation + try: + with Context(analyze) as ctx: + ctx.invoke( + analyze, + files=[protocol_file_path], + json_output=json_file_output, + human_json_output=None, + log_output=error_output, + log_level="ERROR", + check=False + ) + except SystemExit as e: + print(f"SystemExit caught with code: {e}") + finally: + sys.exit = original_exit + json_file_output.close() + with open(error_output, "r") as open_file: + try: + errors = open_file.readlines() + if not errors: pass + else: + print(errors) + sys.exit(1) + except: + print("error simulating ...") + sys.exit() + + try: + credentials_path = os.path.join(storage_directory, "credentials.json") + print(credentials_path) + except FileNotFoundError: + print(f"Add credentials.json file to: {storage_directory}.") + sys.exit() + + global hellma_plate_standards + + try: + hellma_plate_standards = plate_reader.read_hellma_plate_files(storage_directory, 101934) + except: + print(f"Add helma plate standard files to {storage_directory}.") + sys.exit() + + google_sheet = google_sheets_tool.google_sheet( + credentials_path, google_sheet_name, 0 + ) + + google_sheet.write_to_row([]) + + for row in parse_results_volume(json_file_path): + print("Writing results to", google_sheet_name) + print(str(row)) + google_sheet.write_to_row(row) + +if __name__ == "__main__": + CLEAN_PROTOCOL = True + parser = argparse.ArgumentParser(description="Read run logs on google drive.") + parser.add_argument( + "storage_directory", + metavar="STORAGE_DIRECTORY", + type=str, + nargs=1, + help="Path to long term storage directory for run logs.", + ) + parser.add_argument( + "sheet_name", + metavar="SHEETNAME", + type=str, + nargs=1, + help="Name of sheet to upload results to", + ) + parser.add_argument( + "protocol_file_path", + metavar="PROTOCOL_FILE_PATH", + type=str, + nargs=1, + help="Path to protocol file" + + ) + args = parser.parse_args() + storage_directory = args.storage_directory[0] + sheet_name = args.sheet_name[0] + protocol_file_path = args.protocol_file_path[0] + + SETUP = True + while(SETUP): + print("This current version cannot properly handle air gap calls.\nThese may cause simulation results to be inaccurate") + air_gaps = look_for_air_gaps(protocol_file_path) + if air_gaps > 0: + choice = "" + while not choice: + choice = input("This protocol contains air gaps, results may be innacurate, would you like to continue? (Y/N): ") + if choice.upper() == "Y": + SETUP = False + CLEAN_PROTOCOL = True + elif choice.upper() == "N": + CLEAN_PROTOCOL = False + SETUP = False + print("Please remove air gaps then re-run") + else: + choice = "" + print("Please enter a valid response.") + SETUP = False + + if CLEAN_PROTOCOL: + main( + storage_directory, + sheet_name, + protocol_file_path, + ) + else: sys.exit(0) \ No newline at end of file diff --git a/analyses-snapshot-testing/Makefile b/analyses-snapshot-testing/Makefile index e0aa23a8415..fff00bbe3c1 100644 --- a/analyses-snapshot-testing/Makefile +++ b/analyses-snapshot-testing/Makefile @@ -89,3 +89,26 @@ build-opentrons-analysis: .PHONY: generate-protocols generate-protocols: python -m pipenv run python -m automation.data.protocol_registry + + +OPENTRONS_VERSION ?= edge +export OPENTRONS_VERSION + +.PHONY: build-rs +build-rs: + @echo "Building docker image for opentrons-robot-server:$(OPENTRONS_VERSION)" + @echo "Cache is always busted to ensure latest version of the code is used" + @echo "If you want to build a different version, run 'make build-rs OPENTRONS_VERSION=chore_release-8.0.0'" + docker build --build-arg OPENTRONS_VERSION=$(OPENTRONS_VERSION) --build-arg CACHEBUST=$(CACHEBUST) -t opentrons-robot-server:$(OPENTRONS_VERSION) -f citools/Dockerfile.server . + +.PHONY: run-flex +run-flex: + @echo "Running opentrons-robot-server:$(OPENTRONS_VERSION)" + @echo "If you want to run a different version, run 'make run-flex OPENTRONS_VERSION=chore_release-8.0.0'" + docker run -p 31950:31950 --env-file ../robot-server/dev-flex.env opentrons-robot-server:$(OPENTRONS_VERSION) + +.PHONY: run-ot2 +run-ot2: + @echo "Running opentrons-robot-server:$(OPENTRONS_VERSION)" + @echo "If you want to run a different version, run 'make run-ot2 OPENTRONS_VERSION=chore_release-8.0.0'" + docker run -p 31950:31950 --env-file ../robot-server/dev.env opentrons-robot-server:$(OPENTRONS_VERSION) diff --git a/analyses-snapshot-testing/Pipfile b/analyses-snapshot-testing/Pipfile index 43bb4dd2475..85a1d29c337 100644 --- a/analyses-snapshot-testing/Pipfile +++ b/analyses-snapshot-testing/Pipfile @@ -4,20 +4,18 @@ url = "https://pypi.org/simple" verify_ssl = true [packages] -pytest = "==8.1.1" -black = "==24.3.0" -selenium = "==4.19.0" -importlib-metadata = "==7.1.0" -requests = "==2.31.0" +pytest = "==8.3.3" +black = "==24.10.0" +importlib-metadata = "==8.5.0" +httpx = "==0.27.2" python-dotenv = "==1.0.1" -mypy = "==1.9.0" -types-requests = "==2.31.0.20240311" -rich = "==13.7.1" -pydantic = "==2.6.4" -ruff = "==0.3.4" -docker = "==7.0.0" -syrupy = "==4.6.1" +mypy = "==1.11.2" +rich = "==13.9.2" +pydantic = "==2.9.2" +ruff = "==0.6.9" +docker = "==7.1.0" +syrupy = "==4.7.2" pytest-html = "==4.1.1" [requires] -python_version = "3.12" +python_version = "3.13" diff --git a/analyses-snapshot-testing/Pipfile.lock b/analyses-snapshot-testing/Pipfile.lock index 0672556f9cd..648d065049c 100644 --- a/analyses-snapshot-testing/Pipfile.lock +++ b/analyses-snapshot-testing/Pipfile.lock @@ -1,11 +1,11 @@ { "_meta": { "hash": { - "sha256": "b7ac4510c6e3aa343c669e1bd838183e905abb6f1701c6efbfb1c22f20cfae44" + "sha256": "6657134003c472f3e25e7c91a6b1f46eb8231b4518c18c90c6353bcf2666923e" }, "pipfile-spec": 6, "requires": { - "python_version": "3.12" + "python_version": "3.13" }, "sources": [ { @@ -18,56 +18,56 @@ "default": { "annotated-types": { "hashes": [ - "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43", - "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d" + "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", + "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89" ], "markers": "python_version >= '3.8'", - "version": "==0.6.0" + "version": "==0.7.0" }, - "attrs": { + "anyio": { "hashes": [ - "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30", - "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1" + "sha256:137b4559cbb034c477165047febb6ff83f390fc3b20bf181c1fc0a728cb8beeb", + "sha256:c7d2e9d63e31599eeb636c8c5c03a7e108d73b345f064f1c19fdc87b79036a9a" ], - "markers": "python_version >= '3.7'", - "version": "==23.2.0" + "markers": "python_version >= '3.9'", + "version": "==4.6.0" }, "black": { "hashes": [ - "sha256:2818cf72dfd5d289e48f37ccfa08b460bf469e67fb7c4abb07edc2e9f16fb63f", - "sha256:41622020d7120e01d377f74249e677039d20e6344ff5851de8a10f11f513bf93", - "sha256:4acf672def7eb1725f41f38bf6bf425c8237248bb0804faa3965c036f7672d11", - "sha256:4be5bb28e090456adfc1255e03967fb67ca846a03be7aadf6249096100ee32d0", - "sha256:4f1373a7808a8f135b774039f61d59e4be7eb56b2513d3d2f02a8b9365b8a8a9", - "sha256:56f52cfbd3dabe2798d76dbdd299faa046a901041faf2cf33288bc4e6dae57b5", - "sha256:65b76c275e4c1c5ce6e9870911384bff5ca31ab63d19c76811cb1fb162678213", - "sha256:65c02e4ea2ae09d16314d30912a58ada9a5c4fdfedf9512d23326128ac08ac3d", - "sha256:6905238a754ceb7788a73f02b45637d820b2f5478b20fec82ea865e4f5d4d9f7", - "sha256:79dcf34b33e38ed1b17434693763301d7ccbd1c5860674a8f871bd15139e7837", - "sha256:7bb041dca0d784697af4646d3b62ba4a6b028276ae878e53f6b4f74ddd6db99f", - "sha256:7d5e026f8da0322b5662fa7a8e752b3fa2dac1c1cbc213c3d7ff9bdd0ab12395", - "sha256:9f50ea1132e2189d8dff0115ab75b65590a3e97de1e143795adb4ce317934995", - "sha256:a0c9c4a0771afc6919578cec71ce82a3e31e054904e7197deacbc9382671c41f", - "sha256:aadf7a02d947936ee418777e0247ea114f78aff0d0959461057cae8a04f20597", - "sha256:b5991d523eee14756f3c8d5df5231550ae8993e2286b8014e2fdea7156ed0959", - "sha256:bf21b7b230718a5f08bd32d5e4f1db7fc8788345c8aea1d155fc17852b3410f5", - "sha256:c45f8dff244b3c431b36e3224b6be4a127c6aca780853574c00faf99258041eb", - "sha256:c7ed6668cbbfcd231fa0dc1b137d3e40c04c7f786e626b405c62bcd5db5857e4", - "sha256:d7de8d330763c66663661a1ffd432274a2f92f07feeddd89ffd085b5744f85e7", - "sha256:e19cb1c6365fd6dc38a6eae2dcb691d7d83935c10215aef8e6c38edee3f77abd", - "sha256:e2af80566f43c85f5797365077fb64a393861a3730bd110971ab7a0c94e873e7" + "sha256:14b3502784f09ce2443830e3133dacf2c0110d45191ed470ecb04d0f5f6fcb0f", + "sha256:17374989640fbca88b6a448129cd1745c5eb8d9547b464f281b251dd00155ccd", + "sha256:1c536fcf674217e87b8cc3657b81809d3c085d7bf3ef262ead700da345bfa6ea", + "sha256:1cbacacb19e922a1d75ef2b6ccaefcd6e93a2c05ede32f06a21386a04cedb981", + "sha256:1f93102e0c5bb3907451063e08b9876dbeac810e7da5a8bfb7aeb5a9ef89066b", + "sha256:2cd9c95431d94adc56600710f8813ee27eea544dd118d45896bb734e9d7a0dc7", + "sha256:30d2c30dc5139211dda799758559d1b049f7f14c580c409d6ad925b74a4208a8", + "sha256:394d4ddc64782e51153eadcaaca95144ac4c35e27ef9b0a42e121ae7e57a9175", + "sha256:3bb2b7a1f7b685f85b11fed1ef10f8a9148bceb49853e47a294a3dd963c1dd7d", + "sha256:4007b1393d902b48b36958a216c20c4482f601569d19ed1df294a496eb366392", + "sha256:5a2221696a8224e335c28816a9d331a6c2ae15a2ee34ec857dcf3e45dbfa99ad", + "sha256:63f626344343083322233f175aaf372d326de8436f5928c042639a4afbbf1d3f", + "sha256:649fff99a20bd06c6f727d2a27f401331dc0cc861fb69cde910fe95b01b5928f", + "sha256:680359d932801c76d2e9c9068d05c6b107f2584b2a5b88831c83962eb9984c1b", + "sha256:846ea64c97afe3bc677b761787993be4991810ecc7a4a937816dd6bddedc4875", + "sha256:b5e39e0fae001df40f95bd8cc36b9165c5e2ea88900167bddf258bacef9bbdc3", + "sha256:ccfa1d0cb6200857f1923b602f978386a3a2758a65b52e0950299ea014be6800", + "sha256:d37d422772111794b26757c5b55a3eade028aa3fde43121ab7b673d050949d65", + "sha256:ddacb691cdcdf77b96f549cf9591701d8db36b2f19519373d60d31746068dbf2", + "sha256:e6668650ea4b685440857138e5fe40cde4d652633b1bdffc62933d0db4ed9812", + "sha256:f9da3333530dbcecc1be13e69c250ed8dfa67f43c4005fb537bb426e19200d50", + "sha256:fe4d6476887de70546212c99ac9bd803d90b42fc4767f058a0baa895013fbb3e" ], "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==24.3.0" + "markers": "python_version >= '3.9'", + "version": "==24.10.0" }, "certifi": { "hashes": [ - "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f", - "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1" + "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8", + "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9" ], "markers": "python_version >= '3.6'", - "version": "==2024.2.2" + "version": "==2024.8.30" }, "charset-normalizer": { "hashes": [ @@ -175,12 +175,12 @@ }, "docker": { "hashes": [ - "sha256:12ba681f2777a0ad28ffbcc846a69c31b4dfd9752b47eb425a274ee269c5e14b", - "sha256:323736fb92cd9418fc5e7133bc953e11a9da04f4483f828b527db553f1e7e5a3" + "sha256:ad8c70e6e3f8926cb8a92619b832b4ea5299e2831c14284663184e200546fa6c", + "sha256:c96b93b7f0a746f9e77d325bcfb87422a3d8bd4f03136ae8a85b37f1898d5fc0" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==7.0.0" + "version": "==7.1.0" }, "h11": { "hashes": [ @@ -190,22 +190,39 @@ "markers": "python_version >= '3.7'", "version": "==0.14.0" }, + "httpcore": { + "hashes": [ + "sha256:27b59625743b85577a8c0e10e55b50b5368a4f2cfe8cc7bcfa9cf00829c2682f", + "sha256:73f6dbd6eb8c21bbf7ef8efad555481853f5f6acdeaff1edb0694289269ee17f" + ], + "markers": "python_version >= '3.8'", + "version": "==1.0.6" + }, + "httpx": { + "hashes": [ + "sha256:7bb2708e112d8fdd7829cd4243970f0c223274051cb35ee80c03301ee29a3df0", + "sha256:f7c2be1d2f3c3c3160d441802406b206c2b76f5947b11115e6df10c6c65e66c2" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==0.27.2" + }, "idna": { "hashes": [ - "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca", - "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f" + "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", + "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3" ], - "markers": "python_version >= '3.5'", - "version": "==3.6" + "markers": "python_version >= '3.6'", + "version": "==3.10" }, "importlib-metadata": { "hashes": [ - "sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570", - "sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2" + "sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b", + "sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==7.1.0" + "version": "==8.5.0" }, "iniconfig": { "hashes": [ @@ -217,11 +234,11 @@ }, "jinja2": { "hashes": [ - "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa", - "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90" + "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369", + "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d" ], "markers": "python_version >= '3.7'", - "version": "==3.1.3" + "version": "==3.1.4" }, "markdown-it-py": { "hashes": [ @@ -233,69 +250,70 @@ }, "markupsafe": { "hashes": [ - "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf", - "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff", - "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f", - "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3", - "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532", - "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f", - "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617", - "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df", - "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4", - "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906", - "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f", - "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4", - "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8", - "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371", - "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2", - "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465", - "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52", - "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6", - "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169", - "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad", - "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2", - "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0", - "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029", - "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f", - "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a", - "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced", - "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5", - "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c", - "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf", - "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9", - "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb", - "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad", - "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3", - "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1", - "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46", - "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc", - "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a", - "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee", - "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900", - "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5", - "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea", - "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f", - "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5", - "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e", - "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a", - "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f", - "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50", - "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a", - "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b", - "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4", - "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff", - "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2", - "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46", - "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b", - "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf", - "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5", - "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5", - "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab", - "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd", - "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68" - ], - "markers": "python_version >= '3.7'", - "version": "==2.1.5" + "sha256:03ff62dea2fef3eadf2f1853bc6332bcb0458d9608b11dfb1cd5aeda1c178ea6", + "sha256:105ada43a61af22acb8774514c51900dc820c481cc5ba53f17c09d294d9c07ca", + "sha256:12ddac720b8965332d36196f6f83477c6351ba6a25d4aff91e30708c729350d7", + "sha256:1d151b9cf3307e259b749125a5a08c030ba15a8f1d567ca5bfb0e92f35e761f5", + "sha256:1ee9790be6f62121c4c58bbced387b0965ab7bffeecb4e17cc42ef290784e363", + "sha256:1fd02f47596e00a372f5b4af2b4c45f528bade65c66dfcbc6e1ea1bfda758e98", + "sha256:23efb2be7221105c8eb0e905433414d2439cb0a8c5d5ca081c1c72acef0f5613", + "sha256:25396abd52b16900932e05b7104bcdc640a4d96c914f39c3b984e5a17b01fba0", + "sha256:27d6a73682b99568916c54a4bfced40e7d871ba685b580ea04bbd2e405dfd4c5", + "sha256:380faf314c3c84c1682ca672e6280c6c59e92d0bc13dc71758ffa2de3cd4e252", + "sha256:3b231255770723f1e125d63c14269bcd8b8136ecfb620b9a18c0297e046d0736", + "sha256:3cd0bba31d484fe9b9d77698ddb67c978704603dc10cdc905512af308cfcca6b", + "sha256:3efde9a8c56c3b6e5f3fa4baea828f8184970c7c78480fedb620d804b1c31e5c", + "sha256:409535e0521c4630d5b5a1bf284e9d3c76d2fc2f153ebb12cf3827797798cc99", + "sha256:494a64efc535e147fcc713dba58eecfce3a79f1e93ebe81995b387f5cd9bc2e1", + "sha256:4ca04c60006867610a06575b46941ae616b19da0adc85b9f8f3d9cbd7a3da385", + "sha256:4deea1d9169578917d1f35cdb581bc7bab56a7e8c5be2633bd1b9549c3c22a01", + "sha256:509c424069dd037d078925b6815fc56b7271f3aaec471e55e6fa513b0a80d2aa", + "sha256:5509a8373fed30b978557890a226c3d30569746c565b9daba69df80c160365a5", + "sha256:59420b5a9a5d3fee483a32adb56d7369ae0d630798da056001be1e9f674f3aa6", + "sha256:5d207ff5cceef77796f8aacd44263266248cf1fbc601441524d7835613f8abec", + "sha256:5ddf5cb8e9c00d9bf8b0c75949fb3ff9ea2096ba531693e2e87336d197fdb908", + "sha256:63dae84964a9a3d2610808cee038f435d9a111620c37ccf872c2fcaeca6865b3", + "sha256:64a7c7856c3a409011139b17d137c2924df4318dab91ee0530800819617c4381", + "sha256:64f7d04410be600aa5ec0626d73d43e68a51c86500ce12917e10fd013e258df5", + "sha256:658fdf6022740896c403d45148bf0c36978c6b48c9ef8b1f8d0c7a11b6cdea86", + "sha256:678fbceb202382aae42c1f0cd9f56b776bc20a58ae5b553ee1fe6b802983a1d6", + "sha256:7835de4c56066e096407a1852e5561f6033786dd987fa90dc384e45b9bd21295", + "sha256:7c524203207f5b569df06c96dafdc337228921ee8c3cc5f6e891d024c6595352", + "sha256:7ed789d0f7f11fcf118cf0acb378743dfdd4215d7f7d18837c88171405c9a452", + "sha256:81be2c0084d8c69e97e3c5d73ce9e2a6e523556f2a19c4e195c09d499be2f808", + "sha256:81ee9c967956b9ea39b3a5270b7cb1740928d205b0dc72629164ce621b4debf9", + "sha256:8219e2207f6c188d15614ea043636c2b36d2d79bf853639c124a179412325a13", + "sha256:96e3ed550600185d34429477f1176cedea8293fa40e47fe37a05751bcb64c997", + "sha256:98fb3a2bf525ad66db96745707b93ba0f78928b7a1cb2f1cb4b143bc7e2ba3b3", + "sha256:9b36473a2d3e882d1873ea906ce54408b9588dc2c65989664e6e7f5a2de353d7", + "sha256:9f91c90f8f3bf436f81c12eeb4d79f9ddd263c71125e6ad71341906832a34386", + "sha256:a5fd5500d4e4f7cc88d8c0f2e45126c4307ed31e08f8ec521474f2fd99d35ac3", + "sha256:a7171d2b869e9be238ea318c196baf58fbf272704e9c1cd4be8c380eea963342", + "sha256:a80c6740e1bfbe50cea7cbf74f48823bb57bd59d914ee22ff8a81963b08e62d2", + "sha256:b2a7afd24d408b907672015555bc10be2382e6c5f62a488e2d452da670bbd389", + "sha256:b43ac1eb9f91e0c14aac1d2ef0f76bc7b9ceea51de47536f61268191adf52ad7", + "sha256:b6cc46a27d904c9be5732029769acf4b0af69345172ed1ef6d4db0c023ff603b", + "sha256:b94bec9eda10111ec7102ef909eca4f3c2df979643924bfe58375f560713a7d1", + "sha256:bd9b8e458e2bab52f9ad3ab5dc8b689a3c84b12b2a2f64cd9a0dfe209fb6b42f", + "sha256:c182d45600556917f811aa019d834a89fe4b6f6255da2fd0bdcf80e970f95918", + "sha256:c409691696bec2b5e5c9efd9593c99025bf2f317380bf0d993ee0213516d908a", + "sha256:c5243044a927e8a6bb28517838662a019cd7f73d7f106bbb37ab5e7fa8451a92", + "sha256:c8ab7efeff1884c5da8e18f743b667215300e09043820d11723718de0b7db934", + "sha256:cb244adf2499aa37d5dc43431990c7f0b632d841af66a51d22bd89c437b60264", + "sha256:d261ec38b8a99a39b62e0119ed47fe3b62f7691c500bc1e815265adc016438c1", + "sha256:d2c099be5274847d606574234e494f23a359e829ba337ea9037c3a72b0851942", + "sha256:d7e63d1977d3806ce0a1a3e0099b089f61abdede5238ca6a3f3bf8877b46d095", + "sha256:dba0f83119b9514bc37272ad012f0cc03f0805cc6a2bea7244e19250ac8ff29f", + "sha256:dcbee57fedc9b2182c54ffc1c5eed316c3da8bbfeda8009e1b5d7220199d15da", + "sha256:e042ccf8fe5bf8b6a4b38b3f7d618eb10ea20402b0c9f4add9293408de447974", + "sha256:e363440c8534bf2f2ef1b8fdc02037eb5fff8fce2a558519b22d6a3a38b3ec5e", + "sha256:e64b390a306f9e849ee809f92af6a52cda41741c914358e0e9f8499d03741526", + "sha256:f0411641d31aa6f7f0cc13f0f18b63b8dc08da5f3a7505972a42ab059f479ba3", + "sha256:f1c13c6c908811f867a8e9e66efb2d6c03d1cdd83e92788fe97f693c457dc44f", + "sha256:f846fd7c241e5bd4161e2a483663eb66e4d8e12130fcdc052f310f388f1d61c6" + ], + "markers": "python_version >= '3.9'", + "version": "==3.0.0" }, "mdurl": { "hashes": [ @@ -307,37 +325,37 @@ }, "mypy": { "hashes": [ - "sha256:0235391f1c6f6ce487b23b9dbd1327b4ec33bb93934aa986efe8a9563d9349e6", - "sha256:190da1ee69b427d7efa8aa0d5e5ccd67a4fb04038c380237a0d96829cb157913", - "sha256:2418488264eb41f69cc64a69a745fad4a8f86649af4b1041a4c64ee61fc61129", - "sha256:3a3c007ff3ee90f69cf0a15cbcdf0995749569b86b6d2f327af01fd1b8aee9dc", - "sha256:3cc5da0127e6a478cddd906068496a97a7618a21ce9b54bde5bf7e539c7af974", - "sha256:48533cdd345c3c2e5ef48ba3b0d3880b257b423e7995dada04248725c6f77374", - "sha256:49c87c15aed320de9b438ae7b00c1ac91cd393c1b854c2ce538e2a72d55df150", - "sha256:4d3dbd346cfec7cb98e6cbb6e0f3c23618af826316188d587d1c1bc34f0ede03", - "sha256:571741dc4194b4f82d344b15e8837e8c5fcc462d66d076748142327626a1b6e9", - "sha256:587ce887f75dd9700252a3abbc9c97bbe165a4a630597845c61279cf32dfbf02", - "sha256:5d741d3fc7c4da608764073089e5f58ef6352bedc223ff58f2f038c2c4698a89", - "sha256:5e6061f44f2313b94f920e91b204ec600982961e07a17e0f6cd83371cb23f5c2", - "sha256:61758fabd58ce4b0720ae1e2fea5cfd4431591d6d590b197775329264f86311d", - "sha256:653265f9a2784db65bfca694d1edd23093ce49740b2244cde583aeb134c008f3", - "sha256:68edad3dc7d70f2f17ae4c6c1b9471a56138ca22722487eebacfd1eb5321d612", - "sha256:81a10926e5473c5fc3da8abb04119a1f5811a236dc3a38d92015cb1e6ba4cb9e", - "sha256:85ca5fcc24f0b4aeedc1d02f93707bccc04733f21d41c88334c5482219b1ccb3", - "sha256:a260627a570559181a9ea5de61ac6297aa5af202f06fd7ab093ce74e7181e43e", - "sha256:aceb1db093b04db5cd390821464504111b8ec3e351eb85afd1433490163d60cd", - "sha256:b685154e22e4e9199fc95f298661deea28aaede5ae16ccc8cbb1045e716b3e04", - "sha256:d357423fa57a489e8c47b7c85dfb96698caba13d66e086b412298a1a0ea3b0ed", - "sha256:d4d5ddc13421ba3e2e082a6c2d74c2ddb3979c39b582dacd53dd5d9431237185", - "sha256:e49499be624dead83927e70c756970a0bc8240e9f769389cdf5714b0784ca6bf", - "sha256:e54396d70be04b34f31d2edf3362c1edd023246c82f1730bbf8768c28db5361b", - "sha256:f88566144752999351725ac623471661c9d1cd8caa0134ff98cceeea181789f4", - "sha256:f8a67616990062232ee4c3952f41c779afac41405806042a8126fe96e098419f", - "sha256:fe28657de3bfec596bbeef01cb219833ad9d38dd5393fc649f4b366840baefe6" + "sha256:06d26c277962f3fb50e13044674aa10553981ae514288cb7d0a738f495550b36", + "sha256:2ff93107f01968ed834f4256bc1fc4475e2fecf6c661260066a985b52741ddce", + "sha256:36383a4fcbad95f2657642a07ba22ff797de26277158f1cc7bd234821468b1b6", + "sha256:37c7fa6121c1cdfcaac97ce3d3b5588e847aa79b580c1e922bb5d5d2902df19b", + "sha256:3a66169b92452f72117e2da3a576087025449018afc2d8e9bfe5ffab865709ca", + "sha256:3f14cd3d386ac4d05c5a39a51b84387403dadbd936e17cb35882134d4f8f0d24", + "sha256:41ea707d036a5307ac674ea172875f40c9d55c5394f888b168033177fce47383", + "sha256:478db5f5036817fe45adb7332d927daa62417159d49783041338921dcf646fc7", + "sha256:4a8a53bc3ffbd161b5b2a4fff2f0f1e23a33b0168f1c0778ec70e1a3d66deb86", + "sha256:539c570477a96a4e6fb718b8d5c3e0c0eba1f485df13f86d2970c91f0673148d", + "sha256:57555a7715c0a34421013144a33d280e73c08df70f3a18a552938587ce9274f4", + "sha256:6e658bd2d20565ea86da7d91331b0eed6d2eee22dc031579e6297f3e12c758c8", + "sha256:6e7184632d89d677973a14d00ae4d03214c8bc301ceefcdaf5c474866814c987", + "sha256:75746e06d5fa1e91bfd5432448d00d34593b52e7e91a187d981d08d1f33d4385", + "sha256:7f9993ad3e0ffdc95c2a14b66dee63729f021968bff8ad911867579c65d13a79", + "sha256:801780c56d1cdb896eacd5619a83e427ce436d86a3bdf9112527f24a66618fef", + "sha256:801ca29f43d5acce85f8e999b1e431fb479cb02d0e11deb7d2abb56bdaf24fd6", + "sha256:969ea3ef09617aff826885a22ece0ddef69d95852cdad2f60c8bb06bf1f71f70", + "sha256:a976775ab2256aadc6add633d44f100a2517d2388906ec4f13231fafbb0eccca", + "sha256:af8d155170fcf87a2afb55b35dc1a0ac21df4431e7d96717621962e4b9192e70", + "sha256:b499bc07dbdcd3de92b0a8b29fdf592c111276f6a12fe29c30f6c417dd546d12", + "sha256:cd953f221ac1379050a8a646585a29574488974f79d8082cedef62744f0a0104", + "sha256:d42a6dd818ffce7be66cce644f1dff482f1d97c53ca70908dff0b9ddc120b77a", + "sha256:e8960dbbbf36906c5c0b7f4fbf2f0c7ffb20f4898e6a879fcf56a41a08b0d318", + "sha256:edb91dded4df17eae4537668b23f0ff6baf3707683734b6a818d5b9d0c0c31a1", + "sha256:ee23de8530d99b6db0573c4ef4bd8f39a2a6f9b60655bf7a1357e585a3486f2b", + "sha256:f7821776e5c4286b6a13138cc935e2e9b6fde05e081bdebf5cdb2bb97c9df81d" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==1.9.0" + "version": "==1.11.2" }, "mypy-extensions": { "hashes": [ @@ -347,21 +365,13 @@ "markers": "python_version >= '3.5'", "version": "==1.0.0" }, - "outcome": { - "hashes": [ - "sha256:9dcf02e65f2971b80047b377468e72a268e15c0af3cf1238e6ff14f7f91143b8", - "sha256:e771c5ce06d1415e356078d3bdd68523f284b4ce5419828922b6871e65eda82b" - ], - "markers": "python_version >= '3.7'", - "version": "==1.3.0.post0" - }, "packaging": { "hashes": [ - "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5", - "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9" + "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002", + "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124" ], - "markers": "python_version >= '3.7'", - "version": "==24.0" + "markers": "python_version >= '3.8'", + "version": "==24.1" }, "pathspec": { "hashes": [ @@ -373,138 +383,140 @@ }, "platformdirs": { "hashes": [ - "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068", - "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768" + "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907", + "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb" ], "markers": "python_version >= '3.8'", - "version": "==4.2.0" + "version": "==4.3.6" }, "pluggy": { "hashes": [ - "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981", - "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be" + "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", + "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669" ], "markers": "python_version >= '3.8'", - "version": "==1.4.0" + "version": "==1.5.0" }, "pydantic": { "hashes": [ - "sha256:b1704e0847db01817624a6b86766967f552dd9dbf3afba4004409f908dcc84e6", - "sha256:cc46fce86607580867bdc3361ad462bab9c222ef042d3da86f2fb333e1d916c5" + "sha256:d155cef71265d1e9807ed1c32b4c8deec042a44a50a4188b25ac67ecd81a9c0f", + "sha256:f048cec7b26778210e28a0459867920654d48e5e62db0958433636cde4254f12" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==2.6.4" + "version": "==2.9.2" }, "pydantic-core": { "hashes": [ - "sha256:00ee1c97b5364b84cb0bd82e9bbf645d5e2871fb8c58059d158412fee2d33d8a", - "sha256:0d32576b1de5a30d9a97f300cc6a3f4694c428d956adbc7e6e2f9cad279e45ed", - "sha256:0df446663464884297c793874573549229f9eca73b59360878f382a0fc085979", - "sha256:0f56ae86b60ea987ae8bcd6654a887238fd53d1384f9b222ac457070b7ac4cff", - "sha256:13dcc4802961b5f843a9385fc821a0b0135e8c07fc3d9949fd49627c1a5e6ae5", - "sha256:162e498303d2b1c036b957a1278fa0899d02b2842f1ff901b6395104c5554a45", - "sha256:1b662180108c55dfbf1280d865b2d116633d436cfc0bba82323554873967b340", - "sha256:1cac689f80a3abab2d3c0048b29eea5751114054f032a941a32de4c852c59cad", - "sha256:21b888c973e4f26b7a96491c0965a8a312e13be108022ee510248fe379a5fa23", - "sha256:287073c66748f624be4cef893ef9174e3eb88fe0b8a78dc22e88eca4bc357ca6", - "sha256:2a1ef6a36fdbf71538142ed604ad19b82f67b05749512e47f247a6ddd06afdc7", - "sha256:2a72fb9963cba4cd5793854fd12f4cfee731e86df140f59ff52a49b3552db241", - "sha256:2acca2be4bb2f2147ada8cac612f8a98fc09f41c89f87add7256ad27332c2fda", - "sha256:2f583bd01bbfbff4eaee0868e6fc607efdfcc2b03c1c766b06a707abbc856187", - "sha256:33809aebac276089b78db106ee692bdc9044710e26f24a9a2eaa35a0f9fa70ba", - "sha256:36fa178aacbc277bc6b62a2c3da95226520da4f4e9e206fdf076484363895d2c", - "sha256:4204e773b4b408062960e65468d5346bdfe139247ee5f1ca2a378983e11388a2", - "sha256:4384a8f68ddb31a0b0c3deae88765f5868a1b9148939c3f4121233314ad5532c", - "sha256:456855f57b413f077dff513a5a28ed838dbbb15082ba00f80750377eed23d132", - "sha256:49d5d58abd4b83fb8ce763be7794d09b2f50f10aa65c0f0c1696c677edeb7cbf", - "sha256:4ac6b4ce1e7283d715c4b729d8f9dab9627586dafce81d9eaa009dd7f25dd972", - "sha256:4df8a199d9f6afc5ae9a65f8f95ee52cae389a8c6b20163762bde0426275b7db", - "sha256:500960cb3a0543a724a81ba859da816e8cf01b0e6aaeedf2c3775d12ee49cade", - "sha256:519ae0312616026bf4cedc0fe459e982734f3ca82ee8c7246c19b650b60a5ee4", - "sha256:578114bc803a4c1ff9946d977c221e4376620a46cf78da267d946397dc9514a8", - "sha256:5c5cbc703168d1b7a838668998308018a2718c2130595e8e190220238addc96f", - "sha256:6162f8d2dc27ba21027f261e4fa26f8bcb3cf9784b7f9499466a311ac284b5b9", - "sha256:704d35ecc7e9c31d48926150afada60401c55efa3b46cd1ded5a01bdffaf1d48", - "sha256:716b542728d4c742353448765aa7cdaa519a7b82f9564130e2b3f6766018c9ec", - "sha256:72282ad4892a9fb2da25defeac8c2e84352c108705c972db82ab121d15f14e6d", - "sha256:7233d65d9d651242a68801159763d09e9ec96e8a158dbf118dc090cd77a104c9", - "sha256:732da3243e1b8d3eab8c6ae23ae6a58548849d2e4a4e03a1924c8ddf71a387cb", - "sha256:75b81e678d1c1ede0785c7f46690621e4c6e63ccd9192af1f0bd9d504bbb6bf4", - "sha256:75f76ee558751746d6a38f89d60b6228fa174e5172d143886af0f85aa306fd89", - "sha256:7ee8d5f878dccb6d499ba4d30d757111847b6849ae07acdd1205fffa1fc1253c", - "sha256:7f752826b5b8361193df55afcdf8ca6a57d0232653494ba473630a83ba50d8c9", - "sha256:86b3d0033580bd6bbe07590152007275bd7af95f98eaa5bd36f3da219dcd93da", - "sha256:8d62da299c6ecb04df729e4b5c52dc0d53f4f8430b4492b93aa8de1f541c4aac", - "sha256:8e47755d8152c1ab5b55928ab422a76e2e7b22b5ed8e90a7d584268dd49e9c6b", - "sha256:9091632a25b8b87b9a605ec0e61f241c456e9248bfdcf7abdf344fdb169c81cf", - "sha256:936e5db01dd49476fa8f4383c259b8b1303d5dd5fb34c97de194560698cc2c5e", - "sha256:99b6add4c0b39a513d323d3b93bc173dac663c27b99860dd5bf491b240d26137", - "sha256:9c865a7ee6f93783bd5d781af5a4c43dadc37053a5b42f7d18dc019f8c9d2bd1", - "sha256:a425479ee40ff021f8216c9d07a6a3b54b31c8267c6e17aa88b70d7ebd0e5e5b", - "sha256:a4b2bf78342c40b3dc830880106f54328928ff03e357935ad26c7128bbd66ce8", - "sha256:a6b1bb0827f56654b4437955555dc3aeeebeddc47c2d7ed575477f082622c49e", - "sha256:aaf09e615a0bf98d406657e0008e4a8701b11481840be7d31755dc9f97c44053", - "sha256:b1f6f5938d63c6139860f044e2538baeee6f0b251a1816e7adb6cbce106a1f01", - "sha256:b29eeb887aa931c2fcef5aa515d9d176d25006794610c264ddc114c053bf96fe", - "sha256:b3992a322a5617ded0a9f23fd06dbc1e4bd7cf39bc4ccf344b10f80af58beacd", - "sha256:b5b6079cc452a7c53dd378c6f881ac528246b3ac9aae0f8eef98498a75657805", - "sha256:b60cc1a081f80a2105a59385b92d82278b15d80ebb3adb200542ae165cd7d183", - "sha256:b926dd38db1519ed3043a4de50214e0d600d404099c3392f098a7f9d75029ff8", - "sha256:bd87f48924f360e5d1c5f770d6155ce0e7d83f7b4e10c2f9ec001c73cf475c99", - "sha256:bda1ee3e08252b8d41fa5537413ffdddd58fa73107171a126d3b9ff001b9b820", - "sha256:be0ec334369316fa73448cc8c982c01e5d2a81c95969d58b8f6e272884df0074", - "sha256:c6119dc90483a5cb50a1306adb8d52c66e447da88ea44f323e0ae1a5fcb14256", - "sha256:c9803edf8e29bd825f43481f19c37f50d2b01899448273b3a7758441b512acf8", - "sha256:c9bd22a2a639e26171068f8ebb5400ce2c1bc7d17959f60a3b753ae13c632975", - "sha256:cbcc558401de90a746d02ef330c528f2e668c83350f045833543cd57ecead1ad", - "sha256:cf6204fe865da605285c34cf1172879d0314ff267b1c35ff59de7154f35fdc2e", - "sha256:d33dd21f572545649f90c38c227cc8631268ba25c460b5569abebdd0ec5974ca", - "sha256:d89ca19cdd0dd5f31606a9329e309d4fcbb3df860960acec32630297d61820df", - "sha256:d8f99b147ff3fcf6b3cc60cb0c39ea443884d5559a30b1481e92495f2310ff2b", - "sha256:d937653a696465677ed583124b94a4b2d79f5e30b2c46115a68e482c6a591c8a", - "sha256:dcca5d2bf65c6fb591fff92da03f94cd4f315972f97c21975398bd4bd046854a", - "sha256:ded1c35f15c9dea16ead9bffcde9bb5c7c031bff076355dc58dcb1cb436c4721", - "sha256:e3e70c94a0c3841e6aa831edab1619ad5c511199be94d0c11ba75fe06efe107a", - "sha256:e56f8186d6210ac7ece503193ec84104da7ceb98f68ce18c07282fcc2452e76f", - "sha256:e7774b570e61cb998490c5235740d475413a1f6de823169b4cf94e2fe9e9f6b2", - "sha256:e7c6ed0dc9d8e65f24f5824291550139fe6f37fac03788d4580da0d33bc00c97", - "sha256:ec08be75bb268473677edb83ba71e7e74b43c008e4a7b1907c6d57e940bf34b6", - "sha256:ecdf6bf5f578615f2e985a5e1f6572e23aa632c4bd1dc67f8f406d445ac115ed", - "sha256:ed25e1835c00a332cb10c683cd39da96a719ab1dfc08427d476bce41b92531fc", - "sha256:f4cb85f693044e0f71f394ff76c98ddc1bc0953e48c061725e540396d5c8a2e1", - "sha256:f53aace168a2a10582e570b7736cc5bef12cae9cf21775e3eafac597e8551fbe", - "sha256:f651dd19363c632f4abe3480a7c87a9773be27cfe1341aef06e8759599454120", - "sha256:fc4ad7f7ee1a13d9cb49d8198cd7d7e3aa93e425f371a68235f784e99741561f", - "sha256:fee427241c2d9fb7192b658190f9f5fd6dfe41e02f3c1489d2ec1e6a5ab1e04a" + "sha256:0a7df63886be5e270da67e0966cf4afbae86069501d35c8c1b3b6c168f42cb36", + "sha256:0cb3da3fd1b6a5d0279a01877713dbda118a2a4fc6f0d821a57da2e464793f05", + "sha256:0dbd8dbed2085ed23b5c04afa29d8fd2771674223135dc9bc937f3c09284d071", + "sha256:0dff76e0602ca7d4cdaacc1ac4c005e0ce0dcfe095d5b5259163a80d3a10d327", + "sha256:1278e0d324f6908e872730c9102b0112477a7f7cf88b308e4fc36ce1bdb6d58c", + "sha256:128585782e5bfa515c590ccee4b727fb76925dd04a98864182b22e89a4e6ed36", + "sha256:1498bec4c05c9c787bde9125cfdcc63a41004ff167f495063191b863399b1a29", + "sha256:19442362866a753485ba5e4be408964644dd6a09123d9416c54cd49171f50744", + "sha256:1b84d168f6c48fabd1f2027a3d1bdfe62f92cade1fb273a5d68e621da0e44e6d", + "sha256:1e90d2e3bd2c3863d48525d297cd143fe541be8bbf6f579504b9712cb6b643ec", + "sha256:20152074317d9bed6b7a95ade3b7d6054845d70584216160860425f4fbd5ee9e", + "sha256:216f9b2d7713eb98cb83c80b9c794de1f6b7e3145eef40400c62e86cee5f4e1e", + "sha256:233710f069d251feb12a56da21e14cca67994eab08362207785cf8c598e74577", + "sha256:255a8ef062cbf6674450e668482456abac99a5583bbafb73f9ad469540a3a232", + "sha256:2584f7cf844ac4d970fba483a717dbe10c1c1c96a969bf65d61ffe94df1b2863", + "sha256:2971bb5ffe72cc0f555c13e19b23c85b654dd2a8f7ab493c262071377bfce9f6", + "sha256:29d2c342c4bc01b88402d60189f3df065fb0dda3654744d5a165a5288a657368", + "sha256:2e203fdf807ac7e12ab59ca2bfcabb38c7cf0b33c41efeb00f8e5da1d86af480", + "sha256:33e3d65a85a2a4a0dc3b092b938a4062b1a05f3a9abde65ea93b233bca0e03f2", + "sha256:374a5e5049eda9e0a44c696c7ade3ff355f06b1fe0bb945ea3cac2bc336478a2", + "sha256:37b0fe330e4a58d3c58b24d91d1eb102aeec675a3db4c292ec3928ecd892a9a6", + "sha256:3d5639516376dce1940ea36edf408c554475369f5da2abd45d44621cb616f769", + "sha256:42c6dcb030aefb668a2b7009c85b27f90e51e6a3b4d5c9bc4c57631292015b0d", + "sha256:4a7cd62e831afe623fbb7aabbb4fe583212115b3ef38a9f6b71869ba644624a2", + "sha256:4ba762ed58e8d68657fc1281e9bb72e1c3e79cc5d464be146e260c541ec12d84", + "sha256:4fc714bdbfb534f94034efaa6eadd74e5b93c8fa6315565a222f7b6f42ca1166", + "sha256:4ffa2ebd4c8530079140dd2d7f794a9d9a73cbb8e9d59ffe24c63436efa8f271", + "sha256:5a1504ad17ba4210df3a045132a7baeeba5a200e930f57512ee02909fc5c4cb5", + "sha256:5c364564d17da23db1106787675fc7af45f2f7b58b4173bfdd105564e132e6fb", + "sha256:5e11661ce0fd30a6790e8bcdf263b9ec5988e95e63cf901972107efc49218b13", + "sha256:5f54b118ce5de9ac21c363d9b3caa6c800341e8c47a508787e5868c6b79c9323", + "sha256:5f5ff8d839f4566a474a969508fe1c5e59c31c80d9e140566f9a37bba7b8d556", + "sha256:61817945f2fe7d166e75fbfb28004034b48e44878177fc54d81688e7b85a3665", + "sha256:624e278a7d29b6445e4e813af92af37820fafb6dcc55c012c834f9e26f9aaaef", + "sha256:63e46b3169866bd62849936de036f901a9356e36376079b05efa83caeaa02ceb", + "sha256:6531b7ca5f951d663c339002e91aaebda765ec7d61b7d1e3991051906ddde119", + "sha256:68665f4c17edcceecc112dfed5dbe6f92261fb9d6054b47d01bf6371a6196126", + "sha256:696dd8d674d6ce621ab9d45b205df149399e4bb9aa34102c970b721554828510", + "sha256:6f783e0ec4803c787bcea93e13e9932edab72068f68ecffdf86a99fd5918878b", + "sha256:723314c1d51722ab28bfcd5240d858512ffd3116449c557a1336cbe3919beb87", + "sha256:74b9127ffea03643e998e0c5ad9bd3811d3dac8c676e47db17b0ee7c3c3bf35f", + "sha256:7530e201d10d7d14abce4fb54cfe5b94a0aefc87da539d0346a484ead376c3cc", + "sha256:77733e3892bb0a7fa797826361ce8a9184d25c8dffaec60b7ffe928153680ba8", + "sha256:78ddaaa81421a29574a682b3179d4cf9e6d405a09b99d93ddcf7e5239c742e21", + "sha256:7c9129eb40958b3d4500fa2467e6a83356b3b61bfff1b414c7361d9220f9ae8f", + "sha256:7d32706badfe136888bdea71c0def994644e09fff0bfe47441deaed8e96fdbc6", + "sha256:81965a16b675b35e1d09dd14df53f190f9129c0202356ed44ab2728b1c905658", + "sha256:8394d940e5d400d04cad4f75c0598665cbb81aecefaca82ca85bd28264af7f9b", + "sha256:86d2f57d3e1379a9525c5ab067b27dbb8a0642fb5d454e17a9ac434f9ce523e3", + "sha256:883a91b5dd7d26492ff2f04f40fbb652de40fcc0afe07e8129e8ae779c2110eb", + "sha256:88ad334a15b32a791ea935af224b9de1bf99bcd62fabf745d5f3442199d86d59", + "sha256:9261d3ce84fa1d38ed649c3638feefeae23d32ba9182963e465d58d62203bd24", + "sha256:97df63000f4fea395b2824da80e169731088656d1818a11b95f3b173747b6cd9", + "sha256:98d134c954828488b153d88ba1f34e14259284f256180ce659e8d83e9c05eaa3", + "sha256:996a38a83508c54c78a5f41456b0103c30508fed9abcad0a59b876d7398f25fd", + "sha256:9a5bce9d23aac8f0cf0836ecfc033896aa8443b501c58d0602dbfd5bd5b37753", + "sha256:9a6b5099eeec78827553827f4c6b8615978bb4b6a88e5d9b93eddf8bb6790f55", + "sha256:9d18368b137c6295db49ce7218b1a9ba15c5bc254c96d7c9f9e924a9bc7825ad", + "sha256:a4fa4fc04dff799089689f4fd502ce7d59de529fc2f40a2c8836886c03e0175a", + "sha256:a5c7ba8ffb6d6f8f2ab08743be203654bb1aaa8c9dcb09f82ddd34eadb695605", + "sha256:aea443fffa9fbe3af1a9ba721a87f926fe548d32cab71d188a6ede77d0ff244e", + "sha256:b10bd51f823d891193d4717448fab065733958bdb6a6b351967bd349d48d5c9b", + "sha256:ba1a0996f6c2773bd83e63f18914c1de3c9dd26d55f4ac302a7efe93fb8e7433", + "sha256:bb2802e667b7051a1bebbfe93684841cc9351004e2badbd6411bf357ab8d5ac8", + "sha256:cfdd16ab5e59fc31b5e906d1a3f666571abc367598e3e02c83403acabc092e07", + "sha256:d06b0c8da4f16d1d1e352134427cb194a0a6e19ad5db9161bf32b2113409e728", + "sha256:d0776dea117cf5272382634bd2a5c1b6eb16767c223c6a5317cd3e2a757c61a0", + "sha256:d18ca8148bebe1b0a382a27a8ee60350091a6ddaf475fa05ef50dc35b5df6327", + "sha256:d4488a93b071c04dc20f5cecc3631fc78b9789dd72483ba15d423b5b3689b555", + "sha256:d5f7a395a8cf1621939692dba2a6b6a830efa6b3cee787d82c7de1ad2930de64", + "sha256:d7a80d21d613eec45e3d41eb22f8f94ddc758a6c4720842dc74c0581f54993d6", + "sha256:d97683ddee4723ae8c95d1eddac7c192e8c552da0c73a925a89fa8649bf13eea", + "sha256:dcedcd19a557e182628afa1d553c3895a9f825b936415d0dbd3cd0bbcfd29b4b", + "sha256:de6d1d1b9e5101508cb37ab0d972357cac5235f5c6533d1071964c47139257df", + "sha256:df49e7a0861a8c36d089c1ed57d308623d60416dab2647a4a17fe050ba85de0e", + "sha256:df933278128ea1cd77772673c73954e53a1c95a4fdf41eef97c2b779271bd0bd", + "sha256:e08277a400de01bc72436a0ccd02bdf596631411f592ad985dcee21445bd0068", + "sha256:e38e63e6f3d1cec5a27e0afe90a085af8b6806ee208b33030e65b6516353f1a3", + "sha256:e55541f756f9b3ee346b840103f32779c695a19826a4c442b7954550a0972040", + "sha256:ec4e55f79b1c4ffb2eecd8a0cfba9955a2588497d96851f4c8f99aa4a1d39b12", + "sha256:ed1a53de42fbe34853ba90513cea21673481cd81ed1be739f7f2efb931b24916", + "sha256:ed541d70698978a20eb63d8c5d72f2cc6d7079d9d90f6b50bad07826f1320f5f", + "sha256:f09e2ff1f17c2b51f2bc76d1cc33da96298f0a036a137f5440ab3ec5360b624f", + "sha256:f220b0eea5965dec25480b6333c788fb72ce5f9129e8759ef876a1d805d00801", + "sha256:f3e0da4ebaef65158d4dfd7d3678aad692f7666877df0002b8a522cdf088f231", + "sha256:f455ee30a9d61d3e1a15abd5068827773d6e4dc513e795f380cdd59932c782d5", + "sha256:f5ef8f42bec47f21d07668a043f077d507e5bf4e668d5c6dfe6aaba89de1a5b8", + "sha256:f69a8e0b033b747bb3e36a44e7732f0c99f7edd5cea723d45bc0d6e95377ffee", + "sha256:ff02b6d461a6de369f07ec15e465a88895f3223eb75073ffea56b84d9331f607" ], "markers": "python_version >= '3.8'", - "version": "==2.16.3" + "version": "==2.23.4" }, "pygments": { "hashes": [ - "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c", - "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367" + "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199", + "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a" ], - "markers": "python_version >= '3.7'", - "version": "==2.17.2" - }, - "pysocks": { - "hashes": [ - "sha256:08e69f092cc6dbe92a0fdd16eeb9b9ffbc13cadfe5ca4c7bd92ffb078b293299", - "sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5", - "sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0" - ], - "version": "==1.7.1" + "markers": "python_version >= '3.8'", + "version": "==2.18.0" }, "pytest": { "hashes": [ - "sha256:2a8386cfc11fa9d2c50ee7b2a57e7d898ef90470a7a34c4b949ff59662bb78b7", - "sha256:ac978141a75948948817d360297b7aae0fcb9d6ff6bc9ec6d514b85d5a65c044" + "sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181", + "sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==8.1.1" + "version": "==8.3.3" }, "pytest-html": { "hashes": [ @@ -534,54 +546,45 @@ }, "requests": { "hashes": [ - "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f", - "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1" + "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", + "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6" ], - "index": "pypi", - "markers": "python_version >= '3.7'", - "version": "==2.31.0" + "markers": "python_version >= '3.8'", + "version": "==2.32.3" }, "rich": { "hashes": [ - "sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222", - "sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432" + "sha256:51a2c62057461aaf7152b4d611168f93a9fc73068f8ded2790f29fe2b5366d0c", + "sha256:8c82a3d3f8dcfe9e734771313e606b39d8247bb6b826e196f4914b333b743cf1" ], "index": "pypi", - "markers": "python_full_version >= '3.7.0'", - "version": "==13.7.1" + "markers": "python_full_version >= '3.8.0'", + "version": "==13.9.2" }, "ruff": { "hashes": [ - "sha256:3f3860057590e810c7ffea75669bdc6927bfd91e29b4baa9258fd48b540a4365", - "sha256:519cf6a0ebed244dce1dc8aecd3dc99add7a2ee15bb68cf19588bb5bf58e0488", - "sha256:60c870a7d46efcbc8385d27ec07fe534ac32f3b251e4fc44b3cbfd9e09609ef4", - "sha256:64abeed785dad51801b423fa51840b1764b35d6c461ea8caef9cf9e5e5ab34d9", - "sha256:6810563cc08ad0096b57c717bd78aeac888a1bfd38654d9113cb3dc4d3f74232", - "sha256:6fc14fa742e1d8f24910e1fff0bd5e26d395b0e0e04cc1b15c7c5e5fe5b4af91", - "sha256:986f2377f7cf12efac1f515fc1a5b753c000ed1e0a6de96747cdf2da20a1b369", - "sha256:98e98300056445ba2cc27d0b325fd044dc17fcc38e4e4d2c7711585bd0a958ed", - "sha256:af27ac187c0a331e8ef91d84bf1c3c6a5dea97e912a7560ac0cef25c526a4102", - "sha256:bb0acfb921030d00070539c038cd24bb1df73a2981e9f55942514af8b17be94e", - "sha256:c4fd98e85869603e65f554fdc5cddf0712e352fe6e61d29d5a6fe087ec82b76c", - "sha256:cf133dd744f2470b347f602452a88e70dadfbe0fcfb5fd46e093d55da65f82f7", - "sha256:cf187a7e7098233d0d0c71175375c5162f880126c4c716fa28a8ac418dcf3378", - "sha256:d3ee7880f653cc03749a3bfea720cf2a192e4f884925b0cf7eecce82f0ce5854", - "sha256:de0d5069b165e5a32b3c6ffbb81c350b1e3d3483347196ffdf86dc0ef9e37dd6", - "sha256:df52972138318bc7546d92348a1ee58449bc3f9eaf0db278906eb511889c4b50", - "sha256:f0f4484c6541a99862b693e13a151435a279b271cff20e37101116a21e2a1ad1" + "sha256:064df58d84ccc0ac0fcd63bc3090b251d90e2a372558c0f057c3f75ed73e1ccd", + "sha256:12edd2af0c60fa61ff31cefb90aef4288ac4d372b4962c2864aeea3a1a2460c0", + "sha256:140d4b5c9f5fc7a7b074908a78ab8d384dd7f6510402267bc76c37195c02a7ec", + "sha256:3c866b631f5fbce896a74a6e4383407ba7507b815ccc52bcedabb6810fdb3ef7", + "sha256:3ef0cc774b00fec123f635ce5c547dac263f6ee9fb9cc83437c5904183b55ceb", + "sha256:417b81aa1c9b60b2f8edc463c58363075412866ae4e2b9ab0f690dc1e87ac1b5", + "sha256:53fd8ca5e82bdee8da7f506d7b03a261f24cd43d090ea9db9a1dc59d9313914c", + "sha256:55bb01caeaf3a60b2b2bba07308a02fca6ab56233302406ed5245180a05c5625", + "sha256:645d7d8761f915e48a00d4ecc3686969761df69fb561dd914a773c1a8266e14e", + "sha256:785d31851c1ae91f45b3d8fe23b8ae4b5170089021fbb42402d811135f0b7117", + "sha256:7b118afbb3202f5911486ad52da86d1d52305b59e7ef2031cea3425142b97d6f", + "sha256:7d5ccc9e58112441de8ad4b29dcb7a86dc25c5f770e3c06a9d57e0e5eba48829", + "sha256:925d26471fa24b0ce5a6cdfab1bb526fb4159952385f386bdcc643813d472039", + "sha256:a67267654edc23c97335586774790cde402fb6bbdb3c2314f1fc087dee320bfa", + "sha256:a9641e31476d601f83cd602608739a0840e348bda93fec9f1ee816f8b6798b93", + "sha256:b076ef717a8e5bc819514ee1d602bbdca5b4420ae13a9cf61a0c0a4f53a2baa2", + "sha256:eae02b700763e3847595b9d2891488989cac00214da7f845f4bcf2989007d577", + "sha256:eb61ec9bdb2506cffd492e05ac40e5bc6284873aceb605503d8494180d6fc84d" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==0.3.4" - }, - "selenium": { - "hashes": [ - "sha256:5b4f49240d61e687a73f7968ae2517d403882aae3550eae2a229c745e619f1d9", - "sha256:d9dfd6d0b021d71d0a48b865fe7746490ba82b81e9c87b212360006629eb1853" - ], - "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==4.19.0" + "version": "==0.6.9" }, "sniffio": { "hashes": [ @@ -591,81 +594,41 @@ "markers": "python_version >= '3.7'", "version": "==1.3.1" }, - "sortedcontainers": { - "hashes": [ - "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88", - "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0" - ], - "version": "==2.4.0" - }, "syrupy": { "hashes": [ - "sha256:203e52f9cb9fa749cf683f29bd68f02c16c3bc7e7e5fe8f2fc59bdfe488ce133", - "sha256:37a835c9ce7857eeef86d62145885e10b3cb9615bc6abeb4ce404b3f18e1bb36" + "sha256:ea45e099f242de1bb53018c238f408a5bb6c82007bc687aefcbeaa0e1c2e935a", + "sha256:eae7ba6be5aed190237caa93be288e97ca1eec5ca58760e4818972a10c4acc64" ], "index": "pypi", - "markers": "python_version < '4' and python_full_version >= '3.8.1'", - "version": "==4.6.1" - }, - "trio": { - "hashes": [ - "sha256:9b41f5993ad2c0e5f62d0acca320ec657fdb6b2a2c22b8c7aed6caf154475c4e", - "sha256:e6458efe29cc543e557a91e614e2b51710eba2961669329ce9c862d50c6e8e81" - ], - "markers": "python_version >= '3.8'", - "version": "==0.25.0" - }, - "trio-websocket": { - "hashes": [ - "sha256:18c11793647703c158b1f6e62de638acada927344d534e3c7628eedcb746839f", - "sha256:520d046b0d030cf970b8b2b2e00c4c2245b3807853ecd44214acd33d74581638" - ], - "markers": "python_version >= '3.7'", - "version": "==0.11.1" - }, - "types-requests": { - "hashes": [ - "sha256:47872893d65a38e282ee9f277a4ee50d1b28bd592040df7d1fdaffdf3779937d", - "sha256:b1c1b66abfb7fa79aae09097a811c4aa97130eb8831c60e47aee4ca344731ca5" - ], - "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==2.31.0.20240311" + "markers": "python_full_version >= '3.8.1'", + "version": "==4.7.2" }, "typing-extensions": { "hashes": [ - "sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475", - "sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb" + "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", + "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8" ], - "markers": "python_version >= '3.8'", - "version": "==4.10.0" + "markers": "python_version >= '3.13'", + "version": "==4.12.2" }, "urllib3": { "extras": [ "socks" ], "hashes": [ - "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d", - "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19" + "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac", + "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9" ], "markers": "python_version >= '3.8'", - "version": "==2.2.1" - }, - "wsproto": { - "hashes": [ - "sha256:ad565f26ecb92588a3e43bc3d96164de84cd9902482b130d0ddbaa9664a85065", - "sha256:b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736" - ], - "markers": "python_full_version >= '3.7.0'", - "version": "==1.2.0" + "version": "==2.2.3" }, "zipp": { "hashes": [ - "sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b", - "sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715" + "sha256:a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350", + "sha256:bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29" ], "markers": "python_version >= '3.8'", - "version": "==3.18.1" + "version": "==3.20.2" } }, "develop": {} diff --git a/analyses-snapshot-testing/README.md b/analyses-snapshot-testing/README.md index 1ed330efefe..51a8e194ca1 100644 --- a/analyses-snapshot-testing/README.md +++ b/analyses-snapshot-testing/README.md @@ -14,6 +14,12 @@ - In CI this is the `SNAPSHOT_REF`. This is the branch or tag of the test code/snapshots that analyses generated will be compared to. - The `ANALYSIS_REF` is the branch or tag that you want analyses generated from. +## Build the opentrons-analysis image + +> This ALWAYS gets the remote code pushed to Opentrons/opentrons for the specified ANALYSIS_REF + +`make build-opentrons-analysis ANALYSIS_REF=chore_release-8.0.0` + ## Running the tests locally - Compare the current branch snapshots to analyses generated from the edge branch @@ -38,3 +44,17 @@ - `make snapshot-test PROTOCOL_NAMES=Flex_S_v2_19_Illumina_DNA_PCR_Free OVERRIDE_PROTOCOL_NAMES=none` - `make snapshot-test PROTOCOL_NAMES=none OVERRIDE_PROTOCOL_NAMES=Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP` - `make snapshot-test PROTOCOL_NAMES="Flex_S_v2_19_Illumina_DNA_PCR_Free,OT2_S_v2_18_P300M_P20S_HS_TC_TM_SmokeTestV3" OVERRIDE_PROTOCOL_NAMES=none` + +## Running a Flex just like `make -C robot-server dev-flex` + +> This ALWAYS gets the remote code pushed to Opentrons/opentrons for the specified OPENTRONS_VERSION + +```shell +cd analyses-snapshot-testing \ +&& make build-rs OPENTRONS_VERSION=chore_release-8.0.0 \ +&& make run-rs OPENTRONS_VERSION=chore_release-8.0.0` +``` + +### Default OPENTRONS_VERSION=edge in the Makefile so you can omit it if you want latest edge + +`cd analyses-snapshot-testing && make build-rs && make run-rs` diff --git a/analyses-snapshot-testing/automation/data/protocols.py b/analyses-snapshot-testing/automation/data/protocols.py index 580c9183d9d..ada74a736e0 100644 --- a/analyses-snapshot-testing/automation/data/protocols.py +++ b/analyses-snapshot-testing/automation/data/protocols.py @@ -641,6 +641,74 @@ class Protocols: robot="Flex", ) + # analyses-snapshot-testing/files/protocols/Flex_S_v2_20_8_None_PARTIAL_COLUMN_HappyPath.py + Flex_S_v2_20_8_None_PARTIAL_COLUMN_HappyPath: Protocol = Protocol( + file_stem="Flex_S_v2_20_8_None_PARTIAL_COLUMN_HappyPath", + file_extension="py", + robot="Flex", + ) + # analyses-snapshot-testing/files/protocols/Flex_S_v2_20_8_None_SINGLE_HappyPath.py + Flex_S_v2_20_8_None_SINGLE_HappyPath: Protocol = Protocol( + file_stem="Flex_S_v2_20_8_None_SINGLE_HappyPath", + file_extension="py", + robot="Flex", + ) + # analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_AllCorners.py + Flex_S_v2_20_96_AllCorners: Protocol = Protocol( + file_stem="Flex_S_v2_20_96_AllCorners", + file_extension="py", + robot="Flex", + ) + # analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_None_COLUMN_HappyPath.py + Flex_S_v2_20_96_None_COLUMN_HappyPath: Protocol = Protocol( + file_stem="Flex_S_v2_20_96_None_COLUMN_HappyPath", + file_extension="py", + robot="Flex", + ) + # analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_None_Column3_SINGLE_.py + Flex_S_v2_20_96_None_Column3_SINGLE_: Protocol = Protocol( + file_stem="Flex_S_v2_20_96_None_Column3_SINGLE_", + file_extension="py", + robot="Flex", + ) + # analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_None_ROW_HappyPath.py + Flex_S_v2_20_96_None_ROW_HappyPath: Protocol = Protocol( + file_stem="Flex_S_v2_20_96_None_ROW_HappyPath", + file_extension="py", + robot="Flex", + ) + # analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_None_SINGLE_4Corners50ul.py + Flex_S_v2_20_96_None_SINGLE_4Corners50ul: Protocol = Protocol( + file_stem="Flex_S_v2_20_96_None_SINGLE_4Corners50ul", + file_extension="py", + robot="Flex", + ) + # analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_None_SINGLE_HappyPathNorthSide.py + Flex_S_v2_20_96_None_SINGLE_HappyPathNorthSide: Protocol = Protocol( + file_stem="Flex_S_v2_20_96_None_SINGLE_HappyPathNorthSide", + file_extension="py", + robot="Flex", + ) + # analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_None_SINGLE_HappyPathSouthSide.py + Flex_S_v2_20_96_None_SINGLE_HappyPathSouthSide: Protocol = Protocol( + file_stem="Flex_S_v2_20_96_None_SINGLE_HappyPathSouthSide", + file_extension="py", + robot="Flex", + ) + + # analyses-snapshot-testing/files/protocols/Flex_S_v2_20_P8X1000_P50_LLD.py + Flex_S_v2_20_P8X1000_P50_LLD: Protocol = Protocol( + file_stem="Flex_S_v2_20_P8X1000_P50_LLD", + file_extension="py", + robot="Flex", + ) + # analyses-snapshot-testing/files/protocols/Flex_S_v2_20_P50_LPD.py + Flex_S_v2_20_P50_LPD: Protocol = Protocol( + file_stem="Flex_S_v2_20_P50_LPD", + file_extension="py", + robot="Flex", + ) + OT2_X_v2_18_None_None_duplicateRTPVariableName: Protocol = Protocol( file_stem="OT2_X_v2_18_None_None_duplicateRTPVariableName", file_extension="py", @@ -677,6 +745,19 @@ class Protocols: robot="OT2", ) + # analyses-snapshot-testing/files/protocols/OT2_S_v2_20_8_None_PARTIAL_COLUMN_HappyPathMixedTipRacks.py + OT2_S_v2_20_8_None_PARTIAL_COLUMN_HappyPathMixedTipRacks: Protocol = Protocol( + file_stem="OT2_S_v2_20_8_None_PARTIAL_COLUMN_HappyPathMixedTipRacks", + file_extension="py", + robot="OT2", + ) + # analyses-snapshot-testing/files/protocols/OT2_S_v2_20_8_None_SINGLE_HappyPath.py + OT2_S_v2_20_8_None_SINGLE_HappyPath: Protocol = Protocol( + file_stem="OT2_S_v2_20_8_None_SINGLE_HappyPath", + file_extension="py", + robot="OT2", + ) + ########################################################################################################## # Begin Protocol Library Protocols ####################################################################### ########################################################################################################## diff --git a/analyses-snapshot-testing/automation/data/protocols_with_overrides.py b/analyses-snapshot-testing/automation/data/protocols_with_overrides.py index ff4a900e58d..5018a848c31 100644 --- a/analyses-snapshot-testing/automation/data/protocols_with_overrides.py +++ b/analyses-snapshot-testing/automation/data/protocols_with_overrides.py @@ -38,3 +38,72 @@ class ProtocolsWithOverrides: override_variable_name="type_to_test", overrides=["str_default_no_matching_choices", "float_default_no_matching_choices", "int_default_no_matching_choices"], ) + + # analyses-snapshot-testing/files/protocols/Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs.py + + Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs: ProtocolWithOverrides = ProtocolWithOverrides( + file_stem="Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs", + file_extension="py", + robot="Flex", + override_variable_name="key", + overrides=[ + "ninety_six_partial_column_1", + "ninety_six_partial_column_2", + "ninety_six_partial_column_3", + "eight_partial_column_bottom_left", + "eight_partial_column_bottom_right", + "eight_partial_column_no_end", + "return_tip_error", + "drop_tip_with_location", + ], + ) + + # analyses-snapshot-testing/files/protocols/Flex_X_v2_20_96_None_Overrides_TooTallLabware.py + + Flex_X_v2_20_96_None_Overrides_TooTallLabware: ProtocolWithOverrides = ProtocolWithOverrides( + file_stem="Flex_X_v2_20_96_None_Overrides_TooTallLabware", + file_extension="py", + robot="Flex", + override_variable_name="key", + overrides=[ + "transfer_source_collision", + "transfer_destination_collision", + "c3_right_edge", + "north", + "north_west", + "west", + "south_west", + "south", + "south_east", + "east", + "east_column", + "west_column", + "north_row", + "south_row", + "top_edge", + "bottom_left_edge", + "bottom_left_edge", + "bottom_right_edge", + "mix_collision", + "consolidate_source_collision", + "consolidate_destination_collision", + "distribute_source_collision", + "distribute_destination_collision", + ], + ) + + # analyses-snapshot-testing/files/protocols/OT2_X_v2_20_8_Overrides_InvalidConfigs.py + + OT2_X_v2_20_8_Overrides_InvalidConfigs: ProtocolWithOverrides = ProtocolWithOverrides( + file_stem="OT2_X_v2_20_8_Overrides_InvalidConfigs", + file_extension="py", + robot="Flex", + override_variable_name="key", + overrides=[ + "eight_partial_column_bottom_left", + "eight_partial_column_bottom_right", + "eight_partial_column_no_end", + "return_tip_error", + "drop_tip_with_location", + ], + ) diff --git a/analyses-snapshot-testing/citools/Dockerfile.server b/analyses-snapshot-testing/citools/Dockerfile.server new file mode 100644 index 00000000000..6d4d9edcda3 --- /dev/null +++ b/analyses-snapshot-testing/citools/Dockerfile.server @@ -0,0 +1,31 @@ +# Use Python 3.10 as the base image +FROM python:3.10-slim-bullseye + +# Update packages and install dependencies +RUN apt-get update && \ + apt-get upgrade -y && \ + apt-get install -y git libsystemd-dev build-essential pkg-config network-manager + +# Define build arguments +ARG OPENTRONS_VERSION=edge + +# Set the working directory +WORKDIR /opentrons + +# Clone the Opentrons repository +ARG CACHEBUST=1 +RUN git clone --branch $OPENTRONS_VERSION --depth 1 https://github.com/Opentrons/opentrons . + +# Install dependencies +RUN make setup-py -j + +WORKDIR /opentrons/robot-server + +# Set the port via environment variable +ENV PORT=31950 + +# Expose the port +EXPOSE ${PORT} + +# Default command +CMD ["sh", "-c", "python -m pipenv run uvicorn robot_server.app:app --host 0.0.0.0 --port ${PORT} --ws wsproto --lifespan on"] diff --git a/analyses-snapshot-testing/citools/generate_analyses.py b/analyses-snapshot-testing/citools/generate_analyses.py index f1335b102ae..f67d0394429 100644 --- a/analyses-snapshot-testing/citools/generate_analyses.py +++ b/analyses-snapshot-testing/citools/generate_analyses.py @@ -1,13 +1,13 @@ +import concurrent import json import os -import signal import time -from contextlib import contextmanager +from concurrent.futures import ThreadPoolExecutor from dataclasses import dataclass from datetime import datetime, timezone from enum import Enum, auto from pathlib import Path -from typing import Any, Dict, Generator, List, Optional +from typing import Any, Dict, List, Optional import docker # type: ignore from automation.data.protocol import Protocol @@ -15,31 +15,22 @@ from rich.traceback import install install(show_locals=True) -IMAGE = "opentrons-analysis" -CONTAINER_LABWARE = "/var/lib/ot" -HOST_LABWARE = Path(Path(__file__).parent.parent, "files", "labware") -HOST_PROTOCOLS_ROOT = Path(Path(__file__).parent.parent, "files", "protocols") -CONTAINER_PROTOCOLS_ROOT = "/var/lib/ot/protocols" -CONTAINER_RESULTS = "/var/lib/ot/analysis_results" -HOST_RESULTS = Path(Path(__file__).parent.parent, "analysis_results") -ANALYSIS_SUFFIX = "analysis.json" +IMAGE: str = "opentrons-analysis" +CONTAINER_LABWARE: str = "/var/lib/ot" +HOST_LABWARE: Path = Path(Path(__file__).parent.parent, "files", "labware") +HOST_PROTOCOLS_ROOT: Path = Path(Path(__file__).parent.parent, "files", "protocols") +CONTAINER_PROTOCOLS_ROOT: str = "/var/lib/ot/protocols" +CONTAINER_RESULTS: str = "/var/lib/ot/analysis_results" +HOST_RESULTS: Path = Path(Path(__file__).parent.parent, "analysis_results") +ANALYSIS_SUFFIX: str = "analysis.json" +ANALYSIS_TIMEOUT_SECONDS: int = 30 +ANALYSIS_CONTAINER_INSTANCES: int = 5 console = Console() -@contextmanager -def timeout(seconds: int) -> Generator[None, None, None]: - # Signal handler function - def raise_timeout(signum, frame) -> None: # type: ignore[no-untyped-def] - raise TimeoutError - - # Set the signal handler for the alarm signal - signal.signal(signal.SIGALRM, raise_timeout) - signal.alarm(seconds) # Set the alarm - try: - yield - finally: - signal.alarm(0) # Disable the alarm +def is_running_in_github_actions() -> bool: + return os.getenv("GITHUB_ACTIONS") == "true" class ProtocolType(Enum): @@ -48,7 +39,7 @@ class ProtocolType(Enum): @dataclass -class AnalyzedProtocol: +class TargetProtocol: host_protocol_file: Path container_protocol_file: Path host_analysis_file: Path @@ -111,7 +102,7 @@ def set_analysis_execution_time(self, analysis_execution_time: float) -> None: self.analysis_execution_time = analysis_execution_time -def stop_and_restart_container(image_name: str, timeout: int = 60) -> docker.models.containers.Container: +def start_containers(image_name: str, num_containers: int, timeout: int = 60) -> List[docker.models.containers.Container]: client = docker.from_env() volumes = { str(HOST_LABWARE): {"bind": CONTAINER_LABWARE, "mode": "rw"}, @@ -119,64 +110,55 @@ def stop_and_restart_container(image_name: str, timeout: int = 60) -> docker.mod str(HOST_PROTOCOLS_ROOT): {"bind": CONTAINER_PROTOCOLS_ROOT, "mode": "rw"}, } - # Find the running container using the specified image - containers = client.containers.list(filters={"ancestor": image_name, "status": "running"}) - + # Stop and remove existing containers + containers: List[docker.models.containers.Container] = client.containers.list(filters={"ancestor": image_name}) if containers: - console.print("Stopping the running container(s)...") + console.print("Stopping and removing existing container(s)...") for container in containers: container.stop(timeout=10) + container.remove() - # Start a new container with the specified volume - console.print("Starting a new container.") - container = client.containers.run(image_name, detach=True, volumes=volumes) + # Start new containers + console.print(f"Starting {num_containers} new container(s).") + containers = [] + for _ in range(num_containers): + container = client.containers.run(image_name, detach=True, volumes=volumes) + containers.append(container) - # Wait for the container to be ready if a readiness command is provided + # Wait for containers to be ready start_time = time.time() while time.time() - start_time < timeout: - exit_code, output = container.exec_run(f"ls -al {CONTAINER_LABWARE}") - if exit_code == 0: - console.print("Container is ready.") + all_ready = True + for container in containers: + exit_code, _ = container.exec_run(f"ls -al {CONTAINER_LABWARE}") + if exit_code != 0: + all_ready = False + break + if all_ready: + console.print("All containers are ready.") break else: - console.print("Waiting for container to be ready...") - time.sleep(5) + console.print("Waiting for containers to be ready...") + time.sleep(5) else: - console.print("Timeout waiting for container to be ready. Proceeding anyway.") - return container + console.print("Timeout waiting for containers to be ready. Proceeding anyway.") + return containers def stop_and_remove_containers(image_name: str) -> None: client = docker.from_env() - - # Find all containers created from the specified image containers = client.containers.list(all=True, filters={"ancestor": image_name}) - for container in containers: try: - # Stop the container if it's running if container.status == "running": console.print(f"Stopping container {container.short_id}...") container.stop(timeout=10) - - # Remove the container console.print(f"Removing container {container.short_id}...") container.remove() - except docker.errors.ContainerError as e: + except Exception as e: console.print(f"Error stopping/removing container {container.short_id}: {e}") -def has_designer_application(json_file_path: Path) -> bool: - try: - with open(json_file_path, "r", encoding="utf-8") as file: - data = json.load(file) - return "designerApplication" in data - except json.JSONDecodeError: - # Handle the exception if the file is not a valid JSON - console.print(f"Invalid JSON file: {json_file_path}") - return False - - def host_analysis_path(protocol_file: Path, tag: str) -> Path: return Path(HOST_RESULTS, f"{protocol_file.stem}_{tag}_{ANALYSIS_SUFFIX}") @@ -185,79 +167,6 @@ def container_analysis_path(protocol_file: Path, tag: str) -> Path: return Path(CONTAINER_RESULTS, f"{protocol_file.stem}_{tag}_{ANALYSIS_SUFFIX}") -def generate_protocols(tag: str) -> List[AnalyzedProtocol]: - - # Since we do not have the specification for which labware to use - # we will use all labware in the host labware directory - all_custom_labware_paths = [str(host_path.relative_to(CONTAINER_LABWARE)) for host_path in list(Path(HOST_LABWARE).rglob("*.json"))] - - def find_pd_protocols() -> List[AnalyzedProtocol]: - # Check if the provided path is a valid directory - if not HOST_PROTOCOLS_ROOT.is_dir(): - raise NotADirectoryError(f"The path {HOST_PROTOCOLS_ROOT} is not a valid directory.") - - nonlocal all_custom_labware_paths - - # Recursively find all .json files - json_files = list(HOST_PROTOCOLS_ROOT.rglob("*.json")) - filtered_json_files = [file for file in json_files if has_designer_application(file)] - pd_protocols: List[AnalyzedProtocol] = [] - for path in filtered_json_files: - relative_path = path.relative_to(HOST_PROTOCOLS_ROOT) - updated_path = Path(CONTAINER_PROTOCOLS_ROOT, relative_path) - pd_protocols.append( - AnalyzedProtocol( - host_protocol_file=path, - container_protocol_file=updated_path, - host_analysis_file=host_analysis_path(path, tag), - container_analysis_file=container_analysis_path(path, tag), - tag=tag, - custom_labware_paths=all_custom_labware_paths, - ) - ) - return pd_protocols - - def find_python_protocols() -> List[AnalyzedProtocol]: - # Check if the provided path is a valid directory - if not HOST_PROTOCOLS_ROOT.is_dir(): - raise NotADirectoryError(f"The path {HOST_PROTOCOLS_ROOT} is not a valid directory.") - - nonlocal all_custom_labware_paths - - # Recursively find all .py files - python_files = list(HOST_PROTOCOLS_ROOT.rglob("*.py")) - py_protocols: List[AnalyzedProtocol] = [] - - for path in python_files: - relative_path = path.relative_to(HOST_PROTOCOLS_ROOT) - container_path = Path(CONTAINER_PROTOCOLS_ROOT, relative_path) - py_protocols.append( - AnalyzedProtocol( - host_protocol_file=path, - container_protocol_file=container_path, - host_analysis_file=host_analysis_path(path, tag), - container_analysis_file=container_analysis_path(path, tag), - tag=tag, - custom_labware_paths=all_custom_labware_paths, - ) - ) - return py_protocols - - return find_pd_protocols() + find_python_protocols() - - -def remove_all_files_in_directory(directory: Path) -> None: - for filename in os.listdir(directory): - file_path = os.path.join(directory, filename) - try: - if os.path.isfile(file_path) or os.path.islink(file_path): - os.unlink(file_path) - elif os.path.isdir(file_path): - pass # Currently, subdirectories are not removed - except Exception as e: - console.print(f"Failed to delete {file_path}. Reason: {e}") - - def protocol_custom_labware_paths_in_container(protocol: Protocol) -> List[str]: if not HOST_LABWARE.is_dir() or protocol.custom_labware is None: return [] @@ -269,98 +178,87 @@ def protocol_custom_labware_paths_in_container(protocol: Protocol) -> List[str]: ] -def analyze(protocol: AnalyzedProtocol, container: docker.models.containers.Container) -> bool: - # Run the analyze command - command = f"python -I -m opentrons.cli analyze --json-output {protocol.container_analysis_file} {protocol.container_protocol_file} {' '.join(protocol.custom_labware_paths)}" # noqa: E501 +def analyze(protocol: TargetProtocol, container: docker.models.containers.Container) -> bool: + command = ( + f"python -I -m opentrons.cli analyze --json-output {protocol.container_analysis_file} " + f"{protocol.container_protocol_file} {' '.join(protocol.custom_labware_paths)}" + ) start_time = time.time() - timeout_duration = 30 # seconds + result = None + exit_code = None try: - with timeout(timeout_duration): - command_result = container.exec_run(cmd=command) - exit_code = command_result.exit_code - result = command_result.output - protocol.command_output = result.decode("utf-8") - protocol.command_exit_code = exit_code - protocol.set_analysis() - protocol.set_analysis_execution_time(time.time() - start_time) - return True - except TimeoutError: - console.print(f"Command execution exceeded {timeout_duration} seconds and was aborted.") - logs = container.logs() - # Decode and print the logs - console.print(f"container logs{logs.decode('utf-8')}") - except KeyboardInterrupt: - console.print("Execution was interrupted by the user.") - raise + command_result = container.exec_run(cmd=command) + exit_code = command_result.exit_code + result = command_result.output + protocol.command_output = result.decode("utf-8") if result else "" + protocol.command_exit_code = exit_code + protocol.set_analysis() + return True except Exception as e: console.print(f"An unexpected error occurred: {e}") - protocol.command_output = result.decode("utf-8") - console.print(f"Command output: {protocol.command_output}") - protocol.command_exit_code = exit_code - console.print(f"Exit code: {protocol.command_exit_code}") + protocol.command_output = result.decode("utf-8") if result else str(e) + protocol.command_exit_code = exit_code if exit_code is not None else -1 protocol.set_analysis() return False - protocol.command_output = None - protocol.command_exit_code = None - protocol.analysis = None - protocol.set_analysis_execution_time(time.time() - start_time) - return False - + finally: + protocol.set_analysis_execution_time(time.time() - start_time) + console.print(f"Analysis of {protocol.host_protocol_file.name} completed in {protocol.analysis_execution_time:.2f} seconds.") + + +def analyze_many(protocol_files: List[TargetProtocol], containers: List[docker.models.containers.Container]) -> None: + num_containers = len(containers) + with ThreadPoolExecutor(max_workers=num_containers) as executor: + futures = [] + for i, protocol in enumerate(protocol_files): + container = containers[i % num_containers] + future = executor.submit(analyze, protocol, container) + futures.append((future, protocol)) + for future, protocol in futures: + try: + future.result(timeout=ANALYSIS_TIMEOUT_SECONDS) + except concurrent.futures.TimeoutError: + console.print(f"Analysis of {protocol.host_protocol_file} exceeded {ANALYSIS_TIMEOUT_SECONDS} seconds and was aborted.") + # Handle timeout (e.g., mark as failed) + except Exception as e: + console.print(f"An error occurred during analysis: {e}") -def analyze_many(protocol_files: List[AnalyzedProtocol], container: docker.models.containers.Container) -> None: - for file in protocol_files: - analyze(file, container) accumulated_time = sum(protocol.analysis_execution_time for protocol in protocol_files if protocol.analysis_execution_time is not None) console.print(f"{len(protocol_files)} protocols with total analysis time of {accumulated_time:.2f} seconds.\n") -def analyze_against_image(tag: str) -> List[AnalyzedProtocol]: +def analyze_against_image(tag: str, protocols: List[TargetProtocol], num_containers: int = 1) -> List[TargetProtocol]: image_name = f"{IMAGE}:{tag}" - protocols = generate_protocols(tag) - protocols_to_process = protocols - # protocols_to_process = protocols[:1] # For testing try: - console.print(f"Analyzing {len(protocols_to_process)} protocol(s) against {image_name}...") - container = stop_and_restart_container(image_name) - analyze_many(protocols_to_process, container) + console.print(f"\nAnalyzing {len(protocols)} protocol(s) against {image_name} using {num_containers} container(s)...") + containers = start_containers(image_name, num_containers) + analyze_many(protocols, containers) finally: - stop_and_remove_containers(image_name) - return protocols_to_process + if is_running_in_github_actions(): + pass # We don't need to stop and remove containers in CI + else: + stop_and_remove_containers(image_name) + return protocols def generate_analyses_from_test(tag: str, protocols: List[Protocol]) -> None: """Generate analyses from the tests.""" - try: - image_name = f"{IMAGE}:{tag}" - protocols_to_process: List[AnalyzedProtocol] = [] - # convert the protocols to AnalyzedProtocol - for test_protocol in protocols: - host_protocol_file = Path(test_protocol.file_path) - container_protocol_file = Path(CONTAINER_PROTOCOLS_ROOT, host_protocol_file.relative_to(HOST_PROTOCOLS_ROOT)) - host_analysis_file = host_analysis_path(host_protocol_file, tag) - container_analysis_file = container_analysis_path(host_protocol_file, tag) - protocols_to_process.append( - AnalyzedProtocol( - host_protocol_file, - container_protocol_file, - host_analysis_file, - container_analysis_file, - tag, - protocol_custom_labware_paths_in_container(test_protocol), - ) + start_time = time.time() + protocols_to_process: List[TargetProtocol] = [] + for test_protocol in protocols: + host_protocol_file = Path(test_protocol.file_path) + container_protocol_file = Path(CONTAINER_PROTOCOLS_ROOT, host_protocol_file.relative_to(HOST_PROTOCOLS_ROOT)) + host_analysis_file = host_analysis_path(host_protocol_file, tag) + container_analysis_file = container_analysis_path(host_protocol_file, tag) + protocols_to_process.append( + TargetProtocol( + host_protocol_file, + container_protocol_file, + host_analysis_file, + container_analysis_file, + tag, + protocol_custom_labware_paths_in_container(test_protocol), ) - console.print(f"Analyzing {len(protocols_to_process)} protocol(s) against {tag}...") - container = stop_and_restart_container(image_name) - # Analyze the protocols - for protocol_to_analyze in protocols_to_process: - console.print(f"Analyzing {protocol_to_analyze.host_protocol_file}...") - analyzed = analyze(protocol_to_analyze, container) - if not analyzed: # Fail fast - console.print("Analysis failed. Exiting.") - stop_and_remove_containers(image_name) - accumulated_time = sum( - protocol.analysis_execution_time for protocol in protocols_to_process if protocol.analysis_execution_time is not None ) - console.print(f"{len(protocols_to_process)} protocols with total analysis time of {accumulated_time:.2f} seconds.\n") - finally: - stop_and_remove_containers(image_name) + analyze_against_image(tag, protocols_to_process, ANALYSIS_CONTAINER_INSTANCES) + end_time = time.time() + console.print(f"Clock time to generate analyses: {end_time - start_time:.2f} seconds.") diff --git a/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_1000M_Simple.py b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_1000M_Simple.py new file mode 100644 index 00000000000..36fe24def92 --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_1000M_Simple.py @@ -0,0 +1,93 @@ +from opentrons.protocol_api import PARTIAL_COLUMN + +metadata = { + "protocolName": "flex_8channel_1000 Simple", + "description": "A protocol that demonstrates safe actions with flex_8channel_1000", + "author": "Josh McVey", +} + +requirements = { + "robotType": "Flex", + "apiLevel": "2.20", +} + + +def comment_tip_rack_status(ctx, tip_rack): + """ + Print out the tip status for each row in a tip rack. + Each row (A-H) will print the well statuses for columns 1-12 in a single comment, + with a '🟢' for present tips and a '❌' for missing tips. + """ + range_A_to_H = [chr(i) for i in range(ord("A"), ord("H") + 1)] + range_1_to_12 = range(1, 13) + + ctx.comment(f"Tip rack in {tip_rack.parent}") + + for row in range_A_to_H: + status_line = f"{row}: " + for col in range_1_to_12: + well = f"{row}{col}" + has_tip = tip_rack.wells_by_name()[well].has_tip + status_emoji = "🟢" if has_tip else "❌" + status_line += f"{well} {status_emoji} " + + # Print the full status line for the row + ctx.comment(status_line) + + +def run(protocol): + + trash = protocol.load_trash_bin("A3") # must load trash bin + tip_rack = protocol.load_labware( + load_name="opentrons_flex_96_tiprack_1000ul", + label="Tip Rack", + location="A1", + ) + + pipette = protocol.load_instrument(instrument_name="flex_8channel_1000", mount="left", tip_racks=[tip_rack]) + + source_labware_C2 = protocol.load_labware( + load_name="nest_1_reservoir_290ml", + label="Source Reservoir", + location="C2", + ) + + destination_labware_D2 = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="PCR Plate", + location="2", + ) + + volume = 100 + pipette.pick_up_tip() + comment_tip_rack_status(protocol, tip_rack) + pipette.aspirate(volume=volume, location=destination_labware_D2["H1"]) + pipette.dispense(volume=volume, location=destination_labware_D2["H2"]) + for i in range(1, 13): + protocol.comment(f"Touching tip to {destination_labware_D2[f'H{i}']}") + pipette.touch_tip(location=destination_labware_D2[f"H{i}"]) + + pipette.blow_out(location=destination_labware_D2["H1"]) + pipette.mix(repetitions=3, volume=volume, location=destination_labware_D2["H1"]) + pipette.drop_tip() + + range_A_to_H = [chr(i) for i in range(ord("A"), ord("H") + 1)] + column1 = [destination_labware_D2[f"{row}1"] for row in range_A_to_H] + column2 = [destination_labware_D2[f"{row}2"] for row in range_A_to_H] + column3 = [destination_labware_D2[f"{row}3"] for row in range_A_to_H] + column4 = [destination_labware_D2[f"{row}4"] for row in range_A_to_H] + column5 = [destination_labware_D2[f"{row}5"] for row in range_A_to_H] + column6 = [destination_labware_D2[f"{row}6"] for row in range_A_to_H] + column7 = [destination_labware_D2[f"{row}7"] for row in range_A_to_H] + + protocol.comment(f"Transferring {volume}uL from column 1 to column 2") + pipette.transfer(volume=volume, source=column1, dest=column2) + comment_tip_rack_status(protocol, tip_rack) + + volume = 50 + protocol.comment(f"Distribute {volume}uL from column 2 to column 3 and 4") + pipette.distribute(volume=volume, source=column2, dest=column3 + column4) + comment_tip_rack_status(protocol, tip_rack) + protocol.comment(f"Consolidate {volume}uL from column 5 and 6 to column 7") + pipette.consolidate(volume=volume, source=column5 + column6, dest=column7) + comment_tip_rack_status(protocol, tip_rack) diff --git a/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_8_None_PARTIAL_COLUMN_HappyPath.py b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_8_None_PARTIAL_COLUMN_HappyPath.py new file mode 100644 index 00000000000..cde6baf358f --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_8_None_PARTIAL_COLUMN_HappyPath.py @@ -0,0 +1,109 @@ +from opentrons.protocol_api import PARTIAL_COLUMN + +metadata = { + "protocolName": "8 Channel PARTIAL_COLUMN Happy Path A1 or H1", + "description": "Tip Rack South Clearance for the 8 Channel pipette and a SINGLE partial tip configuration.", +} + +requirements = { + "robotType": "Flex", + "apiLevel": "2.20", +} + + +def run(protocol): + + trash = protocol.load_trash_bin("A3") # must load trash bin + + thermocycler = protocol.load_module("thermocycler module gen2") + + partial_tip_rack = protocol.load_labware( + load_name="opentrons_flex_96_tiprack_50ul", + label="Partial Tip Rack", + location="B3", + ) + + pipette = protocol.load_instrument(instrument_name="flex_8channel_50", mount="right") + # mount on the right and you will get an error. + + pipette.configure_nozzle_layout( + style=PARTIAL_COLUMN, + start="H1", + end="B1", # 2 Tips + tip_racks=[partial_tip_rack], + ) + + source_labware_B2 = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="B2 Source Labware", + location="B2", + ) + + destination_labware_C2 = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="C2 Destination Labware", + location="C2", + ) + + volume = 10 # Default volume for actions that require it + + # ############################# + # # Pipette do work + # # leading nozzle + # # index in based on eh number of tips in my current configuration + # pipette.transfer(volume, source_labware_B2["B6"], destination_labware_C2["A6"]) + + # pipette.pick_up_tip() + # pipette.touch_tip(source_labware_B2["B1"]) + # pipette.drop_tip() + # pipette.pick_up_tip() + # pipette.home() + # pipette.drop_tip() + + # pipette.pick_up_tip() + # well = source_labware_B2["D1"] + # # directly from docs http://sandbox.docs.opentrons.com/edge/v2/new_protocol_api.html#opentrons.protocol_api.InstrumentContext.prepare_to_aspirate + # pipette.move_to(well.bottom(z=2)) + # pipette.mix(10, 10) + # pipette.move_to(well.top(z=5)) + # pipette.blow_out() + # pipette.prepare_to_aspirate() + # pipette.move_to(well.bottom(z=2)) + # pipette.aspirate(10, well.bottom(z=2)) + # pipette.dispense(10) + # pipette.drop_tip() + + # ############################ + # # Change the pipette configuration + + # pipette.configure_nozzle_layout( + # style=PARTIAL_COLUMN, + # start="H1", + # end="B1", # 7 Tips + # tip_racks=[partial_tip_rack], + # ) + + ############################# + # Pipette do work + + pipette.transfer(volume, source_labware_B2["A6"], destination_labware_C2["A6"]) + + pipette.pick_up_tip() + pipette.touch_tip(source_labware_B2["B1"]) + pipette.drop_tip() + pipette.pick_up_tip() + pipette.home() + pipette.drop_tip() + + pipette.pick_up_tip() + well = source_labware_B2["D1"] + # directly from docs http://sandbox.docs.opentrons.com/edge/v2/new_protocol_api.html#opentrons.protocol_api.InstrumentContext.prepare_to_aspirate + pipette.move_to(well.bottom(z=2)) + pipette.mix(10, 10) + pipette.move_to(well.top(z=5)) + pipette.blow_out() + pipette.prepare_to_aspirate() + pipette.move_to(well.bottom(z=2)) + pipette.aspirate(10, well.bottom(z=2)) + pipette.dispense(10) + pipette.drop_tip() diff --git a/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_8_None_SINGLE_HappyPath.py b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_8_None_SINGLE_HappyPath.py new file mode 100644 index 00000000000..95493eb0ab3 --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_8_None_SINGLE_HappyPath.py @@ -0,0 +1,131 @@ +from opentrons.protocol_api import SINGLE + +metadata = { + "protocolName": "8 Channel SINGLE Happy Path A1 or H1", + "description": "Tip Rack South Clearance for the 8 Channel pipette and a SINGLE partial tip configuration.", +} + +requirements = { + "robotType": "Flex", + "apiLevel": "2.20", +} + + +def run(protocol): + + trash = protocol.load_trash_bin("A3") # must load trash bin + + partial_tip_rack = protocol.load_labware( + load_name="opentrons_flex_96_tiprack_50ul", + label="Partial Tip Rack", + location="B3", + ) + + thermocycler = protocol.load_module("thermocycler module gen2") + + pipette = protocol.load_instrument(instrument_name="flex_8channel_50", mount="right") + # mount on the right and you will get an error. + + # On the 8-channel SINGLE + # start="A1" Means the South nozzle will pickup from the NW corner of the tip rack + # start="H1" Means the North nozzle will pickup from the SW corner of the tip rack + pipette.configure_nozzle_layout( + style=SINGLE, + start="A1", # Which tip to start with + tip_racks=[partial_tip_rack], + ) + + source_labware_B2 = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="B2 Source Labware", + location="B2", + ) + + destination_labware_C2 = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="C2 Destination Labware", + location="C2", + ) + + volume = 10 # Default volume for actions that require it + + ############################# + # Pipette do work + pipette.consolidate( + [volume, volume], + [source_labware_B2["A3"], source_labware_B2["A4"]], + destination_labware_C2["A3"], + ) + + pipette.transfer(volume, source_labware_B2["A6"], destination_labware_C2["A6"]) + + pipette.distribute( + 5, + source_labware_B2["A7"], + [destination_labware_C2["A7"], destination_labware_C2["A8"]], + ) + + pipette.pick_up_tip() + pipette.touch_tip(source_labware_B2["B1"]) + pipette.drop_tip() + pipette.pick_up_tip() + pipette.home() + pipette.drop_tip() + + pipette.pick_up_tip() + well = source_labware_B2["D1"] + # directly from docs http://sandbox.docs.opentrons.com/edge/v2/new_protocol_api.html#opentrons.protocol_api.InstrumentContext.prepare_to_aspirate + pipette.move_to(well.bottom(z=2)) + pipette.mix(10, 10) + pipette.move_to(well.top(z=5)) + pipette.blow_out() + pipette.prepare_to_aspirate() + pipette.move_to(well.bottom(z=2)) + pipette.aspirate(10, well.bottom(z=2)) + pipette.dispense(10) + pipette.drop_tip() + + ############################ + # Change the pipette configuration + + pipette.configure_nozzle_layout( + style=SINGLE, + start="H1", # Which tip to start with + tip_racks=[partial_tip_rack], + ) + + ############################# + # Pipette do work + pipette.consolidate( + [volume, volume], + [source_labware_B2["A3"], source_labware_B2["A4"]], + destination_labware_C2["A3"], + ) + + pipette.transfer(volume, source_labware_B2["A6"], destination_labware_C2["A6"]) + + pipette.distribute( + 5, + source_labware_B2["A7"], + [destination_labware_C2["A7"], destination_labware_C2["A8"]], + ) + + pipette.pick_up_tip() + pipette.touch_tip(source_labware_B2["B1"]) + pipette.drop_tip() + pipette.pick_up_tip() + pipette.home() + pipette.drop_tip() + + pipette.pick_up_tip() + well = source_labware_B2["D1"] + # directly from docs http://sandbox.docs.opentrons.com/edge/v2/new_protocol_api.html#opentrons.protocol_api.InstrumentContext.prepare_to_aspirate + pipette.move_to(well.bottom(z=2)) + pipette.mix(10, 10) + pipette.move_to(well.top(z=5)) + pipette.blow_out() + pipette.prepare_to_aspirate() + pipette.move_to(well.bottom(z=2)) + pipette.aspirate(10, well.bottom(z=2)) + pipette.dispense(10) + pipette.drop_tip() diff --git a/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_8_None_SINGLE_TubeRackCollision.py b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_8_None_SINGLE_TubeRackCollision.py new file mode 100644 index 00000000000..4f7a21d58bb --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_8_None_SINGLE_TubeRackCollision.py @@ -0,0 +1,65 @@ +from opentrons.protocol_api import SINGLE + +metadata = { + "protocolName": "8Channel SINGLE Pickup tuberack collision", +} + +requirements = { + "robotType": "Flex", + "apiLevel": "2.20", +} + + +def comment_tip_rack_status(ctx, tip_rack): + """ + Print out the tip status for each row in a tip rack. + Each row (A-H) will print the well statuses for columns 1-12 in a single comment, + with a '🟢' for present tips and a '❌' for missing tips. + """ + range_A_to_H = [chr(i) for i in range(ord("A"), ord("H") + 1)] + range_1_to_12 = range(1, 13) + + ctx.comment(f"Tip rack in {tip_rack.parent}") + + for row in range_A_to_H: + status_line = f"{row}: " + for col in range_1_to_12: + well = f"{row}{col}" + has_tip = tip_rack.wells_by_name()[well].has_tip + status_emoji = "🟢" if has_tip else "❌" + status_line += f"{well} {status_emoji} " + + # Print the full status line for the row + ctx.comment(status_line) + + +def run(protocol): + + trash = protocol.load_trash_bin("A3") # must load trash bin + + partial_tip_rack = protocol.load_labware( + load_name="opentrons_flex_96_tiprack_50ul", + label="Partial Tip Rack", + location="D2", + ) + + tube_rack = protocol.load_labware( + load_name="opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + label="Tube Rack", + location="B2", + ) + + pipette = protocol.load_instrument(instrument_name="flex_8channel_50", mount="left") + + pipette.configure_nozzle_layout( + style=SINGLE, + start="H1", + tip_racks=[partial_tip_rack], + ) + + pipette.pick_up_tip() + comment_tip_rack_status(protocol, partial_tip_rack) + # can the flex_8channel_50 with 50μl tips really reach the bottom of the tube? + pipette.aspirate(30, tube_rack["A1"].bottom()) + pipette.dispense(30, tube_rack["A2"].bottom()) + pipette.drop_tip() diff --git a/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_8_PARTIAL_COLUMN_Overhang.py b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_8_PARTIAL_COLUMN_Overhang.py new file mode 100644 index 00000000000..b1bcf5ed77b --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_8_PARTIAL_COLUMN_Overhang.py @@ -0,0 +1,150 @@ +from opentrons.protocol_api import PARTIAL_COLUMN + +metadata = { + "protocolName": "8 Channel PARTIAL_COLUMN Overhang", + "description": "A protocol that demonstrates overhang into a slot with a partial column configuration.", + "author": "Josh McVey", +} + +requirements = { + "robotType": "Flex", + "apiLevel": "2.20", +} + + +def comment_tip_rack_status(ctx, tip_rack): + """ + Print out the tip status for each row in a tip rack. + Each row (A-H) will print the well statuses for columns 1-12 in a single comment, + with a '🟢' for present tips and a '❌' for missing tips. + """ + range_A_to_H = [chr(i) for i in range(ord("A"), ord("H") + 1)] + range_1_to_12 = range(1, 13) + + ctx.comment(f"Tip rack in {tip_rack.parent}") + + for row in range_A_to_H: + status_line = f"{row}: " + for col in range_1_to_12: + well = f"{row}{col}" + has_tip = tip_rack.wells_by_name()[well].has_tip + status_emoji = "🟢" if has_tip else "❌" + status_line += f"{well} {status_emoji} " + + # Print the full status line for the row + ctx.comment(status_line) + + +def run(protocol): + + trash = protocol.load_trash_bin("A3") # must load trash bin + + thermocycler = protocol.load_module("thermocycler module gen2") + + partial_tip_rack = protocol.load_labware( + load_name="opentrons_flex_96_tiprack_50ul", + label="Partial Tip Rack", + location="B3", + ) + + pipette = protocol.load_instrument(instrument_name="flex_8channel_50", mount="right") + + pipette.configure_nozzle_layout( + style=PARTIAL_COLUMN, + start="H1", + end="D1", # 5 Tips + tip_racks=[partial_tip_rack], + ) + + source_labware_B2 = protocol.load_labware( + load_name="nest_1_reservoir_290ml", + label="B2 Source Reservoir", + location="B2", + ) + + destination_labware_C2 = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="C2 Destination Labware", + location="C2", + ) + + volume = 10 # Default volume for actions that require it + + # Known issue in 8.0.0 + # if you target A1 of the labware in C2 + # nozzle H1 - the front-most nozzle will go to A1 + # this means that tips will be out of the slot + # they will over hang into the B2 + # no error is raised + # but a collision will occur with the labware in slot B2 + # the overhanging tips will collide with the labware in B2 + + # If we ever do detect and error for this + # Take all these examples into a negative Overrides test + + volume = 20 + pipette.pick_up_tip() + comment_tip_rack_status(protocol, partial_tip_rack) + # bad - 4 tips will overhang into B2 + pipette.aspirate(volume=5, location=destination_labware_C2["A1"]) + # bad - 3 tips will overhang into B2 + pipette.aspirate(volume=5, location=destination_labware_C2["B1"]) + # bad - 2 tips will overhang into B2 + pipette.aspirate(volume=5, location=destination_labware_C2["C1"]) + # bad - 1 tip will overhang into B2 + pipette.aspirate(volume=5, location=destination_labware_C2["D1"]) + # this is safe + pipette.aspirate(volume=5, location=destination_labware_C2["E1"]) + + # this is safe - from a reservoir + # must aspirate before dispense + pipette.aspirate(volume=volume, location=source_labware_B2["A1"]) + # bad - bad - 4 tips will overhang into B2 + pipette.dispense(volume=volume, location=destination_labware_C2["A1"]) + # this is safe - from a reservoir + # must aspirate before dispense + pipette.aspirate(volume=volume, location=source_labware_B2["A1"]) + # bad - bad - 3 tips will overhang into B2 + pipette.dispense(volume=volume, location=destination_labware_C2["B2"]) + # this is safe - from a reservoir + # must aspirate before dispense + pipette.aspirate(volume=volume, location=source_labware_B2["A1"]) + # bad - bad - 2 tips will overhang into B2 + pipette.dispense(volume=volume, location=destination_labware_C2["C3"]) + # this is safe - from a reservoir + # must aspirate before dispense + pipette.aspirate(volume=volume, location=source_labware_B2["A1"]) + # bad - bad - 1 tip will overhang into B2 + pipette.dispense(volume=volume, location=destination_labware_C2["D4"]) + # this is safe - from a reservoir + # must aspirate before dispense + pipette.aspirate(volume=volume, location=source_labware_B2["A1"]) + # this is safe - 0 tips will overhang into B2 + pipette.dispense(volume=volume, location=destination_labware_C2["E5"]) + # bad - has overhang into B2 - 4 tips + pipette.touch_tip(location=destination_labware_C2["A1"]) + # bad - has overhang into B2 - 4 tips + pipette.blow_out(location=destination_labware_C2["A1"]) + # bad - has overhang into B2 - 4 tips + pipette.mix(repetitions=3, volume=volume, location=destination_labware_C2["A2"]) + # bad - aspirate and dispense have overhang into B2 + pipette.drop_tip() + pipette.transfer(volume=volume, source=destination_labware_C2["A1"], dest=destination_labware_C2["A2"]) + # bad - aspirate has 3 tip overhang but not dispense + pipette.transfer(volume=volume, source=destination_labware_C2["B1"], dest=destination_labware_C2["E1"]) + # bad - aspirate is safe but dispense has 2 tip overhang + pipette.transfer(volume=volume, source=destination_labware_C2["E1"], dest=destination_labware_C2["C3"]) + # bad - source and destinations have overhang + pipette.distribute(volume=20, source=destination_labware_C2["D2"], dest=[destination_labware_C2["D3"], destination_labware_C2["D4"]]) + # bad - source has overhang but destinations are safe + pipette.distribute(volume=20, source=destination_labware_C2["D2"], dest=[destination_labware_C2["E3"], destination_labware_C2["E4"]]) + # bad - source has no overhang but 1 destination does + pipette.distribute(volume=20, source=destination_labware_C2["E6"], dest=[destination_labware_C2["A7"], destination_labware_C2["E7"]]) + # bad - source has no overhang but 2 destinations do + pipette.distribute(volume=20, source=destination_labware_C2["E7"], dest=[destination_labware_C2["A8"], destination_labware_C2["A9"]]) + # bad - all sources and destination have overhang + pipette.consolidate(volume=5, source=[destination_labware_C2["A9"], destination_labware_C2["A10"]], dest=destination_labware_C2["A11"]) + # bad - 1 source has overhang but destination is safe + pipette.consolidate(volume=5, source=[destination_labware_C2["A9"], destination_labware_C2["E10"]], dest=destination_labware_C2["E11"]) + # bad - sources are safe but destination has overhang + pipette.consolidate(volume=5, source=[destination_labware_C2["E9"], destination_labware_C2["E10"]], dest=destination_labware_C2["A12"]) diff --git a/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_8_TipsDontMatchWells.py b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_8_TipsDontMatchWells.py new file mode 100644 index 00000000000..a6ecaf02340 --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_8_TipsDontMatchWells.py @@ -0,0 +1,87 @@ +from opentrons.protocol_api import SINGLE, ALL + +metadata = { + "protocolName": "8channel 50 into a 48 well plate", + "description": "the nozzles on the pipette do not match the target labware wells", + "author": "Josh McVey", +} + +requirements = { + "robotType": "Flex", + "apiLevel": "2.20", +} + + +def comment_tip_rack_status(ctx, tip_rack): + """ + Print out the tip status for each row in a tip rack. + Each row (A-H) will print the well statuses for columns 1-12 in a single comment, + with a '🟢' for present tips and a '❌' for missing tips. + """ + range_A_to_H = [chr(i) for i in range(ord("A"), ord("H") + 1)] + range_1_to_12 = range(1, 13) + + ctx.comment(f"Tip rack in {tip_rack.parent}") + + for row in range_A_to_H: + status_line = f"{row}: " + for col in range_1_to_12: + well = f"{row}{col}" + has_tip = tip_rack.wells_by_name()[well].has_tip + status_emoji = "🟢" if has_tip else "❌" + status_line += f"{well} {status_emoji} " + + # Print the full status line for the row + ctx.comment(status_line) + + +def run(protocol): + + trash = protocol.load_trash_bin("A3") # must load trash bin + + partial_tip_rack = protocol.load_labware( + load_name="opentrons_flex_96_tiprack_50ul", + label="Partial Tip Rack", + location="B3", + ) + + # corning_48_wellplate_1.6ml_flat + corning_48 = protocol.load_labware( + load_name="corning_48_wellplate_1.6ml_flat", + label="Corning 48 Wellplate", + location="D2", + ) + + pipette = protocol.load_instrument(instrument_name="flex_8channel_50", mount="right") + + pipette.configure_nozzle_layout( + style=ALL, + start="H1", + end="B1", # Test that end is ignored when style is ALL and on 8.0.0-alpha.6 it is ✅ + tip_racks=[partial_tip_rack], + ) + + pipette.pick_up_tip() + comment_tip_rack_status(protocol, partial_tip_rack) + volume = 20 + + ###### Purpose statement + ### This protocol is made to detect if analysis output ever changes + ### When we try and pipette to wells that do not match the geometry of the nozzles on the pipette + ###### + + # when using 8 channel location is the front-most well in the column of the target labware + pipette.aspirate(volume=volume, location=corning_48["F1"]) + pipette.dispense(volume=volume, location=corning_48["F1"]) + pipette.touch_tip(location=corning_48["F1"]) + pipette.blow_out(location=corning_48["F1"]) + pipette.mix(repetitions=3, volume=volume, location=corning_48["F1"]) + # next line has this error: Invalid source for multichannel transfer: [F1 of Corning 48 Wellplate on slot D2] + # pipette.transfer(volume=volume, source=corning_48["F1"], dest=corning_48["F2"]) + # next line has this error: Invalid source for multichannel transfer: [F2 of Corning 48 Wellplate on slot D2] + # pipette.distribute(volume=20, source=corning_48["F2"], dest=[corning_48["F3"], corning_48["F4"]]) + # next line has this error: + # Invalid source for multichannel transfer: [F6 of Corning 48 Wellplate on slot D2, F7 of Corning 48 Wellplate on slot D2] + # pipette.consolidate(volume=20, source=[corning_48["F6"], corning_48["F7"]], dest=corning_48["F8"]) + + pipette.drop_tip() # so trash bin shows up in the deck map diff --git a/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_AllCorners.py b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_AllCorners.py new file mode 100644 index 00000000000..01fc0b45b9b --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_AllCorners.py @@ -0,0 +1,296 @@ +from opentrons import protocol_api +from opentrons.protocol_api import COLUMN, SINGLE, ROW + +requirements = {"robotType": "Flex", "apiLevel": "2.20"} + + +def run(protocol: protocol_api.ProtocolContext): + pipette = protocol.load_instrument(instrument_name="flex_96channel_1000") + trash = protocol.load_trash_bin("B3") + t1 = protocol.load_labware( + load_name="opentrons_flex_96_tiprack_1000ul", + label="A1 Corner Tiprack 1", + location="B1", + ) + t2 = protocol.load_labware( + load_name="opentrons_flex_96_tiprack_1000ul", + label="D1 Corner Tiprack", + location="C1", + ) + t3 = protocol.load_labware( + load_name="opentrons_flex_96_tiprack_1000ul", + label="A3 Corner Tiprack 1", + location="B2", + ) + t4 = protocol.load_labware( + load_name="opentrons_flex_96_tiprack_1000ul", + label="D3 Corner Tiprack", + location="C2", + ) + t5 = protocol.load_labware( + load_name="opentrons_flex_96_tiprack_1000ul", + label="A3 Corner Tiprack 2", + location="A2", + ) + t6 = protocol.load_labware( + load_name="opentrons_flex_96_tiprack_1000ul", + label="A1 Corner Tiprack 2", + location="D4", + ) + + ### SETUP TIPRACK FUNCTIONS + # These functions serve the purpose of removing tips from a tiprack before it is moved to a corner slot + # This is done to ensure the tiprack is in such a state that it will trigger zero deck extent conflicts + + # Setup T2 + def t2_setup() -> None: + pipette.configure_nozzle_layout( + style=ROW, + start="A1", + tip_racks=[t2], + ) + for i in range(3): + pipette.pick_up_tip() + pipette.drop_tip() + + # Setup T3 + def t3_setup() -> None: + pipette.configure_nozzle_layout(style=COLUMN, start="A1", tip_racks=[t3]) + for i in range(2): + pipette.pick_up_tip() + pipette.drop_tip() + + # Setup T4 + def t4_setup() -> None: + pipette.configure_nozzle_layout( + style=ROW, + start="A1", + tip_racks=[t4], + ) + for i in range(3): + pipette.pick_up_tip() + pipette.drop_tip() + + pipette.configure_nozzle_layout( + style=SINGLE, + start="A1", + tip_racks=[t4], + ) + for i in range(10): + pipette.pick_up_tip() + pipette.drop_tip() + + # Setup T5 + def t5_setup() -> None: + pipette.configure_nozzle_layout( + style=ROW, + start="H1", + tip_racks=[t5], + ) + for i in range(7): + pipette.pick_up_tip() + pipette.drop_tip() + + pipette.configure_nozzle_layout( + style=SINGLE, + start="A1", + tip_racks=[t5], + ) + for i in range(2): + pipette.pick_up_tip() + pipette.drop_tip() + + # Setup T6 + def t6_setup() -> None: + pipette.configure_nozzle_layout( + style=ROW, + start="H1", + tip_racks=[t6], + ) + for i in range(7): + pipette.pick_up_tip() + pipette.drop_tip() + + ### PICKUP TIP FUNCTIONS + # These functions perform pickup tip behavior for a given tiprack + + # Pickup T2 + def t1_pickup() -> None: + pipette.configure_nozzle_layout( + style=SINGLE, + start="A1", + tip_racks=[t1], + ) + for i in range(48): + pipette.pick_up_tip() + pipette.drop_tip() + pipette.configure_nozzle_layout( + style=SINGLE, + start="A12", + tip_racks=[t1], + ) + for i in range(48): + pipette.pick_up_tip() + pipette.drop_tip() + + # Pickup T2 + def t2_pickup() -> None: + pipette.configure_nozzle_layout( + style=SINGLE, + start="A1", + tip_racks=[t2], + ) + for i in range(15): + pipette.pick_up_tip() + pipette.drop_tip() + pipette.configure_nozzle_layout( + style=SINGLE, + start="A12", + tip_racks=[t2], + ) + for i in range(15): + pipette.pick_up_tip() + pipette.drop_tip() + pipette.configure_nozzle_layout( + style=SINGLE, + start="H1", + tip_racks=[t2], + ) + for i in range(15): + pipette.pick_up_tip() + pipette.drop_tip() + pipette.configure_nozzle_layout( + style=SINGLE, + start="H12", + tip_racks=[t2], + ) + for i in range(15): + pipette.pick_up_tip() + pipette.drop_tip() + + # Pickup T3 + def t3_pickup() -> None: + pipette.configure_nozzle_layout( + style=SINGLE, + start="A1", + tip_racks=[t3], + ) + for i in range(40): + pipette.pick_up_tip() + pipette.drop_tip() + pipette.configure_nozzle_layout( + style=SINGLE, + start="A12", + tip_racks=[t3], + ) + for i in range(40): + pipette.pick_up_tip() + pipette.drop_tip() + + # Pickup T4 + def t4_pickup() -> None: + pipette.configure_nozzle_layout( + style=SINGLE, + start="A1", + tip_racks=[t4], + ) + for i in range(10): + pipette.pick_up_tip() + pipette.drop_tip() + pipette.configure_nozzle_layout( + style=SINGLE, + start="A12", + tip_racks=[t4], + ) + for i in range(10): + pipette.pick_up_tip() + pipette.drop_tip() + pipette.configure_nozzle_layout( + style=SINGLE, + start="H1", + tip_racks=[t4], + ) + for i in range(15): + pipette.pick_up_tip() + pipette.drop_tip() + pipette.configure_nozzle_layout( + style=SINGLE, + start="H12", + tip_racks=[t4], + ) + for i in range(15): + pipette.pick_up_tip() + pipette.drop_tip() + + # Pickup T5 + def t5_pickup() -> None: + pipette.configure_nozzle_layout( + style=SINGLE, + start="H1", + tip_racks=[t5], + ) + for i in range(5): + pipette.pick_up_tip() + pipette.drop_tip() + pipette.configure_nozzle_layout( + style=SINGLE, + start="H12", + tip_racks=[t5], + ) + for i in range(5): + pipette.pick_up_tip() + pipette.drop_tip() + + # Pickup T6 + def t6_pickup() -> None: + pipette.configure_nozzle_layout( + style=SINGLE, + start="H1", + tip_racks=[t6], + ) + for i in range(6): + pipette.pick_up_tip() + pipette.drop_tip() + pipette.configure_nozzle_layout( + style=SINGLE, + start="H12", + tip_racks=[t6], + ) + for i in range(6): + pipette.pick_up_tip() + pipette.drop_tip() + + ### Protocol Actions + # Perform Setup of first set of tipracks + protocol.move_labware(t1, "A1", True) + t2_setup() + protocol.move_labware(t2, "D1", True) + t3_setup() + protocol.move_labware(t3, "A3", True) + t4_setup() + protocol.move_labware(t4, "D3", True) + + # Clear out T2 first to make room for T5 + t2_pickup() + protocol.move_labware(t5, "B2", True) + t5_setup() + protocol.move_labware(t5, "C1", True) + + # Clear out T1, T3, and T4 + t1_pickup() + t3_pickup() + protocol.move_labware(t6, "A4", True) + t4_pickup() + protocol.move_labware(t6, "D4", True) + + # Move T3, then move and handle T5 + protocol.move_labware(t3, "D2", True) + protocol.move_labware(t5, "A3", True) + t5_pickup() + + # Move T6 to On-Deck in B2 and setup, then move to A1 and handle + protocol.move_labware(t6, "B2", True) + t6_setup() + protocol.move_labware(t1, "C3", True) + protocol.move_labware(t6, "A1", True) + t6_pickup() diff --git a/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_LLD.py b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_LLD.py new file mode 100644 index 00000000000..080fda8a759 --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_LLD.py @@ -0,0 +1,93 @@ +from opentrons import protocol_api + +# metadata +metadata = { + "protocolName": "2.20 Error Recovery Testing Protocol - 96ch", + "author": "Sara Kowalski", + "description": "Simple Protocol that user can use to Phase 1 Error Recovery options for a 96 channel p1000.", +} + +requirements = { + "robotType": "Flex", + "apiLevel": "2.20", +} + +DRYRUN = "NO" + + +def run(protocol: protocol_api.ProtocolContext): + + # modules/fixtures + trashbin = protocol.load_trash_bin(location="A3") + + # labware + tip_adapter = protocol.load_adapter("opentrons_flex_96_tiprack_adapter", "A2") + tiprack1 = tip_adapter.load_labware("opentrons_flex_96_tiprack_1000ul") + sample_plate = protocol.load_labware("armadillo_96_wellplate_200ul_pcr_full_skirt", "C3") + reservoir = protocol.load_labware("nest_1_reservoir_290ml", "D3") + wet_sample = protocol.load_labware("nest_12_reservoir_15ml", "B3") + + # liquids + water = protocol.define_liquid( + name="Water", + description="water for ER testing", + display_color="#90e0ef", + ) + waterButMoreBlue = protocol.define_liquid( + name="Water but more blue", + description="Water for ER testing", + display_color="#0077b6", + ) + + wet_sample["A1"].load_liquid(liquid=water, volume=800) + wet_sample["A2"].load_liquid(liquid=waterButMoreBlue, volume=800) + + # instruments + p1000 = protocol.load_instrument("flex_96channel_1000", mount="left", tip_racks=[tiprack1]) + + volume = 900 + + ############################## + #####Tip Pick Up Failure###### + ############################## + + protocol.pause("This tests Tip Pick Up Failure (General Error for now)") + protocol.pause("Please remove tip rack from deck. When you're testing recovery, add tiprack back as necessary.") + p1000.pick_up_tip() + + ########################################## + #####Overpressure - While Aspirating###### + ########################################## + + protocol.pause("Overpressure - While Aspirating") + p1000.home() + protocol.pause("Swap with tip(s) that are hot glued shut (you will need to swap the tips for retry recovery options)") + + for i in range(10): + p1000.aspirate(volume, reservoir["A1"].top()) + p1000.dispense(volume, reservoir["A1"].top()) + + #################################### + #####Liquid Presence Detection###### + #################################### + protocol.pause("This tests Liquid Presence Detection - PLEASE MAKE SURE YOU'RE USING 1000UL TIPS OR YOU WILL BREAK THE PIPETTE") + protocol.pause("Make sure reservoir is empty, and have full reservoir on standby to switch out with for recovery") + + p1000.require_liquid_presence(wet_sample["A1"]) + + p1000.aspirate(volume, wet_sample["A1"]) + p1000.dispense(volume, wet_sample["A1"]) + p1000.home() + + ##################################################### + #####Overpressure - While Dispensing###### + ##################################################### + + protocol.pause("Overpressure - While Dispensing") + + p1000.aspirate(volume, reservoir["A1"].top(20)) + protocol.pause("Swap with tip(s) that are hot glued shut (you will need to cut the tips for retry recovery options)") + p1000.dispense(volume, reservoir["A1"].top(20)) + + p1000.return_tip() + p1000.reset_tipracks() diff --git a/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_None_COLUMN_HappyPath.py b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_None_COLUMN_HappyPath.py new file mode 100644 index 00000000000..6fec53ee5b3 --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_None_COLUMN_HappyPath.py @@ -0,0 +1,121 @@ +from opentrons.protocol_api import COLUMN + +metadata = { + "protocolName": "96Channel COLUMN Happy Path", + "description": "96 channel pipette and a COLUMN partial tip configuration.", +} + +requirements = { + "robotType": "Flex", + "apiLevel": "2.20", +} + + +def run(protocol): + + trash = protocol.load_trash_bin("A3") # must load trash bin + + partial_tip_rack = protocol.load_labware( + load_name="opentrons_flex_96_tiprack_1000ul", + label="Partial Tip Rack", + location="B2", + ) + + pipette = protocol.load_instrument(instrument_name="flex_96channel_1000") + + # Which nozzle to use on the pipette + # Think of the nozzles from above like you are looking down on a 96-well plate + # start="A1" Means the West most nozzle column will pickup from the East most column of the tip rack + # start="A12" Means the East most nozzle column will pickup from the West most column of the tip rack + pipette.configure_nozzle_layout( + style=COLUMN, + start="A1", + tip_racks=[partial_tip_rack], + ) + + source_labware = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="Liquid Transfer - Source Labware", + location="C2", + ) + + destination_labware = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="Liquid Transfer - Destination Labware", + location="C3", + ) + + volume = 10 # Default volume for actions that require it + + ############################# + # Pipette do work + + # consolidate does not work with the COLUMN configuration + # consolidate only has a single well as a destination + + # transfer the row + pipette.transfer(volume, source_labware["A1"], destination_labware["A1"]) + + # distribute does not work with the COLUMN configuration + # distribute only has a single well as a source + + pipette.pick_up_tip() + pipette.touch_tip(source_labware["A2"]) + pipette.drop_tip() + pipette.pick_up_tip() + pipette.home() + pipette.drop_tip() + + pipette.pick_up_tip() + well = source_labware["A3"] + # directly from docs http://sandbox.docs.opentrons.com/edge/v2/new_protocol_api.html#opentrons.protocol_api.InstrumentContext.prepare_to_aspirate + pipette.move_to(well.bottom(z=2)) + pipette.mix(10, 10) + pipette.move_to(well.top(z=5)) + pipette.blow_out() + pipette.prepare_to_aspirate() + pipette.move_to(well.bottom(z=2)) + pipette.aspirate(10, well.bottom(z=2)) + pipette.dispense(10) + pipette.drop_tip() + + ############################# + # Change the pipette configuration + + pipette.configure_nozzle_layout( + style=COLUMN, + start="A12", # Which nozzle to start with + tip_racks=[partial_tip_rack], + ) + + ############################# + # Pipette do work + + # consolidate does not work with the COLUMN configuration + # consolidate only has a single well as a destination + + # transfer the row + pipette.transfer(volume, source_labware["A5"], destination_labware["A5"]) + + # distribute does not work with the COLUMN configuration + # distribute only has a single well as a source + + pipette.pick_up_tip() + pipette.touch_tip(source_labware["A6"]) + pipette.drop_tip() + pipette.pick_up_tip() + pipette.home() + pipette.drop_tip() + + pipette.pick_up_tip() + well = source_labware["A7"] + # directly from docs http://sandbox.docs.opentrons.com/edge/v2/new_protocol_api.html#opentrons.protocol_api.InstrumentContext.prepare_to_aspirate + pipette.move_to(well.bottom(z=2)) + pipette.mix(10, 10) + pipette.move_to(well.top(z=5)) + pipette.blow_out() + pipette.prepare_to_aspirate() + pipette.move_to(well.bottom(z=2)) + pipette.aspirate(10, well.bottom(z=2)) + pipette.dispense(10) + pipette.drop_tip() diff --git a/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_None_Column3_SINGLE_.py b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_None_Column3_SINGLE_.py new file mode 100644 index 00000000000..e5d1427a477 --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_None_Column3_SINGLE_.py @@ -0,0 +1,118 @@ +from opentrons import protocol_api +from opentrons.protocol_api import COLUMN, ALL, SINGLE, ROW + +requirements = {"robotType": "Flex", "apiLevel": "2.20"} + + +def run(protocol: protocol_api.ProtocolContext): + pipette = protocol.load_instrument(instrument_name="flex_96channel_1000") + trash = protocol.load_trash_bin("A1") + t1 = protocol.load_labware( + load_name="opentrons_flex_96_tiprack_1000ul", + label="Partial Tip Rack", + location="A2", + ) + t2 = protocol.load_labware( + load_name="opentrons_flex_96_tiprack_1000ul", + label="Partial Tip Rack", + location="B2", + ) + t3 = protocol.load_labware( + load_name="opentrons_flex_96_tiprack_1000ul", + label="Partial Tip Rack", + location="C2", + ) + t4 = protocol.load_labware( + load_name="opentrons_flex_96_tiprack_1000ul", + label="Partial Tip Rack", + location="D2", + ) + + ### Prep tipracks in B2 and D2 by removing 3 columns of tips + pipette.configure_nozzle_layout( + style=COLUMN, + start="A1", + tip_racks=[t2], + ) + for i in range(3): + pipette.pick_up_tip() + pipette.drop_tip() + + pipette.configure_nozzle_layout( + style=COLUMN, + start="A1", + tip_racks=[t4], + ) + for i in range(3): + pipette.pick_up_tip() + pipette.drop_tip() + + ### Relocate tipracks to A3 and C3 for single tip extraction at furthest extant + protocol.move_labware(t2, "A3", True) + protocol.move_labware(t4, "C3", True) + + pipette.configure_nozzle_layout( + style=SINGLE, + start="A1", + tip_racks=[t2, t4], + ) + + for i in range(72 * 2): + pipette.pick_up_tip() + pipette.drop_tip() + + ### Move tipracks out of the way to B1 and C1 + protocol.move_labware(t2, "B1", True) + protocol.move_labware(t4, "C1", True) + + ### Prepare tiprack in A2 by removing 3 columns of tips + pipette.configure_nozzle_layout( + style=COLUMN, + start="A1", + tip_racks=[t1], + ) + for i in range(3): + pipette.pick_up_tip() + pipette.drop_tip() + + ### Prepare tiprack in C2 by removing bottom 3 rows of tips, plus 15 tips (3 leftmost remaining columns) + ### This results in a tiprack of the following layout (matching the requirements for our bottom right extents): + # X X X X X X X X X - - - + # X X X X X X X X X - - - + # X X X X X X X X X - - - + # X X X X X X X X X - - - + # X X X X X X X X X - - - + # - - - - - - - - - - - - + # - - - - - - - - - - - - + # - - - - - - - - - - - - + pipette.configure_nozzle_layout( + style=ROW, + start="A1", + tip_racks=[t3], + ) + for i in range(3): + pipette.pick_up_tip() + pipette.drop_tip() + + pipette.configure_nozzle_layout( + style=SINGLE, + start="A1", + tip_racks=[t3], + ) + for i in range(15): + pipette.pick_up_tip() + pipette.drop_tip() + + ### Relocate tipracks to B3 and D3 on the deck + protocol.move_labware(t1, "B3", True) + protocol.move_labware(t3, "D3", True) + + pipette.configure_nozzle_layout( + style=SINGLE, + start="A1", + tip_racks=[t1, t3], + ) + + for i in range(72 + 45): + pipette.pick_up_tip() + pipette.drop_tip() diff --git a/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_None_ROW_HappyPath.py b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_None_ROW_HappyPath.py new file mode 100644 index 00000000000..cf253f04bfe --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_None_ROW_HappyPath.py @@ -0,0 +1,121 @@ +from opentrons.protocol_api import ROW + +metadata = { + "protocolName": "96Channel ROW Happy Path", + "description": "96 channel pipette and a ROW partial tip configuration.", +} + +requirements = { + "robotType": "Flex", + "apiLevel": "2.20", +} + + +def run(protocol): + + trash = protocol.load_trash_bin("A3") # must load trash bin + + partial_tip_rack = protocol.load_labware( + load_name="opentrons_flex_96_tiprack_1000ul", + label="Partial Tip Rack", + location="B1", + ) + + pipette = protocol.load_instrument(instrument_name="flex_96channel_1000") + + # Which nozzle to use on the pipette + # Think of the nozzles from above like you are looking down on a 96-well plate + # start="A1" Means the North most nozzle row will pickup from the South most row of the tip rack + # start="H1" Means the South most nozzle row will pickup from the North most row of the tip rack + pipette.configure_nozzle_layout( + style=ROW, + start="A1", + tip_racks=[partial_tip_rack], + ) + + source_labware = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="Liquid Transfer - Source Labware", + location="C2", + ) + + destination_labware = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="Liquid Transfer - Destination Labware", + location="C3", + ) + + volume = 10 # Default volume for actions that require it + + ############################# + # Pipette do work + + # consolidate is does not work with the ROW configuration + # consolidate only has a single well as a destination + + # transfer the row + pipette.transfer(volume, source_labware["A1"], destination_labware["A1"]) + + # distribute does not work with the ROW configuration + # distribute only has a single well as a source + + pipette.pick_up_tip() + pipette.touch_tip(source_labware["B1"]) + pipette.drop_tip() + pipette.pick_up_tip() + pipette.home() + pipette.drop_tip() + + pipette.pick_up_tip() + well = source_labware["D1"] + # directly from docs http://sandbox.docs.opentrons.com/edge/v2/new_protocol_api.html#opentrons.protocol_api.InstrumentContext.prepare_to_aspirate + pipette.move_to(well.bottom(z=2)) + pipette.mix(10, 10) + pipette.move_to(well.top(z=5)) + pipette.blow_out() + pipette.prepare_to_aspirate() + pipette.move_to(well.bottom(z=2)) + pipette.aspirate(10, well.bottom(z=2)) + pipette.dispense(10) + pipette.drop_tip() + + ############################# + # Change the pipette configuration + + pipette.configure_nozzle_layout( + style=ROW, + start="H1", # Which nozzle to start with + tip_racks=[partial_tip_rack], + ) + + ############################# + # Pipette do work + + # consolidate is does not work with the ROW configuration + # consolidate only has a single well as a destination + + # transfer the row + pipette.transfer(volume, source_labware["E1"], destination_labware["E1"]) + + # distribute does not work with the ROW configuration + # distribute only has a single well as a source + + pipette.pick_up_tip() + pipette.touch_tip(source_labware["F1"]) + pipette.drop_tip() + pipette.pick_up_tip() + pipette.home() + pipette.drop_tip() + + pipette.pick_up_tip() + well = source_labware["G1"] + # directly from docs http://sandbox.docs.opentrons.com/edge/v2/new_protocol_api.html#opentrons.protocol_api.InstrumentContext.prepare_to_aspirate + pipette.move_to(well.bottom(z=2)) + pipette.mix(10, 10) + pipette.move_to(well.top(z=5)) + pipette.blow_out() + pipette.prepare_to_aspirate() + pipette.move_to(well.bottom(z=2)) + pipette.aspirate(10, well.bottom(z=2)) + pipette.dispense(10) + pipette.drop_tip() diff --git a/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_None_SINGLE_4Corners50ul.py b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_None_SINGLE_4Corners50ul.py new file mode 100644 index 00000000000..1ac96b7a7ac --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_None_SINGLE_4Corners50ul.py @@ -0,0 +1,66 @@ +from opentrons.protocol_api import SINGLE + +metadata = { + "protocolName": "96Channel SINGLE Pickup on all 4 corners 2 pickups", + "description": "96 2 tips picked up on all 4 corners of the tip rack", +} + +requirements = { + "robotType": "Flex", + "apiLevel": "2.20", +} + + +def comment_tip_rack_status(ctx, tip_rack): + """ + Print out the tip status for each row in a tip rack. + Each row (A-H) will print the well statuses for columns 1-12 in a single comment, + with a '🟢' for present tips and a '❌' for missing tips. + """ + range_A_to_H = [chr(i) for i in range(ord("A"), ord("H") + 1)] + range_1_to_12 = range(1, 13) + + ctx.comment(f"Tip rack in {tip_rack.parent}") + + for row in range_A_to_H: + status_line = f"{row}: " + for col in range_1_to_12: + well = f"{row}{col}" + has_tip = tip_rack.wells_by_name()[well].has_tip + status_emoji = "🟢" if has_tip else "❌" + status_line += f"{well} {status_emoji} " + + # Print the full status line for the row + ctx.comment(status_line) + + +def run(protocol): + + trash = protocol.load_trash_bin("A3") # must load trash bin + + four_corners = ["A1", "A12", "H1", "H12"] + + partial_tip_rack = protocol.load_labware( + load_name="opentrons_flex_96_tiprack_50ul", + label="Partial Tip Rack", + location="C2", + ) + + pipette = protocol.load_instrument(instrument_name="flex_96channel_1000") + + for corner in four_corners: + + pipette.configure_nozzle_layout( + style=SINGLE, + start=corner, + tip_racks=[partial_tip_rack], + ) + + pipette.pick_up_tip() + comment_tip_rack_status(protocol, partial_tip_rack) + protocol.pause("How was the pickup of first tip?") + pipette.drop_tip() + pipette.pick_up_tip() + comment_tip_rack_status(protocol, partial_tip_rack) + protocol.pause("How was the pickup of second tip?") + pipette.drop_tip() diff --git a/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_None_SINGLE_HappyPathNorthSide.py b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_None_SINGLE_HappyPathNorthSide.py new file mode 100644 index 00000000000..ba26d34802d --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_None_SINGLE_HappyPathNorthSide.py @@ -0,0 +1,143 @@ +from opentrons.protocol_api import SINGLE + +metadata = { + "protocolName": "96Channel SINGLE Happy Path H1 or H12", + "description": "Tip Rack North Clearance for the 96 channel pipette and a SINGLE partial tip configuration.", +} + +requirements = { + "robotType": "Flex", + "apiLevel": "2.20", +} + + +def run(protocol): + + trash = protocol.load_trash_bin("A3") # must load trash bin + + partial_tip_rack = protocol.load_labware( + load_name="opentrons_flex_96_tiprack_1000ul", + label="Partial Tip Rack", + location="D2", + ) + + pipette = protocol.load_instrument(instrument_name="flex_96channel_1000") + + # Which nozzle to use on the pipette + # Think of the nozzles from above like you are looking down on a 96-well plate + # start="A1" Means the NW nozzle will pickup from the SE corner of the tip rack + # start="A12" Means the SW nozzle will pickup from the NE corner of the tip rack + # start="H1" Means the NE nozzle will pickup from the SW corner of the tip rack + # start="H12" Means the SE nozzle will pickup from the NW corner of the tip rack + pipette.configure_nozzle_layout( + style=SINGLE, + start="H1", # Which nozzle to start with + tip_racks=[partial_tip_rack], + ) + + source_labware_C1 = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="Liquid Transfer - Source Labware", + location="C1", + ) + + destination_labware_C2 = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="Liquid Transfer - Destination Labware", + location="C2", + ) + + volume = 10 # Default volume for actions that require it + + ############################# + # Pipette do work + pipette.consolidate( + [volume, volume], + [source_labware_C1["A3"], source_labware_C1["A4"]], + destination_labware_C2["A3"], + ) + + pipette.transfer(volume, source_labware_C1["A6"], source_labware_C1["A6"]) + + pipette.distribute( + 5, + source_labware_C1["A7"], + [destination_labware_C2["A7"], destination_labware_C2["A8"]], + ) + + pipette.pick_up_tip() + pipette.touch_tip(source_labware_C1["B1"]) + pipette.drop_tip() + pipette.pick_up_tip() + pipette.home() + pipette.drop_tip() + + pipette.pick_up_tip() + well = source_labware_C1["D1"] + # directly from docs http://sandbox.docs.opentrons.com/edge/v2/new_protocol_api.html#opentrons.protocol_api.InstrumentContext.prepare_to_aspirate + pipette.move_to(well.bottom(z=2)) + pipette.mix(10, 10) + pipette.move_to(well.top(z=5)) + pipette.blow_out() + pipette.prepare_to_aspirate() + pipette.move_to(well.bottom(z=2)) + pipette.aspirate(10, well.bottom(z=2)) + pipette.dispense(10) + pipette.drop_tip() + + ############################# + # Change the pipette configuration + + pipette.configure_nozzle_layout( + style=SINGLE, + start="H12", # Which nozzle to start with + tip_racks=[partial_tip_rack], + ) + + source_labware_C3 = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="C3 Source Labware", + location="C3", + ) + + destination_labware_B2 = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="B2 Destination Labware", + location="B2", + ) + + ############################# + # Pipette do work + pipette.consolidate( + [volume, volume], + [source_labware_C3["A3"], source_labware_C3["A4"]], + destination_labware_B2["A3"], + ) + + pipette.transfer(volume, source_labware_C3["A6"], destination_labware_B2["A6"]) + + pipette.distribute( + 5, + source_labware_C3["A7"], + [destination_labware_B2["A7"], destination_labware_B2["A8"]], + ) + + pipette.pick_up_tip() + pipette.touch_tip(source_labware_C3["B1"]) + pipette.drop_tip() + pipette.pick_up_tip() + pipette.home() + pipette.drop_tip() + + pipette.pick_up_tip() + well = source_labware_C3["D1"] + # directly from docs http://sandbox.docs.opentrons.com/edge/v2/new_protocol_api.html#opentrons.protocol_api.InstrumentContext.prepare_to_aspirate + pipette.move_to(well.bottom(z=2)) + pipette.mix(10, 10) + pipette.move_to(well.top(z=5)) + pipette.blow_out() + pipette.prepare_to_aspirate() + pipette.move_to(well.bottom(z=2)) + pipette.aspirate(10, well.bottom(z=2)) + pipette.dispense(10) + pipette.drop_tip() diff --git a/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_None_SINGLE_HappyPathSouthSide.py b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_None_SINGLE_HappyPathSouthSide.py new file mode 100644 index 00000000000..e050a0e4558 --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_None_SINGLE_HappyPathSouthSide.py @@ -0,0 +1,143 @@ +from opentrons.protocol_api import SINGLE + +metadata = { + "protocolName": "96Channel SINGLE Happy Path A1 or A12", + "description": "Unsafe protocol ❗❗❗❗❗❗❗❗❗❗❗ will collide with tube.", +} + +requirements = { + "robotType": "Flex", + "apiLevel": "2.20", +} + + +def run(protocol): + + trash = protocol.load_trash_bin("A3") # must load trash bin + + partial_tip_rack = protocol.load_labware( + load_name="opentrons_flex_96_tiprack_1000ul", + label="Partial Tip Rack", + location="A2", + ) + + pipette = protocol.load_instrument(instrument_name="flex_96channel_1000") + + # Which nozzle to use on the pipette + # Think of the nozzles from above like you are looking down on a 96-well plate + # start="A1" Means the NW nozzle will pickup from the SE corner of the tip rack + # start="A12" Means the SW nozzle will pickup from the NE corner of the tip rack + # start="H1" Means the NE nozzle will pickup from the SW corner of the tip rack + # start="H12" Means the SE nozzle will pickup from the NW corner of the tip rack + pipette.configure_nozzle_layout( + style=SINGLE, + start="A1", # Which nozzle to start with + tip_racks=[partial_tip_rack], + ) + + source_labware_C1 = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="C1 Source Labware", + location="C1", + ) + + destination_labware_C2 = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="C2 Destination Labware", + location="C2", + ) + + volume = 10 # Default volume for actions that require it + + ############################# + # Pipette do work + pipette.consolidate( + [volume, volume], + [source_labware_C1["A3"], source_labware_C1["A4"]], + destination_labware_C2["A3"], + ) + + pipette.transfer(volume, source_labware_C1["A6"], destination_labware_C2["A6"]) + + pipette.distribute( + 5, + source_labware_C1["A7"], + [destination_labware_C2["A7"], destination_labware_C2["A8"]], + ) + + pipette.pick_up_tip() + pipette.touch_tip(source_labware_C1["B1"]) + pipette.drop_tip() + pipette.pick_up_tip() + pipette.home() + pipette.drop_tip() + + pipette.pick_up_tip() + well = source_labware_C1["D1"] + # directly from docs http://sandbox.docs.opentrons.com/edge/v2/new_protocol_api.html#opentrons.protocol_api.InstrumentContext.prepare_to_aspirate + pipette.move_to(well.bottom(z=2)) + pipette.mix(10, 10) + pipette.move_to(well.top(z=5)) + pipette.blow_out() + pipette.prepare_to_aspirate() + pipette.move_to(well.bottom(z=2)) + pipette.aspirate(10, well.bottom(z=2)) + pipette.dispense(10) + pipette.drop_tip() + + ############################# + # Change the pipette configuration + + pipette.configure_nozzle_layout( + style=SINGLE, + start="A12", # Which nozzle to start with + tip_racks=[partial_tip_rack], + ) + + source_labware_B2 = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="B2 Source Labware", + location="B2", + ) + + destination_labware_C3 = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="C3 Destination Labware", + location="C3", + ) + + ############################# + # Pipette do work + pipette.consolidate( + [volume, volume], + [source_labware_B2["A3"], source_labware_B2["A4"]], + destination_labware_C3["A3"], + ) + + pipette.transfer(volume, source_labware_B2["A6"], destination_labware_C3["A6"]) + + pipette.distribute( + 5, + source_labware_B2["A7"], + [destination_labware_C3["A7"], destination_labware_C3["A8"]], + ) + + pipette.pick_up_tip() + pipette.touch_tip(source_labware_B2["B1"]) + pipette.drop_tip() + pipette.pick_up_tip() + pipette.home() + pipette.drop_tip() + + pipette.pick_up_tip() + well = source_labware_B2["D1"] + # directly from docs http://sandbox.docs.opentrons.com/edge/v2/new_protocol_api.html#opentrons.protocol_api.InstrumentContext.prepare_to_aspirate + pipette.move_to(well.bottom(z=2)) + pipette.mix(10, 10) + pipette.move_to(well.top(z=5)) + pipette.blow_out() + pipette.prepare_to_aspirate() + pipette.move_to(well.bottom(z=2)) + pipette.aspirate(10, well.bottom(z=2)) + pipette.dispense(10) + pipette.drop_tip() diff --git a/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_None_SINGLE_TubeRackCollision.py b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_None_SINGLE_TubeRackCollision.py new file mode 100644 index 00000000000..b499a0ef16d --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_None_SINGLE_TubeRackCollision.py @@ -0,0 +1,68 @@ +from opentrons.protocol_api import SINGLE + +metadata = { + "protocolName": "96Channel SINGLE Pickup tuberack collision", + "description": "Unsafe protocol ❗❗❗❗❗❗❗❗❗❗❗ will collide with tube.", +} + +requirements = { + "robotType": "Flex", + "apiLevel": "2.20", +} + + +def comment_tip_rack_status(ctx, tip_rack): + """ + Print out the tip status for each row in a tip rack. + Each row (A-H) will print the well statuses for columns 1-12 in a single comment, + with a '🟢' for present tips and a '❌' for missing tips. + """ + range_A_to_H = [chr(i) for i in range(ord("A"), ord("H") + 1)] + range_1_to_12 = range(1, 13) + + ctx.comment(f"Tip rack in {tip_rack.parent}") + + for row in range_A_to_H: + status_line = f"{row}: " + for col in range_1_to_12: + well = f"{row}{col}" + has_tip = tip_rack.wells_by_name()[well].has_tip + status_emoji = "🟢" if has_tip else "❌" + status_line += f"{well} {status_emoji} " + + # Print the full status line for the row + ctx.comment(status_line) + + +def run(protocol): + + trash = protocol.load_trash_bin("A3") # must load trash bin + + partial_tip_rack = protocol.load_labware( + load_name="opentrons_flex_96_tiprack_50ul", + label="Partial Tip Rack", + location="B2", + ) + + # tubes in column 1 and 2 are taller than the tubes in 3 and 4 + tube_rack = protocol.load_labware( + load_name="opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + label="Tube Rack", + location="D2", + ) + + pipette = protocol.load_instrument(instrument_name="flex_96channel_1000") + + pipette.configure_nozzle_layout( + style=SINGLE, + start="H12", + tip_racks=[partial_tip_rack], + ) + + pipette.pick_up_tip() + comment_tip_rack_status(protocol, partial_tip_rack) + # tubes in column 1 and 2 are taller than the tubes in 3 and 4 + # I would expect that with 50ul tips + # the pipette would collide with the tubes in column 1 and 2 + pipette.aspirate(30, tube_rack["B3"].bottom()) + pipette.drop_tip() diff --git a/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_Reservoir.py b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_Reservoir.py new file mode 100644 index 00000000000..399c0008d10 --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_96_Reservoir.py @@ -0,0 +1,91 @@ +from opentrons.protocol_api import SINGLE + +metadata = { + "protocolName": "96Channel Partial Tip to single well labware", + "description": "How does the 96 channel pipette behave with a partial tip rack and a single well labware?", +} + +requirements = { + "robotType": "Flex", + "apiLevel": "2.20", +} + + +def comment_tip_rack_status(ctx, tip_rack): + """ + Print out the tip status for each row in a tip rack. + Each row (A-H) will print the well statuses for columns 1-12 in a single comment, + with a '🟢' for present tips and a '❌' for missing tips. + """ + range_A_to_H = [chr(i) for i in range(ord("A"), ord("H") + 1)] + range_1_to_12 = range(1, 13) + + ctx.comment(f"Tip rack in {tip_rack.parent}") + + for row in range_A_to_H: + status_line = f"{row}: " + for col in range_1_to_12: + well = f"{row}{col}" + has_tip = tip_rack.wells_by_name()[well].has_tip + status_emoji = "🟢" if has_tip else "❌" + status_line += f"{well} {status_emoji} " + + # Print the full status line for the row + ctx.comment(status_line) + + +def aspirate_to_reservoir_test(ctx, labware): + location = labware.wells()[0] + ctx.comment(f"Aspirating from {labware.parent} {location}") + ctx.aspirate(20, location) + ctx.pause("Where did I aspirate from?") + + +def run(protocol): + + trash = protocol.load_trash_bin("A3") # must load trash bin + + partial_tip_rack = protocol.load_labware( + load_name="opentrons_flex_96_tiprack_200ul", + label="Partial Tip Rack", + location="B2", + ) + + # agilent_1_reservoir_290ml + agilent_290 = protocol.load_labware( + load_name="agilent_1_reservoir_290ml", + label="Agilent 290mL", + location="D1", + ) + + # axygen_1_reservoir_90ml + axygen_90 = protocol.load_labware( + load_name="axygen_1_reservoir_90ml", + label="Axygen 90mL", + location="D2", + ) + + # nest_1_reservoir_195ml + nest_195 = protocol.load_labware( + load_name="nest_1_reservoir_195ml", + label="Nest 195mL", + location="D3", + ) + + pipette = protocol.load_instrument(instrument_name="flex_96channel_1000") + + pipette.configure_nozzle_layout( + style=SINGLE, + start="H1", + tip_racks=[partial_tip_rack], + ) + + pipette.pick_up_tip() + comment_tip_rack_status(protocol, partial_tip_rack) + aspirate_to_reservoir_test(protocol, agilent_290) + + pipette.configure_nozzle_layout( + style=COLUMN, + start="A1", + tip_racks=[partial_tip_rack], + ) diff --git a/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_P50_LPD.py b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_P50_LPD.py new file mode 100644 index 00000000000..c2038880a03 --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_P50_LPD.py @@ -0,0 +1,122 @@ +import random +from typing import Set +from opentrons import protocol_api + +# metadata +metadata = { + "protocolName": "Wet test for LPD", + "author": "Josh McVey", + "description": "http://sandbox.docs.opentrons.com/edge/v2/pipettes/loading.html#liquid-presence-detection", +} + +requirements = { + "robotType": "Flex", + "apiLevel": "2.20", +} + + +def load_liquid_in_all_wells(labware, liquid) -> None: + for well in labware.wells(): + well.load_liquid(liquid=liquid, volume=well.max_volume) + + +def run(protocol: protocol_api.ProtocolContext): + + # modules/fixtures + trashbin = protocol.load_trash_bin(location="A3") + + # labware + tiprack1 = protocol.load_labware("opentrons_flex_96_tiprack_1000ul", "A2") + tiprack2 = protocol.load_labware("opentrons_flex_96_tiprack_50ul", "B2") + sample_plate = protocol.load_labware("armadillo_96_wellplate_200ul_pcr_full_skirt", "C3") + reservoir = protocol.load_labware("nest_1_reservoir_290ml", "D3") + wet_sample = protocol.load_labware("nest_12_reservoir_15ml", "B3") + + # liquids + waterButMoreBlue = protocol.define_liquid( + name="H20", + description="Test this wet!!!", + display_color="#0077b6", + ) + + load_liquid_in_all_wells(wet_sample, waterButMoreBlue) + + # instruments + p50 = protocol.load_instrument("flex_1channel_50", mount="right", tip_racks=[tiprack2], liquid_presence_detection=True) + volume = 50 + + pipette = p50 + + # Wet A1 to sample plate A1 + # should be successful + well = "A1" + pipette.pick_up_tip() + pipette.aspirate(volume, wet_sample.well(well)) + pipette.dispense(volume, sample_plate.well(well)) + pipette.drop_tip() + + # reuse a tip with liquid_presence_detection=True + # we do NOT get an error if we reuse a tip + # but it is not recommended + well = "A2" + pipette.pick_up_tip() + pipette.aspirate(volume, wet_sample.well(well)) + pipette.dispense(volume, sample_plate.well(well)) + + well = "A3" + pipette.aspirate(volume, wet_sample.well(well)) + pipette.dispense(volume, sample_plate.well(well)) + pipette.drop_tip() + + # disable liquid presence detection on the pipette + pipette.liquid_presence_detection = False + # dry aspirate to prove it is off + protocol.comment(f"Reservoir in {reservoir.parent} is to have NO liquid") + pipette.pick_up_tip() + # dry aspirate to prove it is off + pipette.aspirate(volume, reservoir["A1"]) + pipette.blow_out(trashbin) # make sure tip is empty then use for next step + protocol.comment(f"Current volume in pipette: {pipette.current_volume}") # prints 0 + # detect liquid presence + # we expect this to move the pipette to well A1 of the reservoir + # and then return False during the run + # but will always return true in the simulation (analysis) + # ❗❗❗❗❗❗ + # currently the next line is throwing an error: + # Error 4000 GENERAL_ERROR (ProtocolCommandFailedError): TipNotEmptyError: + # This operation requires a tip with no liquid in it. + # https://opentrons.atlassian.net/browse/RQA-3171 + pipette.prepare_to_aspirate() # This removes the error + is_liquid_in_reservoir = pipette.detect_liquid_presence(reservoir["A1"]) + protocol.comment(f"Is there liquid in the reservoir? {is_liquid_in_reservoir}") + if not protocol.is_simulating(): + if is_liquid_in_reservoir: + protocol.comment("🐛🐛🐛🐛🐛 False + for liquid") + pipette.drop_tip() + # ❗❗❗❗❗❗ + + # now we turn back on liquid presence detection + # with the property + pipette.liquid_presence_detection = True + pipette.pick_up_tip() + # the next line should throw an error and pause the protocol + # resolve and continue + protocol.comment(f"We expect an error on the next line") + pipette.aspirate(volume, reservoir["A1"]) + + if pipette.has_tip: + pipette.drop_tip() + + # pipette.liquid_presence_detection = True + # and we try to use + # pipette.detect_liquid_presence + # no error is thrown regardless of the presence of liquid + + pipette.pick_up_tip() + protocol.comment(f"Reservoir in {reservoir.parent} is to have NO liquid") + pipette.detect_liquid_presence(reservoir["A1"]) + is_liquid_in_reservoir = pipette.detect_liquid_presence(reservoir["A1"]) + protocol.comment(f"Is there liquid in the reservoir? {is_liquid_in_reservoir}") + if not protocol.is_simulating(): + if is_liquid_in_reservoir: + protocol.comment("🐛🐛🐛🐛🐛 False + for liquid") diff --git a/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_P50_LPD_wet_tip_scenarios.py b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_P50_LPD_wet_tip_scenarios.py new file mode 100644 index 00000000000..059d4278001 --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_P50_LPD_wet_tip_scenarios.py @@ -0,0 +1,169 @@ +import random +from typing import Set +from opentrons import protocol_api + +# metadata +metadata = { + "protocolName": "LPD with wet tip scenarios", + "author": "Josh McVey", + "description": "http://sandbox.docs.opentrons.com/edge/v2/pipettes/loading.html#liquid-presence-detection", +} + +requirements = { + "robotType": "Flex", + "apiLevel": "2.20", +} + + +def load_liquid_in_all_wells(labware, liquid) -> None: + for well in labware.wells(): + well.load_liquid(liquid=liquid, volume=well.max_volume) + + +def run(protocol: protocol_api.ProtocolContext): + + # modules/fixtures + trashbin = protocol.load_trash_bin(location="A3") + + # labware + tiprack1 = protocol.load_labware("opentrons_flex_96_tiprack_1000ul", "A2") + tiprack2 = protocol.load_labware("opentrons_flex_96_tiprack_50ul", "B2") + sample_plate = protocol.load_labware("armadillo_96_wellplate_200ul_pcr_full_skirt", "C3") + reservoir = protocol.load_labware("nest_1_reservoir_290ml", "D3") + wet_sample = protocol.load_labware("nest_12_reservoir_15ml", "B3") + + # liquids + waterButMoreBlue = protocol.define_liquid( + name="H20", + description="Test this wet!!!", + display_color="#0077b6", + ) + + wet_sample.well("A1").load_liquid(liquid=waterButMoreBlue, volume=200) + wet_sample.well("A2").load_liquid(liquid=waterButMoreBlue, volume=200) + wet_sample.well("A3").load_liquid(liquid=waterButMoreBlue, volume=200) + + # instruments + p50 = protocol.load_instrument("flex_1channel_50", mount="right", tip_racks=[tiprack2], liquid_presence_detection=True) + volume = 50 + + pipette = p50 + total_volume = 30 + + pipette.pick_up_tip() + protocol.comment("touch_tip") + pipette.touch_tip(wet_sample.well("A1")) + protocol.comment("air_gap") + pipette.air_gap(volume=20) + protocol.comment("blow_out with no arguments") + pipette.blow_out() + pipette.drop_tip() + + protocol.comment(f"reuse=True") + pipette.transfer( + volume=10, + source=[wet_sample.well("A1"), wet_sample.well("A2"), wet_sample.well("A3")], + dest=sample_plate.well("A2"), + reuse=True, + ) + + # example_1 = "During mixing, all aspirates on repetitions > 1 LPD with wet tip" + # protocol.comment(f"{example_1} 🔽🔽🔽🔽🔽🔽🔽") + # pipette.pick_up_tip() + # pipette.mix(repetitions=3, volume=20, location=wet_sample.well("A1")) + # pipette.drop_tip() + # protocol.comment(f"{example_1} 🔼🔼🔼🔼🔼🔼🔼") + + # example_2 = "Consolidate default, reuse=true, new_tip once or never;second and subsequent aspirates LPD with wet tip" + # protocol.comment(f"{example_2} 🔽🔽🔽🔽🔽🔽🔽") + # protocol.comment(f"default tip use") + # pipette.consolidate( + # volume=total_volume, + # source=[wet_sample.well("A1"), wet_sample.well("A2"), wet_sample.well("A3")], + # dest=sample_plate.well("A1"), + # ) + # protocol.comment(f"reuse=True") + # pipette.consolidate( + # volume=total_volume, + # source=[wet_sample.well("A1"), wet_sample.well("A2"), wet_sample.well("A3")], + # dest=sample_plate.well("A2"), + # reuse=True, + # ) + # protocol.comment(f"new_tip='once'") + # pipette.consolidate( + # volume=total_volume, + # source=[wet_sample.well("A1"), wet_sample.well("A2"), wet_sample.well("A3")], + # dest=sample_plate.well("A3"), + # new_tip="once", + # ) + # protocol.comment(f"new_tip='never'") + # pipette.pick_up_tip() + # pipette.consolidate( + # volume=total_volume, + # source=[wet_sample.well("A1"), wet_sample.well("A2"), wet_sample.well("A3")], + # dest=sample_plate.well("A4"), + # new_tip="never", + # ) + # pipette.drop_tip() + # protocol.comment(f"{example_2} 🔼🔼🔼🔼🔼🔼🔼") + + # example_3 = "Consolidate mix_before or mix_after, during mixing, all aspirates on repetitions > 1 LPD with wet tip" + # protocol.comment(f"{example_3} 🔽🔽🔽🔽🔽🔽🔽") + # pipette.consolidate( + # volume=total_volume, + # source=[wet_sample.well("A1"), wet_sample.well("A2"), wet_sample.well("A3")], + # dest=sample_plate.well("A5"), + # mix_before=(3, 15), + # mix_after=(3, 20), + # ) + # protocol.comment(f"{example_3} 🔼🔼🔼🔼🔼🔼🔼") + + # example_4 = "Distribute default and reuse=true;second and subsequent aspirates LPD with wet tip" + # protocol.comment(f"{example_4} 🔽🔽🔽🔽🔽🔽🔽") + # pipette.distribute( + # volume=total_volume, + # source=sample_plate.well("A2"), + # dest=[sample_plate.well("A1"), sample_plate.well("A3")], + # reuse=True, + # ) + # protocol.comment(f"{example_4} 🔼🔼🔼🔼🔼🔼🔼") + + # example_5 = "Distribute mix=true, During mixing, all aspirates on repetitions > 1 LPD with wet tip" + # protocol.comment(f"{example_5} 🔽🔽🔽🔽🔽🔽🔽") + # pipette.distribute( + # volume=total_volume, + # source=sample_plate.well("A2"), + # dest=[sample_plate.well("A1"), sample_plate.well("A3")], + # mix=True, + + # # reuse the tip for a second transfer + # # no error + # # we must say in docs do not do this + # protocol.comment("LPD no error thrown on simple command tip reuse 🔽🔽🔽🔽🔽🔽🔽") + # well = "A2" + # pipette.pick_up_tip() + # pipette.aspirate(volume, wet_sample.well(well)) + # pipette.dispense(volume, sample_plate.well(well)) + + # well = "A3" + # pipette.aspirate(volume, wet_sample.well(well)) + # pipette.dispense(volume, sample_plate.well(well)) + # pipette.drop_tip() + # protocol.comment("LPD no error thrown on simple command tip reuse 🔼🔼🔼🔼🔼🔼🔼") + + # # Again no error is thrown + # # but we must say in docs do not do this + # protocol.comment("LPD no error thrown on blowout + prepare_to_aspirate 🔽🔽🔽🔽🔽🔽🔽") + # pipette.pick_up_tip() + # pipette.aspirate(volume=20, location=reservoir["A1"]) + # pipette.blow_out(trashbin) # make sure tip is empty then use for next step + # protocol.comment(f"Current volume in pipette: {pipette.current_volume}") # prints 0 + # # pipette.prepare_to_aspirate() removes the error from line 93 + # # but this should NOT be done!!! + # # Error 4000 GENERAL_ERROR (ProtocolCommandFailedError): TipNotEmptyError: + # # This operation requires a tip with no liquid in it. + # pipette.prepare_to_aspirate() + # is_liquid_in_reservoir = pipette.detect_liquid_presence(reservoir["A1"]) + # protocol.comment(f"Is there liquid in the reservoir? {is_liquid_in_reservoir}") + # pipette.drop_tip() + # protocol.comment("LPD no error thrown on blowout + prepare_to_aspirate 🔼🔼🔼🔼🔼🔼🔼") diff --git a/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_P50_touch_tip_directly.py b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_P50_touch_tip_directly.py new file mode 100644 index 00000000000..ac8a4420650 --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_P50_touch_tip_directly.py @@ -0,0 +1,66 @@ +import random +from typing import Set +from opentrons import protocol_api + +# metadata +metadata = { + "protocolName": "Flex touch tip first", + "author": "Josh McVey", + "description": "touch tip first", +} + +requirements = { + "robotType": "Flex", + "apiLevel": "2.20", +} + + +def load_liquid_in_all_wells(labware, liquid) -> None: + for well in labware.wells(): + well.load_liquid(liquid=liquid, volume=well.max_volume) + + +def run(protocol: protocol_api.ProtocolContext): + + # modules/fixtures + trashbin = protocol.load_trash_bin(location="A3") + + # labware + tiprack1 = protocol.load_labware("opentrons_flex_96_tiprack_1000ul", "A2") + tiprack2 = protocol.load_labware("opentrons_flex_96_tiprack_50ul", "B2") + sample_plate = protocol.load_labware("armadillo_96_wellplate_200ul_pcr_full_skirt", "C3") + reservoir = protocol.load_labware("nest_1_reservoir_290ml", "D3") + wet_sample = protocol.load_labware("nest_12_reservoir_15ml", "B3") + + # liquids + waterButMoreBlue = protocol.define_liquid( + name="H20", + description="Test this wet!!!", + display_color="#0077b6", + ) + + wet_sample.well("A1").load_liquid(liquid=waterButMoreBlue, volume=200) + wet_sample.well("A2").load_liquid(liquid=waterButMoreBlue, volume=200) + wet_sample.well("A3").load_liquid(liquid=waterButMoreBlue, volume=200) + + # instruments + p50 = protocol.load_instrument("flex_1channel_50", mount="right", tip_racks=[tiprack2], liquid_presence_detection=True) + volume = 50 + + pipette = p50 + total_volume = 30 + + pipette.pick_up_tip() + # don't do an aspirate before the touch_tip + # pipette.aspirate(volume=total_volume, location=wet_sample.well("A1")) + protocol.comment("touch_tip") + # no matter if you aspirate before or not, + # the touch_tip is not shown in the app preview run + pipette.touch_tip(location=wet_sample.well("A1")) + protocol.comment("air_gap") + # if you uncomment the air_gap an error is thrown + # I should be at the wet_sample.well("A1") but it says I am at the tiprack + # pipette.air_gap(volume=20) + protocol.comment("blow_out with no arguments") + pipette.blow_out() + pipette.drop_tip() diff --git a/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_P8X1000_P50_LLD.py b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_P8X1000_P50_LLD.py new file mode 100644 index 00000000000..1550f3313d5 --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/Flex_S_v2_20_P8X1000_P50_LLD.py @@ -0,0 +1,106 @@ +from opentrons import protocol_api + +# metadata +metadata = { + "protocolName": "2.20 Error Recovery Testing Protocol - Modified", + "author": "Sara Kowalski", + "description": "Simple Protocol that user can use to Phase 1 Error Recovery options for single and multi channel pipettes. NOTE: YOU WILL NEED A MODIFIED PIPETTE (NO SHROUD), and changed order of operations to reduce impact of dispense ER failure", +} + +requirements = { + "robotType": "Flex", + "apiLevel": "2.20", +} + +DRYRUN = "NO" + + +def run(protocol: protocol_api.ProtocolContext): + + # modules/fixtures + trashbin = protocol.load_trash_bin(location="A3") + + # labware + tiprack1 = protocol.load_labware("opentrons_flex_96_tiprack_1000ul", "A2") + tiprack2 = protocol.load_labware("opentrons_flex_96_tiprack_50ul", "B2") + sample_plate = protocol.load_labware("armadillo_96_wellplate_200ul_pcr_full_skirt", "C3") + reservoir = protocol.load_labware("nest_1_reservoir_290ml", "D3") + wet_sample = protocol.load_labware("nest_12_reservoir_15ml", "B3") + + # liquids + water = protocol.define_liquid( + name="Water", + description="water for ER testing", + display_color="#90e0ef", + ) + waterButMoreBlue = protocol.define_liquid( + name="Water but more blue", + description="Water for ER testing", + display_color="#0077b6", + ) + + wet_sample["A1"].load_liquid(liquid=water, volume=800) + wet_sample["A2"].load_liquid(liquid=waterButMoreBlue, volume=800) + + # instruments + p1000 = protocol.load_instrument( + "flex_8channel_1000", mount="left", tip_racks=[tiprack1] + ) ## will need a modified pipette that doesn't have the ejector(?) + p50 = protocol.load_instrument( + "flex_1channel_50", mount="right", tip_racks=[tiprack2] + ) ## will need a modified pipette that doesn't have the ejector(?) + + pipette_list = [p1000, p50] + volume = 900 + + for pipette in pipette_list: + if pipette == p50: + volume = 50 + + ############################## + #####Tip Pick Up Failure###### + ############################## + + protocol.pause("This tests Tip Pick Up Failure (General Error for now)") + protocol.pause("Please remove tip rack from deck. When you're testing recovery, add tiprack back as necessary.") + pipette.pick_up_tip() + + ########################################## + #####Overpressure - While Aspirating###### + ########################################## + + protocol.pause("Overpressure - While Aspirating") + pipette.home() + protocol.pause( + "Use p50UL tips - Swap with tip(s) that are hot glued shut (you will need to swap the tips for retry recovery options)" + ) + + for i in range(10): + pipette.aspirate(volume, reservoir["A1"].top()) + pipette.dispense(volume, reservoir["A1"].top()) + + #################################### + #####Liquid Presence Detection###### + #################################### + protocol.pause("This tests Liquid Presence Detection - PLEASE MAKE SURE YOU'RE USING 1000UL TIPS OR YOU WILL BREAK THE PIPETTE") + protocol.pause("Make sure reservoir is empty, and have full reservoir on standby to switch out with for recovery") + + pipette.require_liquid_presence(wet_sample["A1"]) + + pipette.aspirate(volume, wet_sample["A1"]) + pipette.dispense(volume, wet_sample["A1"]) + pipette.home() + + ##################################################### + #####Overpressure - While Dispensing###### + ##################################################### + + protocol.pause("Overpressure - While Dispensing") + + pipette.aspirate(volume, reservoir["A1"].top(20)) + protocol.pause("Swap with tip(s) that are hot glued shut (you will need to cut the tips for retry recovery options)") + pipette.dispense(volume, reservoir["A1"].top(20)) + + pipette.move_to(trashbin) + protocol.pause("You will have to manually remove tips if you're using a modified pipette") + pipette.drop_tip(trashbin) diff --git a/analyses-snapshot-testing/files/protocols/Flex_X_v2_20_96_None_Overrides_TooTallLabware.py b/analyses-snapshot-testing/files/protocols/Flex_X_v2_20_96_None_Overrides_TooTallLabware.py new file mode 100644 index 00000000000..d717c497655 --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/Flex_X_v2_20_96_None_Overrides_TooTallLabware.py @@ -0,0 +1,504 @@ +from dataclasses import dataclass +from typing import Optional +from opentrons.protocol_api import SINGLE, COLUMN, PARTIAL_COLUMN, ROW + +metadata = { + "protocolName": "Too tall labware on pickup tip", + "description": "oooo", +} + +requirements = { + "robotType": "Flex", + "apiLevel": "2.20", +} + + +@dataclass +class PartialTipConfig: + key: str + description: str + startingTip: str + startingNozzle: str + apiTipConfig: str + apiStart: str + apiEnd: Optional[str] + + +# flex_96channel_1000 SINGLE + +ninety_six_single_top_left = PartialTipConfig( + key="ninety_six_single_top_left", + description="96 single picking up top left of tiprack", + startingTip="A1", + startingNozzle="H12", + apiTipConfig=SINGLE, + apiStart="H12", + apiEnd=None, +) + +ninety_six_single_top_right = PartialTipConfig( + key="ninety_six_single_top_right", + description="96 single picking up top right of tiprack", + startingTip="A12", + startingNozzle="H1", + apiTipConfig=SINGLE, + apiStart="H1", + apiEnd=None, +) + +ninety_six_single_bottom_left = PartialTipConfig( + key="ninety_six_single_bottom_left", + description="96 single picking up bottom left of tiprack", + startingTip="H1", + startingNozzle="A12", + apiTipConfig=SINGLE, + apiStart="A12", + apiEnd=None, +) + +ninety_six_single_bottom_right = PartialTipConfig( + key="ninety_six_single_bottom_right", + description="96 single picking up bottom right of tiprack", + startingTip="H12", + startingNozzle="A1", + apiTipConfig=SINGLE, + apiStart="A1", + apiEnd=None, +) + +# flex_96channel_1000 COLUMN + +ninety_six_column_left = PartialTipConfig( + key="ninety_six_column_left", + description="96 column picking up left column of tiprack", + startingTip="Column 1", + startingNozzle="Column 12", + apiTipConfig=COLUMN, + apiStart="A12", + apiEnd=None, +) + + +ninety_six_column_right = PartialTipConfig( + key="ninety_six_column_right", + description="96 column picking up right column of tiprack", + startingTip="Row 12", + startingNozzle="Row 1", + apiTipConfig=COLUMN, + apiStart="A1", + apiEnd=None, +) + +# flex_96channel_1000 ROW + +ninety_six_row_top = PartialTipConfig( + key="ninety_six_row_top", + description="96 row picking up top row of tiprack", + startingTip="Row A", + startingNozzle="Row H", + apiTipConfig=ROW, + apiStart="H1", + apiEnd=None, +) + +ninety_six_row_bottom = PartialTipConfig( + key="ninety_six_row_bottom", + description="96 row picking up bottom row of tiprack", + startingTip="Row H", + startingNozzle="Row A", + apiTipConfig=ROW, + apiStart="A1", + apiEnd=None, +) + +# pipette = protocol.load_instrument(instrument_name="flex_8channel_50", mount="right") +# works for all 8 channel pipettes +eight_single_top = PartialTipConfig( + key="eight_single_top", + description="8 channel single picking up from the top of the tiprack", + startingTip="A1", + startingNozzle="H1", + apiTipConfig=SINGLE, + apiStart="H1", + apiEnd=None, +) + +eight_single_bottom = PartialTipConfig( + key="eight_single_bottom", + description="8 channel single picking up from the bottom of the tiprack", + startingTip="H1", + startingNozzle="A1", + apiTipConfig=SINGLE, + apiStart="A1", + apiEnd=None, +) + + +eight_partial_top_2_tips = PartialTipConfig( + key="eight_partial_top_2_tips", + description="8 partial bottom 2 tips", + startingTip="H1", + startingNozzle="B1", + apiTipConfig=PARTIAL_COLUMN, + apiStart="H1", + apiEnd="B1", +) + +eight_partial_top_3_tips = PartialTipConfig( + key="eight_partial_top_3_tips", + description="8 partial bottom 3 tips", + startingTip="H1", + startingNozzle="C1", + apiTipConfig=PARTIAL_COLUMN, + apiStart="H1", + apiEnd="C1", +) +eight_partial_top_4_tips = PartialTipConfig( + key="eight_partial_top_4", + description="8 partial bottom 4 tips", + startingTip="H1", + startingNozzle="D1", + apiTipConfig=PARTIAL_COLUMN, + apiStart="H1", + apiEnd="D1", +) +eight_partial_top_5_tips = PartialTipConfig( + key="eight_partial_top_5", + description="8 partial bottom 5 tips", + startingTip="H1", + startingNozzle="E1", + apiTipConfig=PARTIAL_COLUMN, + apiStart="H1", + apiEnd="E1", +) +eight_partial_top_6_tips = PartialTipConfig( + key="eight_partial_top_6", + description="8 partial bottom 6 tips", + startingTip="H1", + startingNozzle="F1", + apiTipConfig=PARTIAL_COLUMN, + apiStart="H1", + apiEnd="F1", +) + +eight_partial_top_7_tips = PartialTipConfig( + key="eight_partial_top_7", + description="8 partial bottom 7 tips", + startingTip="H1", + startingNozzle="G1", + apiTipConfig=PARTIAL_COLUMN, + apiStart="H1", + apiEnd="G1", +) + +all_partial_configs = [ + ninety_six_single_top_left, + ninety_six_single_top_right, + ninety_six_single_bottom_left, + ninety_six_single_bottom_right, + ninety_six_column_left, + ninety_six_column_right, + ninety_six_row_top, + ninety_six_row_bottom, + eight_single_top, + eight_single_bottom, + eight_partial_top_2_tips, + eight_partial_top_3_tips, + eight_partial_top_4_tips, + eight_partial_top_5_tips, + eight_partial_top_6_tips, + eight_partial_top_7_tips, +] + + +def find_partial_tip_config(key: str) -> Optional[PartialTipConfig]: + for config in all_partial_configs: + if config.key == key: + return config + raise ValueError(f"Could not find partial tip config with key {key}") + + +@dataclass +class TestCase: + key: str + description: str + pipette_config_key: str + collision_slot: Optional[str] = None + tip_rack_slot: Optional[str] = None + movement: Optional[str] = None + source_slot: Optional[str] = None + source_well: Optional[str] = None + destination_slot: Optional[str] = None + destination_well: Optional[str] = None + + +north = TestCase( + key="north", + description="North too tall labware on pickup tip", + pipette_config_key="ninety_six_single_top_left", + collision_slot="B2", +) + +north_west = TestCase( + key="north_west", + description="NW too tall labware on pickup tip", + pipette_config_key="ninety_six_single_top_left", + collision_slot="B1", +) + +west = TestCase( + key="west", + description="west too tall labware on pickup tip", + pipette_config_key="ninety_six_single_top_left", + collision_slot="C1", +) + +south_west = TestCase( + key="south_west", + description="west too tall labware on pickup tip", + pipette_config_key="ninety_six_single_bottom_left", + collision_slot="D1", +) + +south = TestCase( + key="south", + description="west too tall labware on pickup tip", + pipette_config_key="ninety_six_single_bottom_left", + collision_slot="D2", +) + +south_east = TestCase( + key="south_east", + description="west too tall labware on pickup tip", + pipette_config_key="ninety_six_single_bottom_right", + collision_slot="D3", +) +east = TestCase( + key="east", + description="west too tall labware on pickup tip", + pipette_config_key="ninety_six_single_bottom_right", + collision_slot="C3", +) + +east_column = TestCase( + key="east_column", + description="west too tall labware on pickup tip", + pipette_config_key="ninety_six_column_left", + collision_slot="C1", +) +west_column = TestCase( + key="west_column", + description="west too tall labware on pickup tip", + pipette_config_key="ninety_six_column_right", + collision_slot="C3", +) + +north_row = TestCase( + key="north_row", + description="north row too tall labware on pickup tip", + pipette_config_key="ninety_six_row_top", + collision_slot="B2", +) + +south_row = TestCase( + key="south_row", + description="south row too tall labware on pickup tip", + pipette_config_key="ninety_six_row_bottom", + collision_slot="D2", +) + +top_edge = TestCase(key="top_edge", description="top edge of robot", pipette_config_key="ninety_six_single_top_left", tip_rack_slot="A1") + +bottom_left_edge = TestCase( + key="bottom_left_edge", description="bottom left edge of robot", pipette_config_key="ninety_six_single_bottom_left", tip_rack_slot="D1" +) + +bottom_right_edge = TestCase( + key="bottom_right_edge", + description="bottom right edge of robot", + pipette_config_key="ninety_six_single_bottom_right", + tip_rack_slot="D3", +) + +c3_right_edge = TestCase( + key="c3_right_edge", description="right edge of c2", pipette_config_key="ninety_six_single_bottom_right", tip_rack_slot="C3" +) + +transfer_destination_collision = TestCase( + key="transfer_destination_collision", + description="transfer north", + pipette_config_key="ninety_six_single_top_left", + tip_rack_slot="B2", + source_slot="D2", + source_well="A1", + destination_slot="D3", + destination_well="A1", + movement="transfer", + collision_slot="C3", +) + +transfer_source_collision = TestCase( + key="transfer_source_collision", + description="transfer north", + pipette_config_key="ninety_six_single_top_left", + tip_rack_slot="B2", + source_slot="D2", + source_well="A1", + destination_slot="D3", + destination_well="A1", + movement="transfer", + collision_slot="C1", +) + +mix_collision = TestCase( + key="mix_collision", + description="mix north", + pipette_config_key="ninety_six_single_top_left", + tip_rack_slot="B2", + source_slot="D2", + source_well="A1", + movement="mix", + collision_slot="C1", +) + +consolidate_source_collision = TestCase( + key="consolidate_source_collision", + description="consolidate north", + pipette_config_key="ninety_six_single_top_left", + tip_rack_slot="B2", + source_slot="D2", + source_well="A1", + destination_slot="D3", + destination_well="A1", + movement="consolidate", + collision_slot="C1", +) + +consolidate_destination_collision = TestCase( + key="consolidate_destination_collision", + description="consolidate north", + pipette_config_key="ninety_six_single_top_left", + tip_rack_slot="B2", + source_slot="D2", + source_well="A1", + destination_slot="D3", + destination_well="A1", + movement="consolidate", + collision_slot="C3", +) + +distribute_source_collision = TestCase( + key="distribute_source_collision", + description="distribute north", + pipette_config_key="ninety_six_single_top_left", + tip_rack_slot="B2", + source_slot="D2", + source_well="A1", + destination_slot="D3", + destination_well="A1", + movement="distribute", + collision_slot="C1", +) + +distribute_destination_collision = TestCase( + key="distribute_destination_collision", + description="distribute north", + pipette_config_key="ninety_six_single_top_left", + tip_rack_slot="B2", + source_slot="D2", + source_well="A1", + destination_slot="D3", + destination_well="A1", + movement="distribute", + collision_slot="C3", +) + +# all have been tested manually and throw an error as expected JTM 20240814 +test_cases = [ + transfer_source_collision, + transfer_destination_collision, + c3_right_edge, + north, + north_west, + west, + south_west, + south, + south_east, + east, + east_column, + west_column, + north_row, + south_row, + top_edge, + bottom_left_edge, + bottom_left_edge, + bottom_right_edge, + mix_collision, + consolidate_source_collision, + consolidate_destination_collision, + distribute_source_collision, + distribute_destination_collision, +] + + +def get_test_case(key: str) -> Optional[TestCase]: + for test_case in test_cases: + if test_case.key == key: + return test_case + raise ValueError(f"Could not find test case with key {key}") + + +def run(ctx): + tall_labware_loadname = "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical" + test_case = get_test_case(key) + + if test_case.tip_rack_slot and test_case.tip_rack_slot != "C2": + tip_rack = ctx.load_labware("opentrons_96_tiprack_1000ul", test_case.tip_rack_slot) + else: + tip_rack = ctx.load_labware("opentrons_96_tiprack_1000ul", "C2") + + pipette_config = find_partial_tip_config(test_case.pipette_config_key) + + pipette = ctx.load_instrument("flex_96channel_1000") + + pipette.configure_nozzle_layout(pipette_config.apiTipConfig, pipette_config.apiStart, tip_racks=[tip_rack]) + + if test_case.collision_slot: + ctx.load_labware(tall_labware_loadname, test_case.collision_slot) + + target_labware_loadname = "nest_96_wellplate_100ul_pcr_full_skirt" + if test_case.source_slot: + source = ctx.load_labware(target_labware_loadname, test_case.source_slot) + + if test_case.destination_slot: + destination = ctx.load_labware(target_labware_loadname, test_case.destination_slot) + + if not test_case.movement: + None # No movement simply pickup tip from the tip rack + pipette.pick_up_tip() + elif test_case.movement == "transfer": + trash = ctx.load_trash_bin("A3") + pipette.transfer(10, source[test_case.source_well], destination[test_case.destination_well]) + elif test_case.movement == "mix": + trash = ctx.load_trash_bin("A3") + well = source[test_case.source_well] + pipette.pick_up_tip() + pipette.move_to(well.bottom(z=2)) + pipette.mix(10, 10) + pipette.move_to(well.top(z=5)) + pipette.blow_out() + pipette.drop_tip() + elif test_case.movement == "consolidate": + trash = ctx.load_trash_bin("A3") + pipette.consolidate( + [10, 10], + [source[test_case.source_well], source[test_case.source_well]], + destination[test_case.destination_well], + ) + elif test_case.movement == "distribute": + trash = ctx.load_trash_bin("A3") + pipette.distribute( + 20, + source[test_case.source_well], + [destination[test_case.destination_well], destination[test_case.destination_well]], + ) diff --git a/analyses-snapshot-testing/files/protocols/Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs.py b/analyses-snapshot-testing/files/protocols/Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs.py new file mode 100644 index 00000000000..9d275c2db84 --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs.py @@ -0,0 +1,185 @@ +from dataclasses import dataclass +from typing import Optional +from opentrons.protocol_api import PARTIAL_COLUMN + +# inspired by https://opentrons.atlassian.net/browse/PLAT-457 + +metadata = { + "protocolName": "Invalid tip configs that should error", + "description": "oooo", +} + +requirements = { + "robotType": "Flex", + "apiLevel": "2.20", +} + + +@dataclass +class PartialTipConfig: + key: str + pipette_load_name: str + description: str + starting_tip: str + starting_nozzle: str + api_tip_config: str + api_start: str + api_end: Optional[str] = None + + +# Want to see +"Partial column configuration is only supported on 8-Channel pipettes" +ninety_six_partial_column_1 = PartialTipConfig( + key="ninety_six_partial_column_1", + pipette_load_name="flex_96channel_1000", + description="96 2 tip pick up top left of tiprack", + starting_tip="A1", + starting_nozzle="H12", + api_tip_config=PARTIAL_COLUMN, + api_start="H12", + api_end="G12", +) + +# https://opentrons.atlassian.net/browse/PLAT-457 +ninety_six_partial_column_2 = PartialTipConfig( + key="ninety_six_partial_column_2", + pipette_load_name="flex_96channel_1000", + description="Full row", + starting_tip="A1", + starting_nozzle="H12", + api_tip_config=PARTIAL_COLUMN, + api_start="H1", + api_end="A1", +) + +ninety_six_partial_column_3 = PartialTipConfig( + key="ninety_six_partial_column_3", + pipette_load_name="flex_96channel_1000", + description="Full Row", + starting_tip="A1", + starting_nozzle="H12", + api_tip_config=PARTIAL_COLUMN, + api_start="H1", + api_end="H12", +) + +# We do not allow PARTIAL_COLUMN to start on the bottom of the tip rack +# Want to see +# "IncompatibleNozzleConfiguration: Attempted Nozzle Configuration does not match any approved map layout for the current pipette." +eight_partial_column_bottom_left = PartialTipConfig( + key="eight_partial_column_bottom_left", + pipette_load_name="flex_8channel_1000", + description="8 channel 2 tip pick up bottom left of tiprack", + starting_tip="H1", + starting_nozzle="A1", + api_tip_config=PARTIAL_COLUMN, + api_start="A1", + api_end="B1", +) + + +# Want to see +# Error 4000 GENERAL_ERROR (ProtocolCommandFailedError): IncompatibleNozzleConfiguration: No entry for front right nozzle 'G12' in pipette +eight_partial_column_bottom_right = PartialTipConfig( + key="eight_partial_column_bottom_right", + pipette_load_name="flex_8channel_1000", + description="8 channel 2 tip pick up bottom left of tiprack", + starting_tip="H12", + starting_nozzle="A1", + api_tip_config=PARTIAL_COLUMN, + api_start="H1", # for partial column only H1 + api_end="G12", # the author thinks this is to specify the ending tip and wants to start at bottom right for 2 tips +) + + +# Partial column configurations require the 'end' parameter. +eight_partial_column_no_end = PartialTipConfig( + key="eight_partial_column_no_end", + pipette_load_name="flex_8channel_1000", + description="8 channel PARTIAL_COLUMN with no end", + starting_tip="H1", + starting_nozzle="A1", + api_tip_config=PARTIAL_COLUMN, + api_start="H1", + # api_end="B1", sets the end to None +) + +# If you call return_tip() while using partial tip pickup, the API will raise an error. +# Error 4000 GENERAL_ERROR (UnexpectedProtocolError): Cannot return tip to a tiprack while the pipette is configured for partial tip. +return_tip_error = PartialTipConfig( + key="return_tip_error", + pipette_load_name="flex_8channel_1000", + description="8 channel 2 tip pick up top left of tiprack", + starting_tip="A1", + starting_nozzle="H1", + api_tip_config=PARTIAL_COLUMN, + api_start="H1", + api_end="G1", # valid 2 tip +) + + +# pipette.drop_tip(tiprack["B1"]) # drops tip in rack location A1 +drop_tip_with_location = PartialTipConfig( + key="drop_tip_with_location", + pipette_load_name="flex_8channel_1000", + description="8 channel 2 tip pick up top left of tiprack", + starting_tip="A1", + starting_nozzle="H1", + api_tip_config=PARTIAL_COLUMN, + api_start="H1", + api_end="G1", # valid 2 tip +) + +all_partial_configs = [ + ninety_six_partial_column_1, + ninety_six_partial_column_2, + ninety_six_partial_column_3, + eight_partial_column_bottom_left, + eight_partial_column_bottom_right, + eight_partial_column_no_end, + return_tip_error, + drop_tip_with_location, +] + + +def find_partial_tip_config(key: str) -> Optional[PartialTipConfig]: + for config in all_partial_configs: + if config.key == key: + return config + raise ValueError(f"Could not find partial tip config with key {key}") + + +def comment_column_has_tip(ctx, tip_rack, column): + range_A_to_H = [chr(i) for i in range(ord("A"), ord("H") + 1)] + wells = [f"{row}{column}" for row in range_A_to_H] + for well in wells: + ctx.comment(f"Tip rack in {tip_rack.parent}, well {well} has tip: {tip_rack.wells_by_name()[well].has_tip}") + + +def run(ctx): + tip_rack = ctx.load_labware("opentrons_flex_96_tiprack_1000ul", "B2") + + pipette_config = find_partial_tip_config(key) + + pipette = ctx.load_instrument(pipette_config.pipette_load_name, "left") + + pipette.configure_nozzle_layout( + style=pipette_config.api_tip_config, start=pipette_config.api_start, end=pipette_config.api_end, tip_racks=[tip_rack] + ) + + target_labware_loadname = "nest_96_wellplate_100ul_pcr_full_skirt" + source = ctx.load_labware(target_labware_loadname, "D2") + destination = ctx.load_labware(target_labware_loadname, "D3") + + trash = ctx.load_trash_bin("A3") + if key == "return_tip_error": + pipette.pick_up_tip() + # this test picks up 2 tips + comment_column_has_tip(ctx, tip_rack, 1) + pipette.return_tip() # this should raise an error + elif key == "drop_tip_with_location": + pipette.pick_up_tip() + comment_column_has_tip(ctx, tip_rack, 1) + pipette.drop_tip(tip_rack["B1"]) # this should raise an error + else: + pipette.transfer(10, source["A1"], destination["A1"]) diff --git a/analyses-snapshot-testing/files/protocols/OT2_S_v2_20_8_None_PARTIAL_COLUMN_HappyPathMixedTipRacks.py b/analyses-snapshot-testing/files/protocols/OT2_S_v2_20_8_None_PARTIAL_COLUMN_HappyPathMixedTipRacks.py new file mode 100644 index 00000000000..784667691d4 --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/OT2_S_v2_20_8_None_PARTIAL_COLUMN_HappyPathMixedTipRacks.py @@ -0,0 +1,111 @@ +from opentrons import protocol_api +from opentrons.protocol_api import PARTIAL_COLUMN + +metadata = { + "protocolName": "Partial Tip with Partial Column and Single Smoke", + "description": "OT-2 protocol with 1ch and 8ch pipette partial/single tip configurations. Mixing tipracks and using separate tipracks. ", +} + +requirements = { + "robotType": "OT-2", + "apiLevel": "2.20", +} + + +def run(protocol: protocol_api.ProtocolContext): + + # DECK SETUP AND LABWARE + partial_tiprack_1 = protocol.load_labware("opentrons_96_tiprack_300ul", "7") + partial_tiprack_2 = protocol.load_labware("opentrons_96_tiprack_300ul", "8") + sample_plate = protocol.load_labware("opentrons_96_wellplate_200ul_pcr_full_skirt", "2") + reservoir_12 = protocol.load_labware("nest_12_reservoir_15ml", "1") + reservoir_1 = protocol.load_labware("nest_1_reservoir_290ml", "3") + + p300_multi = protocol.load_instrument("p300_multi_gen2", mount="left", tip_racks=[partial_tiprack_1]) + p300_single = protocol.load_instrument("p300_single_gen2", mount="right", tip_racks=[partial_tiprack_2]) + + p300_multi.configure_nozzle_layout(style=PARTIAL_COLUMN, start="H1", end="D1", tip_racks=[partial_tiprack_1]) + p300_multi.pick_up_tip() + p300_multi.mix(3, 75, sample_plate["E1"]) + p300_multi.mix(3, 200, reservoir_12["A1"]) + p300_multi.mix(3, 200, reservoir_1["A1"]) + p300_multi.drop_tip() + + p300_multi.transfer( + volume=150, + source=sample_plate["E1"], ##NOTE TO SELF THINK ABOUT THIS THE OFFSET SHOULD BE + dest=sample_plate["E12"], + new_tip="once", + ) + + p300_multi.configure_nozzle_layout(style=PARTIAL_COLUMN, start="H1", end="E1", tip_racks=[partial_tiprack_1]) + p300_multi.distribute( + volume=300, + source=reservoir_12["A12"], + dest=[reservoir_12["A11"], reservoir_12["A10"], reservoir_12["A9"], reservoir_12["A8"], reservoir_12["A7"], reservoir_12["A6"]], + ) + + p300_multi.configure_nozzle_layout(style=PARTIAL_COLUMN, start="H1", end="F1", tip_racks=[partial_tiprack_1]) + p300_multi.consolidate( + volume=25, + source=[ + reservoir_12["A1"], + reservoir_12["A2"], + reservoir_12["A3"], + reservoir_12["A4"], + reservoir_12["A5"], + reservoir_12["A6"], + ], + dest=reservoir_1["A1"], + ) + + p300_multi.pick_up_tip() + p300_multi.touch_tip(reservoir_12["A7"]) + p300_multi.drop_tip() + p300_multi.pick_up_tip() + p300_multi.home() + p300_multi.drop_tip() + + p300_multi.pick_up_tip() + well = reservoir_12["A7"] + # directly from docs http://sandbox.docs.opentrons.com/edge/v2/new_protocol_api.html#opentrons.protocol_api.InstrumentContext.prepare_to_aspirate + p300_multi.move_to(well.bottom(z=2)) + p300_multi.mix(10, 10) + p300_multi.move_to(well.top(z=5)) + p300_multi.blow_out() + p300_multi.prepare_to_aspirate() + p300_multi.move_to(well.bottom(z=2)) + p300_multi.aspirate(10, well.bottom(z=2)) + p300_multi.dispense(10) + p300_multi.drop_tip() + + p300_single.transfer(volume=25, source=sample_plate["A1"], dest=sample_plate["A12"], new_tip="once") + p300_single.distribute( + volume=300, + source=reservoir_12["A1"], + dest=[reservoir_12["A2"], reservoir_12["A3"], reservoir_12["A4"], reservoir_12["A5"], reservoir_12["A6"], reservoir_12["A7"]], + ) + + p300_single.consolidate( + volume=25, + source=[ + reservoir_12["A6"], + reservoir_12["A7"], + reservoir_12["A8"], + reservoir_12["A9"], + reservoir_12["A10"], + reservoir_12["A11"], + reservoir_12["A12"], + ], + dest=reservoir_1["A1"], + ) + + try: + while partial_tiprack_1 != None: + for well in sample_plate.wells(): + p300_single.pick_up_tip(partial_tiprack_1) + p300_single.aspirate(10, well) + p300_single.dispense(10, well) + p300_single.drop_tip() + except: + p300_single.home() diff --git a/analyses-snapshot-testing/files/protocols/OT2_S_v2_20_8_None_SINGLE_HappyPath.py b/analyses-snapshot-testing/files/protocols/OT2_S_v2_20_8_None_SINGLE_HappyPath.py new file mode 100644 index 00000000000..1adf454421c --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/OT2_S_v2_20_8_None_SINGLE_HappyPath.py @@ -0,0 +1,135 @@ +from opentrons.protocol_api import SINGLE + +metadata = { + "protocolName": "OT2 8 Channel SINGLE Happy Path A1 and H1", + "description": "OT2 8 Channel pipette and a SINGLE partial tip configuration.", +} + +requirements = { + "robotType": "OT-2", + "apiLevel": "2.20", +} + + +def run(protocol): + + # trash = protocol.load_trash_bin("A3") # must load trash bin + + partial_tip_rack = protocol.load_labware( + load_name="opentrons_96_tiprack_300ul", + label="Partial Tip Rack", + location="8", + ) + + pipette = protocol.load_instrument(instrument_name="p300_multi_gen2", mount="left") + # mount on the right and you will get an error. + + # On the 8-channel SINGLE + # start="A1" Means the North nozzle will pickup from the SW corner of the tip rack + # start="H1" Means the South nozzle will pickup from the NW corner of the tip rack + pipette.configure_nozzle_layout( + style=SINGLE, + start="A1", # Which nozzle + tip_racks=[partial_tip_rack], + ) + + source_labware_2 = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="2 Source Labware", + location="2", + ) + + destination_labware_3 = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="3 Destination Labware", + location="3", + ) + + volume = 10 # Default volume for actions that require it + + ############################# + # Pipette do work + pipette.consolidate( + [volume, volume], + [source_labware_2["A3"], source_labware_2["A4"]], + destination_labware_3["A3"], + ) + + pipette.transfer(volume, source_labware_2["A6"], destination_labware_3["A6"]) + + pipette.distribute( + 5, + source_labware_2["A7"], + [destination_labware_3["A7"], destination_labware_3["A8"]], + ) + + pipette.pick_up_tip() + pipette.touch_tip(source_labware_2["B1"]) + pipette.drop_tip() + pipette.pick_up_tip() + pipette.home() + pipette.drop_tip() + + pipette.pick_up_tip() + well = source_labware_2["D1"] + # directly from docs http://sandbox.docs.opentrons.com/edge/v2/new_protocol_api.html#opentrons.protocol_api.InstrumentContext.prepare_to_aspirate + pipette.move_to(well.bottom(z=2)) + pipette.mix(10, 10) + pipette.move_to(well.top(z=5)) + pipette.blow_out() + pipette.prepare_to_aspirate() + pipette.move_to(well.bottom(z=2)) + pipette.aspirate(10, well.bottom(z=2)) + pipette.dispense(10) + pipette.drop_tip() + + ############################ + # Change the pipette configuration + + pipette.configure_nozzle_layout( + style=SINGLE, + start="H1", # Which nozzle + tip_racks=[partial_tip_rack], + ) + + source_labware_4 = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="4 Source Labware", + location="4", + ) + + ############################# + # Pipette do work + pipette.consolidate( + [volume, volume], + [source_labware_4["A3"], source_labware_4["A4"]], + destination_labware_3["A3"], + ) + + pipette.transfer(volume, source_labware_4["A6"], source_labware_4["A6"]) + + pipette.distribute( + 5, + source_labware_4["A7"], + [destination_labware_3["A7"], destination_labware_3["A8"]], + ) + + pipette.pick_up_tip() + pipette.touch_tip(destination_labware_3["B1"]) + pipette.drop_tip() + pipette.pick_up_tip() + pipette.home() + pipette.drop_tip() + + pipette.pick_up_tip() + well = destination_labware_3["D1"] + # directly from docs http://sandbox.docs.opentrons.com/edge/v2/new_protocol_api.html#opentrons.protocol_api.InstrumentContext.prepare_to_aspirate + pipette.move_to(well.bottom(z=2)) + pipette.mix(10, 10) + pipette.move_to(well.top(z=5)) + pipette.blow_out() + pipette.prepare_to_aspirate() + pipette.move_to(well.bottom(z=2)) + pipette.aspirate(10, well.bottom(z=2)) + pipette.dispense(10) + pipette.drop_tip() diff --git a/analyses-snapshot-testing/files/protocols/OT2_S_v2_20_8_None_SINGLE_TubeRackCollision.py b/analyses-snapshot-testing/files/protocols/OT2_S_v2_20_8_None_SINGLE_TubeRackCollision.py new file mode 100644 index 00000000000..2cf77913071 --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/OT2_S_v2_20_8_None_SINGLE_TubeRackCollision.py @@ -0,0 +1,64 @@ +from opentrons.protocol_api import SINGLE + +metadata = { + "protocolName": "8Channel SINGLE Pickup Tube Rack collision", + "description": "Unsafe protocol ❗❗❗❗❗❗❗❗❗❗❗ will collide with tube.", +} + +requirements = { + "robotType": "OT-2", + "apiLevel": "2.20", +} + + +def comment_tip_rack_status(ctx, tip_rack): + """ + Print out the tip status for each row in a tip rack. + Each row (A-H) will print the well statuses for columns 1-12 in a single comment, + with a '🟢' for present tips and a '❌' for missing tips. + """ + range_A_to_H = [chr(i) for i in range(ord("A"), ord("H") + 1)] + range_1_to_12 = range(1, 13) + + ctx.comment(f"Tip rack in {tip_rack.parent}") + + for row in range_A_to_H: + status_line = f"{row}: " + for col in range_1_to_12: + well = f"{row}{col}" + has_tip = tip_rack.wells_by_name()[well].has_tip + status_emoji = "🟢" if has_tip else "❌" + status_line += f"{well} {status_emoji} " + + # Print the full status line for the row + ctx.comment(status_line) + + +def run(protocol): + + partial_tip_rack = protocol.load_labware( + load_name="opentrons_96_tiprack_300ul", + label="Partial Tip Rack", + location="3", + ) + + tube_rack = protocol.load_labware( + load_name="opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + label="Tube Rack", + location="2", + ) + + pipette = protocol.load_instrument(instrument_name="p300_multi_gen2", mount="left") + + pipette.configure_nozzle_layout( + style=SINGLE, + start="H1", + tip_racks=[partial_tip_rack], + ) + + pipette.pick_up_tip() + comment_tip_rack_status(protocol, partial_tip_rack) + # both commands are not physically possible but throw no error + pipette.aspirate(30, tube_rack["A3"].bottom()) + pipette.dispense(30, tube_rack["A4"].bottom()) + pipette.drop_tip() diff --git a/analyses-snapshot-testing/files/protocols/OT2_S_v2_20_P20M_PARTIAL_COLUMN_Overhang.py b/analyses-snapshot-testing/files/protocols/OT2_S_v2_20_P20M_PARTIAL_COLUMN_Overhang.py new file mode 100644 index 00000000000..6e4a3b5b8e5 --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/OT2_S_v2_20_P20M_PARTIAL_COLUMN_Overhang.py @@ -0,0 +1,155 @@ +from opentrons.protocol_api import PARTIAL_COLUMN + +metadata = { + "protocolName": "p20_multi_gen2 PARTIAL_COLUMN Overhang", + "description": "A protocol that demonstrates overhang into a slot with a partial column configuration.", + "author": "Josh McVey", +} + +requirements = { + "robotType": "OT-2", + "apiLevel": "2.20", +} + + +def comment_tip_rack_status(ctx, tip_rack): + """ + Print out the tip status for each row in a tip rack. + Each row (A-H) will print the well statuses for columns 1-12 in a single comment, + with a '🟢' for present tips and a '❌' for missing tips. + """ + range_A_to_H = [chr(i) for i in range(ord("A"), ord("H") + 1)] + range_1_to_12 = range(1, 13) + + ctx.comment(f"Tip rack in {tip_rack.parent}") + + for row in range_A_to_H: + status_line = f"{row}: " + for col in range_1_to_12: + well = f"{row}{col}" + has_tip = tip_rack.wells_by_name()[well].has_tip + status_emoji = "🟢" if has_tip else "❌" + status_line += f"{well} {status_emoji} " + + # Print the full status line for the row + ctx.comment(status_line) + + +def run(protocol): + + partial_tip_rack = protocol.load_labware( + load_name="opentrons_96_tiprack_20ul", + label="Partial Tip Rack", + location="10", + ) + + pipette = protocol.load_instrument(instrument_name="p20_multi_gen2", mount="left") + + pipette.configure_nozzle_layout( + style=PARTIAL_COLUMN, + start="H1", + end="D1", # 5 Tips + tip_racks=[partial_tip_rack], + ) + + source_labware_5 = protocol.load_labware( + load_name="nest_1_reservoir_290ml", + label="Source Reservoir", + location="5", + ) + + destination_labware_2 = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="PCR Plate", + location="2", + ) + + # Known issue in 8.0.0 + # if you target A1 of the labware in 2 + # nozzle H1 - the front-most nozzle will go to A1 + # this means that tips will be out of the slot + # they will over hang into the 5 slot + # no error is raised + # the overhanging tips will collide with the labware in slot 5 + + # If we ever do detect and error for this + # Take all these examples into a negative Overrides test + + volume = 5 + pipette.pick_up_tip() + comment_tip_rack_status(protocol, partial_tip_rack) + # why with P20 do I get: + # MOTION_PLANNING_FAILURE (PartialTipMovementNotAllowedError): Moving to PCR Plate in slot 2 + # with H1 nozzle partial configuration will result in collision with items in deck slot 5. + # because the P20 would actually collide with the labware in slot 5 + # https://opentrons.atlassian.net/browse/RQA-3198 + # bad - 4 tips will overhang into slot 5 + # pipette.aspirate(volume=volume, location=destination_labware_2["A1"]) + # bad - 3 tips will overhang into slot 5 + # pipette.aspirate(volume=volume, location=destination_labware_2["B1"]) + # bad - 2 tips will overhang into slot 5 + # pipette.aspirate(volume=volume, location=destination_labware_2["C1"]) + # bad - 1 tip will overhang into slot 5 + # pipette.aspirate(volume=volume, location=destination_labware_2["D1"]) + # pipette.aspirate(volume=volume, location=destination_labware_2["E1"]) + # pipette.aspirate(volume=volume, location=destination_labware_2["F1"]) + # pipette.aspirate(volume=volume, location=destination_labware_2["G1"]) + # H is the only safe row + pipette.aspirate(volume=volume, location=destination_labware_2["H1"]) + + +# ignore the below for the time being +""" + # this is safe - from a reservoir + # must aspirate before dispense + pipette.aspirate(volume=volume, location=source_labware_5["A1"]) + # bad - bad - 4 tips will overhang into B2 + pipette.dispense(volume=volume, location=destination_labware_2["A1"]) + # this is safe - from a reservoir + # must aspirate before dispense + pipette.aspirate(volume=volume, location=source_labware_5["A1"]) + # bad - bad - 3 tips will overhang into B2 + pipette.dispense(volume=volume, location=destination_labware_2["B2"]) + # this is safe - from a reservoir + # must aspirate before dispense + pipette.aspirate(volume=volume, location=source_labware_5["A1"]) + # bad - bad - 2 tips will overhang into B2 + pipette.dispense(volume=volume, location=destination_labware_2["C3"]) + # this is safe - from a reservoir + # must aspirate before dispense + pipette.aspirate(volume=volume, location=source_labware_5["A1"]) + # bad - bad - 1 tip will overhang into B2 + pipette.dispense(volume=volume, location=destination_labware_2["D4"]) + # this is safe - from a reservoir + # must aspirate before dispense + pipette.aspirate(volume=volume, location=source_labware_5["A1"]) + # this is safe - 0 tips will overhang into B2 + pipette.dispense(volume=volume, location=destination_labware_2["E5"]) + # bad - has overhang into B2 - 4 tips + pipette.touch_tip(location=destination_labware_2["A1"]) + # bad - has overhang into B2 - 4 tips + pipette.blow_out(location=destination_labware_2["A1"]) + # bad - has overhang into B2 - 4 tips + pipette.mix(repetitions=3, volume=volume, location=destination_labware_2["A2"]) + # bad - aspirate and dispense have overhang into B2 + pipette.drop_tip() + pipette.transfer(volume=volume, source=destination_labware_2["A1"], dest=destination_labware_2["A2"]) + # bad - aspirate has 3 tip overhang but not dispense + pipette.transfer(volume=volume, source=destination_labware_2["B1"], dest=destination_labware_2["E1"]) + # bad - aspirate is safe but dispense has 2 tip overhang + pipette.transfer(volume=volume, source=destination_labware_2["E1"], dest=destination_labware_2["C3"]) + # bad - source and destinations have overhang + pipette.distribute(volume=20, source=destination_labware_2["D2"], dest=[destination_labware_2["D3"], destination_labware_2["D4"]]) + # bad - source has overhang but destinations are safe + pipette.distribute(volume=20, source=destination_labware_2["D2"], dest=[destination_labware_2["E3"], destination_labware_2["E4"]]) + # bad - source has no overhang but 1 destination does + pipette.distribute(volume=20, source=destination_labware_2["E6"], dest=[destination_labware_2["A7"], destination_labware_2["E7"]]) + # bad - source has no overhang but 2 destinations do + pipette.distribute(volume=20, source=destination_labware_2["E7"], dest=[destination_labware_2["A8"], destination_labware_2["A9"]]) + # bad - all sources and destination have overhang + pipette.consolidate(volume=volume, source=[destination_labware_2["A9"], destination_labware_2["A10"]], dest=destination_labware_2["A11"]) + # bad - 1 source has overhang but destination is safe + pipette.consolidate(volume=volume, source=[destination_labware_2["A9"], destination_labware_2["E10"]], dest=destination_labware_2["E11"]) + # bad - sources are safe but destination has overhang + pipette.consolidate(volume=volume, source=[destination_labware_2["E9"], destination_labware_2["E10"]], dest=destination_labware_2["A12"]) +""" diff --git a/analyses-snapshot-testing/files/protocols/OT2_S_v2_20_P20M_Simple.py b/analyses-snapshot-testing/files/protocols/OT2_S_v2_20_P20M_Simple.py new file mode 100644 index 00000000000..6fcfad51541 --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/OT2_S_v2_20_P20M_Simple.py @@ -0,0 +1,90 @@ +from opentrons.protocol_api import PARTIAL_COLUMN + +metadata = { + "protocolName": "p20_multi_gen2 Simple", + "description": "A protocol that demonstrates safe actions with p20_multi_gen2", + "author": "Josh McVey", +} + +requirements = { + "robotType": "OT-2", + "apiLevel": "2.20", +} + + +def comment_tip_rack_status(ctx, tip_rack): + """ + Print out the tip status for each row in a tip rack. + Each row (A-H) will print the well statuses for columns 1-12 in a single comment, + with a '🟢' for present tips and a '❌' for missing tips. + """ + range_A_to_H = [chr(i) for i in range(ord("A"), ord("H") + 1)] + range_1_to_12 = range(1, 13) + + ctx.comment(f"Tip rack in {tip_rack.parent}") + + for row in range_A_to_H: + status_line = f"{row}: " + for col in range_1_to_12: + well = f"{row}{col}" + has_tip = tip_rack.wells_by_name()[well].has_tip + status_emoji = "🟢" if has_tip else "❌" + status_line += f"{well} {status_emoji} " + + # Print the full status line for the row + ctx.comment(status_line) + + +def run(protocol): + + tip_rack = protocol.load_labware( + load_name="opentrons_96_tiprack_20ul", + label="Partial Tip Rack", + location="10", + ) + + pipette = protocol.load_instrument(instrument_name="p20_multi_gen2", mount="left", tip_racks=[tip_rack]) + + source_labware_5 = protocol.load_labware( + load_name="nest_1_reservoir_290ml", + label="Source Reservoir", + location="5", + ) + + destination_labware_2 = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="PCR Plate", + location="2", + ) + + volume = 10 + pipette.pick_up_tip() + comment_tip_rack_status(protocol, tip_rack) + pipette.aspirate(volume=volume, location=destination_labware_2["H1"]) + pipette.dispense(volume=volume, location=destination_labware_2["H2"]) + for i in range(1, 13): + protocol.comment(f"Touching tip to {destination_labware_2[f'H{i}']}") + pipette.touch_tip(location=destination_labware_2[f"H{i}"]) + + pipette.blow_out(location=destination_labware_2["H1"]) + pipette.mix(repetitions=3, volume=volume, location=destination_labware_2["H1"]) + pipette.drop_tip() + # Note that you cannot target Hn like you could on a partial tip + # Invalid source for multichannel transfer: [H3 of PCR Plate on slot 2] + # pipette.transfer(volume=volume, source=destination_labware_2["H3"], dest=destination_labware_2["H4"]) + # comment_tip_rack_status(protocol, tip_rack) + # Invalid source for multichannel transfer: [H4 of PCR Plate on slot 2] + # pipette.distribute(volume=volume, source=destination_labware_2["H4"], dest=[destination_labware_2["H5"], destination_labware_2["H6"]]) + # comment_tip_rack_status(protocol, tip_rack) + # Invalid source for multichannel transfer: [H7 of PCR Plate on slot 2, H8 of PCR Plate on slot 2] + # pipette.consolidate(volume=volume, source=[destination_labware_2["H7"], destination_labware_2["H8"]], dest=destination_labware_2["H9"]) + # comment_tip_rack_status(protocol, tip_rack) + + # but this works and I am inferring + # when using 8 channel pipette and you are specifying a column, use An + pipette.transfer(volume=volume, source=destination_labware_2["A3"], dest=destination_labware_2["A4"]) + comment_tip_rack_status(protocol, tip_rack) + pipette.distribute(volume=volume, source=destination_labware_2["A4"], dest=[destination_labware_2["A5"], destination_labware_2["A6"]]) + comment_tip_rack_status(protocol, tip_rack) + pipette.consolidate(volume=volume, source=[destination_labware_2["A7"], destination_labware_2["A8"]], dest=destination_labware_2["A9"]) + comment_tip_rack_status(protocol, tip_rack) diff --git a/analyses-snapshot-testing/files/protocols/OT2_S_v2_20_P300M_PARTIAL_COLUMN_Overhang.py b/analyses-snapshot-testing/files/protocols/OT2_S_v2_20_P300M_PARTIAL_COLUMN_Overhang.py new file mode 100644 index 00000000000..489b72abfe5 --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/OT2_S_v2_20_P300M_PARTIAL_COLUMN_Overhang.py @@ -0,0 +1,151 @@ +from opentrons.protocol_api import PARTIAL_COLUMN + +metadata = { + "protocolName": "p300_multi_gen2 PARTIAL_COLUMN Overhang", + "description": "A protocol that demonstrates overhang into a slot with a partial column configuration.", + "author": "Josh McVey", +} + +requirements = { + "robotType": "OT-2", + "apiLevel": "2.20", +} + + +def comment_tip_rack_status(ctx, tip_rack): + """ + Print out the tip status for each row in a tip rack. + Each row (A-H) will print the well statuses for columns 1-12 in a single comment, + with a '🟢' for present tips and a '❌' for missing tips. + """ + range_A_to_H = [chr(i) for i in range(ord("A"), ord("H") + 1)] + range_1_to_12 = range(1, 13) + + ctx.comment(f"Tip rack in {tip_rack.parent}") + + for row in range_A_to_H: + status_line = f"{row}: " + for col in range_1_to_12: + well = f"{row}{col}" + has_tip = tip_rack.wells_by_name()[well].has_tip + status_emoji = "🟢" if has_tip else "❌" + status_line += f"{well} {status_emoji} " + + # Print the full status line for the row + ctx.comment(status_line) + + +def run(protocol): + + partial_tip_rack = protocol.load_labware( + load_name="opentrons_96_tiprack_300ul", + label="Partial Tip Rack", + location="10", + ) + + pipette = protocol.load_instrument(instrument_name="p300_multi_gen2", mount="left") + + pipette.configure_nozzle_layout( + style=PARTIAL_COLUMN, + start="H1", + end="D1", # 5 Tips + tip_racks=[partial_tip_rack], + ) + + source_labware_5 = protocol.load_labware( + load_name="nest_1_reservoir_290ml", + label="Source Reservoir", + location="5", + ) + + destination_labware_2 = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="PCR Plate", + location="2", + ) + + # Known issue in 8.0.0 + # if you target A1 of the labware in 2 + # nozzle H1 - the front-most nozzle will go to A1 + # this means that tips will be out of the slot + # they will over hang into the 5 slot + # no error is raised + # the overhanging tips will collide with the labware in 5 + + # If we ever do detect and error for this + # Take all these examples into a negative Overrides test + + volume = 20 + pipette.pick_up_tip() + comment_tip_rack_status(protocol, partial_tip_rack) + # bad - 4 tips will overhang into slot 5 + pipette.aspirate(volume=volume, location=destination_labware_2["A1"]) + # bad - 3 tips will overhang into slot 5 + pipette.aspirate(volume=volume, location=destination_labware_2["B1"]) + # bad - 2 tips will overhang into slot 5 + pipette.aspirate(volume=volume, location=destination_labware_2["C1"]) + # bad - 1 tip will overhang into slot 5 + pipette.aspirate(volume=volume, location=destination_labware_2["D1"]) + # these should be safe??? + pipette.aspirate(volume=volume, location=destination_labware_2["E1"]) + pipette.aspirate(volume=volume, location=destination_labware_2["F1"]) + pipette.aspirate(volume=volume, location=destination_labware_2["G1"]) + # only one that is safe + pipette.aspirate(volume=volume, location=destination_labware_2["H1"]) + + +# ignore the below for the time being +""" + # this is safe - from a reservoir + # must aspirate before dispense + pipette.aspirate(volume=volume, location=source_labware_5["A1"]) + # bad - bad - 4 tips will overhang into B2 + pipette.dispense(volume=volume, location=destination_labware_2["A1"]) + # this is safe - from a reservoir + # must aspirate before dispense + pipette.aspirate(volume=volume, location=source_labware_5["A1"]) + # bad - bad - 3 tips will overhang into B2 + pipette.dispense(volume=volume, location=destination_labware_2["B2"]) + # this is safe - from a reservoir + # must aspirate before dispense + pipette.aspirate(volume=volume, location=source_labware_5["A1"]) + # bad - bad - 2 tips will overhang into B2 + pipette.dispense(volume=volume, location=destination_labware_2["C3"]) + # this is safe - from a reservoir + # must aspirate before dispense + pipette.aspirate(volume=volume, location=source_labware_5["A1"]) + # bad - bad - 1 tip will overhang into B2 + pipette.dispense(volume=volume, location=destination_labware_2["D4"]) + # this is safe - from a reservoir + # must aspirate before dispense + pipette.aspirate(volume=volume, location=source_labware_5["A1"]) + # this is safe - 0 tips will overhang into B2 + pipette.dispense(volume=volume, location=destination_labware_2["E5"]) + # bad - has overhang into B2 - 4 tips + pipette.touch_tip(location=destination_labware_2["A1"]) + # bad - has overhang into B2 - 4 tips + pipette.blow_out(location=destination_labware_2["A1"]) + # bad - has overhang into B2 - 4 tips + pipette.mix(repetitions=3, volume=volume, location=destination_labware_2["A2"]) + # bad - aspirate and dispense have overhang into B2 + pipette.drop_tip() + pipette.transfer(volume=volume, source=destination_labware_2["A1"], dest=destination_labware_2["A2"]) + # bad - aspirate has 3 tip overhang but not dispense + pipette.transfer(volume=volume, source=destination_labware_2["B1"], dest=destination_labware_2["E1"]) + # bad - aspirate is safe but dispense has 2 tip overhang + pipette.transfer(volume=volume, source=destination_labware_2["E1"], dest=destination_labware_2["C3"]) + # bad - source and destinations have overhang + pipette.distribute(volume=20, source=destination_labware_2["D2"], dest=[destination_labware_2["D3"], destination_labware_2["D4"]]) + # bad - source has overhang but destinations are safe + pipette.distribute(volume=20, source=destination_labware_2["D2"], dest=[destination_labware_2["E3"], destination_labware_2["E4"]]) + # bad - source has no overhang but 1 destination does + pipette.distribute(volume=20, source=destination_labware_2["E6"], dest=[destination_labware_2["A7"], destination_labware_2["E7"]]) + # bad - source has no overhang but 2 destinations do + pipette.distribute(volume=20, source=destination_labware_2["E7"], dest=[destination_labware_2["A8"], destination_labware_2["A9"]]) + # bad - all sources and destination have overhang + pipette.consolidate(volume=volume, source=[destination_labware_2["A9"], destination_labware_2["A10"]], dest=destination_labware_2["A11"]) + # bad - 1 source has overhang but destination is safe + pipette.consolidate(volume=volume, source=[destination_labware_2["A9"], destination_labware_2["E10"]], dest=destination_labware_2["E11"]) + # bad - sources are safe but destination has overhang + pipette.consolidate(volume=volume, source=[destination_labware_2["E9"], destination_labware_2["E10"]], dest=destination_labware_2["A12"]) +""" diff --git a/analyses-snapshot-testing/files/protocols/OT2_S_v2_20_P300M_Simple.py b/analyses-snapshot-testing/files/protocols/OT2_S_v2_20_P300M_Simple.py new file mode 100644 index 00000000000..7728a94a077 --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/OT2_S_v2_20_P300M_Simple.py @@ -0,0 +1,94 @@ +from opentrons.protocol_api import PARTIAL_COLUMN, ALL + +metadata = { + "protocolName": "p20_multi_gen2 Simple", + "description": "A protocol that demonstrates safe actions with p20_multi_gen2", + "author": "Josh McVey", +} + +requirements = { + "robotType": "OT-2", + "apiLevel": "2.20", +} + + +def comment_tip_rack_status(ctx, tip_rack): + """ + Print out the tip status for each row in a tip rack. + Each row (A-H) will print the well statuses for columns 1-12 in a single comment, + with a '🟢' for present tips and a '❌' for missing tips. + """ + range_A_to_H = [chr(i) for i in range(ord("A"), ord("H") + 1)] + range_1_to_12 = range(1, 13) + + ctx.comment(f"Tip rack in {tip_rack.parent}") + + for row in range_A_to_H: + status_line = f"{row}: " + for col in range_1_to_12: + well = f"{row}{col}" + has_tip = tip_rack.wells_by_name()[well].has_tip + status_emoji = "🟢" if has_tip else "❌" + status_line += f"{well} {status_emoji} " + + # Print the full status line for the row + ctx.comment(status_line) + + +def run(protocol): + + tip_rack = protocol.load_labware( + load_name="opentrons_96_tiprack_300ul", + label="Partial Tip Rack", + location="10", + ) + + pipette = protocol.load_instrument(instrument_name="p300_multi_gen2", mount="left", tip_racks=[tip_rack]) + + source_labware_5 = protocol.load_labware( + load_name="nest_1_reservoir_290ml", + label="Source Reservoir", + location="5", + ) + + destination_labware_2 = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="PCR Plate", + location="2", + ) + + volume = 40 + pipette.pick_up_tip() + comment_tip_rack_status(protocol, tip_rack) + pipette.aspirate(volume=volume, location=destination_labware_2["H1"]) + pipette.dispense(volume=volume, location=destination_labware_2["H2"]) + for i in range(1, 13): + protocol.comment(f"Touching tip to {destination_labware_2[f'H{i}']}") + pipette.touch_tip(location=destination_labware_2[f"H{i}"]) + + pipette.blow_out(location=destination_labware_2["H1"]) + pipette.mix(repetitions=3, volume=volume, location=destination_labware_2["H1"]) + pipette.drop_tip() + + range_A_to_H = [chr(i) for i in range(ord("A"), ord("H") + 1)] + column1 = [destination_labware_2[f"{row}1"] for row in range_A_to_H] + column2 = [destination_labware_2[f"{row}2"] for row in range_A_to_H] + protocol.comment(f"Transferring {volume}uL from column 1 to column 2") + pipette.transfer(volume=volume, source=column1, dest=column2) + comment_tip_rack_status(protocol, tip_rack) + + # Note that you cannot target Hn like you could on a partial tip + # when I try to use the well destination of Hn for + # transfer, distribute, or consolidate, I get an error like + # Invalid source for multichannel transfer: [H3 of PCR Plate on slot 2] + # pipette.transfer(volume=volume, source=destination_labware_2["H3"], dest=destination_labware_2["H4"]) + # comment_tip_rack_status(protocol, tip_rack) + + # but this works and I am inferring + # when using 8 channel pipette and you are specifying a column, use An + pipette.transfer(volume=volume, source=destination_labware_2["A3"], dest=destination_labware_2["A4"]) + comment_tip_rack_status(protocol, tip_rack) + pipette.distribute(volume=volume, source=destination_labware_2["A4"], dest=[destination_labware_2["A5"], destination_labware_2["A6"]]) + comment_tip_rack_status(protocol, tip_rack) + pipette.consolidate(volume=volume, source=[destination_labware_2["A7"], destination_labware_2["A8"]], dest=destination_labware_2["A9"]) + comment_tip_rack_status(protocol, tip_rack) diff --git a/analyses-snapshot-testing/files/protocols/OT2_S_v2_20_P50_touch_tip.py b/analyses-snapshot-testing/files/protocols/OT2_S_v2_20_P50_touch_tip.py new file mode 100644 index 00000000000..50f04c1ead2 --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/OT2_S_v2_20_P50_touch_tip.py @@ -0,0 +1,52 @@ +import random +from typing import Set +from opentrons import protocol_api + +# metadata +metadata = { + "protocolName": "touch_tip directly on OT2", + "author": "Josh McVey", + "description": "touch tip on OT2", +} + +requirements = { + "robotType": "OT-2", + "apiLevel": "2.20", +} + + +def load_liquid_in_all_wells(labware, liquid) -> None: + for well in labware.wells(): + well.load_liquid(liquid=liquid, volume=well.max_volume) + + +def run(protocol: protocol_api.ProtocolContext): + + # labware + tiprack2 = protocol.load_labware("opentrons_96_tiprack_20ul", "5") + wet_sample = protocol.load_labware("nest_12_reservoir_15ml", "2") + + # liquids + waterButMoreBlue = protocol.define_liquid( + name="H20", + description="Test this wet!!!", + display_color="#0077b6", + ) + + wet_sample.well("A1").load_liquid(liquid=waterButMoreBlue, volume=200) + wet_sample.well("A2").load_liquid(liquid=waterButMoreBlue, volume=200) + wet_sample.well("A3").load_liquid(liquid=waterButMoreBlue, volume=200) + + # instruments + p20 = protocol.load_instrument("p20_single_gen2", mount="right", tip_racks=[tiprack2]) + + pipette = p20 + + pipette.pick_up_tip() + protocol.comment("touch_tip") + pipette.touch_tip(wet_sample.well("A1")) + protocol.comment("air_gap") + pipette.air_gap(volume=10) + protocol.comment("blow_out with no arguments") + pipette.blow_out() + pipette.drop_tip() diff --git a/analyses-snapshot-testing/files/protocols/OT2_X_v2_20_8_Overrides_InvalidConfigs.py b/analyses-snapshot-testing/files/protocols/OT2_X_v2_20_8_Overrides_InvalidConfigs.py new file mode 100644 index 00000000000..e08cf13eda6 --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/OT2_X_v2_20_8_Overrides_InvalidConfigs.py @@ -0,0 +1,151 @@ +# key = "drop_tip_with_location" +from dataclasses import dataclass +from typing import Optional +from opentrons.protocol_api import PARTIAL_COLUMN + +# inspired by https://opentrons.atlassian.net/browse/PLAT-457 + +metadata = { + "protocolName": "Invalid tip configs that should error", + "description": "oooo", +} + +requirements = { + "robotType": "OT-2", + "apiLevel": "2.20", +} + + +@dataclass +class PartialTipConfig: + key: str + pipette_load_name: str + description: str + starting_tip: str + starting_nozzle: str + api_tip_config: str + api_start: str + api_end: Optional[str] = None + + +# We do not allow PARTIAL_COLUMN to start on the bottom of the tip rack +# Want to see +# "IncompatibleNozzleConfiguration: Attempted Nozzle Configuration does not match any approved map layout for the current pipette." +eight_partial_column_bottom_left = PartialTipConfig( + key="eight_partial_column_bottom_left", + pipette_load_name="p300_multi_gen2", + description="8 channel 2 tip pick up bottom left of tiprack", + starting_tip="H1", + starting_nozzle="A1", + api_tip_config=PARTIAL_COLUMN, + api_start="A1", + api_end="B1", +) + + +# Want to see +# Error 4000 GENERAL_ERROR (ProtocolCommandFailedError): IncompatibleNozzleConfiguration: No entry for front right nozzle 'G12' in pipette +eight_partial_column_bottom_right = PartialTipConfig( + key="eight_partial_column_bottom_right", + pipette_load_name="p20_multi_gen2", + description="8 channel 2 tip pick up bottom left of tiprack", + starting_tip="H12", + starting_nozzle="A1", + api_tip_config=PARTIAL_COLUMN, + api_start="H1", # for partial column only H1 + api_end="G12", # the author thinks this is to specify the ending tip and wants to start at bottom right for 2 tips +) + + +# Partial column configurations require the 'end' parameter. +eight_partial_column_no_end = PartialTipConfig( + key="eight_partial_column_no_end", + pipette_load_name="p20_multi_gen2", + description="8 channel PARTIAL_COLUMN with no end", + starting_tip="H1", + starting_nozzle="A1", + api_tip_config=PARTIAL_COLUMN, + api_start="H1", + # api_end="B1", sets the end to None +) + +# If you call return_tip() while using partial tip pickup, the API will raise an error. +# Error 4000 GENERAL_ERROR (UnexpectedProtocolError): Cannot return tip to a tiprack while the pipette is configured for partial tip. +return_tip_error = PartialTipConfig( + key="return_tip_error", + pipette_load_name="p20_multi_gen2", + description="8 channel 2 tip pick up top left of tiprack", + starting_tip="A1", + starting_nozzle="H1", + api_tip_config=PARTIAL_COLUMN, + api_start="H1", + api_end="G1", # valid 2 tip +) + + +# pipette.drop_tip(tiprack["B1"]) # drops tip in rack location A1 +drop_tip_with_location = PartialTipConfig( + key="drop_tip_with_location", + pipette_load_name="p300_multi_gen2", + description="8 channel 2 tip pick up top left of tiprack", + starting_tip="A1", + starting_nozzle="H1", + api_tip_config=PARTIAL_COLUMN, + api_start="H1", + api_end="G1", # valid 2 tip +) + +all_partial_configs = [ + eight_partial_column_bottom_left, + eight_partial_column_bottom_right, + eight_partial_column_no_end, + return_tip_error, + drop_tip_with_location, +] + + +def find_partial_tip_config(key: str) -> Optional[PartialTipConfig]: + for config in all_partial_configs: + if config.key == key: + return config + raise ValueError(f"Could not find partial tip config with key {key}") + + +def comment_column_has_tip(ctx, tip_rack, column): + range_A_to_H = [chr(i) for i in range(ord("A"), ord("H") + 1)] + wells = [f"{row}{column}" for row in range_A_to_H] + for well in wells: + ctx.comment(f"Tip rack in {tip_rack.parent}, well {well} has tip: {tip_rack.wells_by_name()[well].has_tip}") + + +def run(ctx): + + tip_rack_20 = ctx.load_labware("opentrons_96_tiprack_20ul", "1") + tip_rack_300 = ctx.load_labware("opentrons_96_tiprack_300ul", "2") + + pipette_config = find_partial_tip_config(key) + + pipette = ctx.load_instrument(pipette_config.pipette_load_name, "left") + + tip_rack = tip_rack_20 + if pipette_config.pipette_load_name.__contains__("300"): + tip_rack = tip_rack_300 + pipette.configure_nozzle_layout( + style=pipette_config.api_tip_config, start=pipette_config.api_start, end=pipette_config.api_end, tip_racks=[tip_rack] + ) + + target_labware_loadname = "nest_96_wellplate_100ul_pcr_full_skirt" + source = ctx.load_labware(target_labware_loadname, "4") + destination = ctx.load_labware(target_labware_loadname, "5") + + if key == "return_tip_error": + pipette.pick_up_tip() + # this test picks up 2 tips + comment_column_has_tip(ctx, tip_rack, 1) + pipette.return_tip() # this should raise an error + elif key == "drop_tip_with_location": + pipette.pick_up_tip() + comment_column_has_tip(ctx, tip_rack, 1) + pipette.drop_tip(tip_rack["A1"]) # this should raise an error + else: + pipette.transfer(10, source["A1"], destination["A1"]) diff --git a/analyses-snapshot-testing/files/templates/basic_flex_rtp_v1.1.py b/analyses-snapshot-testing/files/templates/basic_flex_rtp_v1.1.py new file mode 100644 index 00000000000..9a35d06e0c4 --- /dev/null +++ b/analyses-snapshot-testing/files/templates/basic_flex_rtp_v1.1.py @@ -0,0 +1,522 @@ +from dataclasses import dataclass +from typing import Any, Optional, Union +from opentrons.protocol_api import SINGLE, COLUMN, PARTIAL_COLUMN, ROW, ALL + +metadata = { + "protocolName": "Basic flex RTP template", +} + +requirements = { + "robotType": "Flex", + "apiLevel": "2.20", +} + +####### RTP DEFINITIONS ####### +# NozzleConfigurationType is from opentrons.hardware_control.nozzle_manager import NozzleConfigurationType +# do not want to import that as that interface or location might change +# type is not in shared-data +# cannot do the below +# ApiTipConfigType = Union[SINGLE, COLUMN, PARTIAL_COLUMN, ROW] + + +@dataclass +class PartialTipConfig: + """Dataclass to hold a partial tip configuration descriptively.""" + + key: str + description: str + starting_tip: str + starting_nozzle: str + api_tip_config: Any + api_start: str + api_end: Optional[str] + + def __str__(self): + return ( + f"🔑 Key: {self.key} | 📝 Description: {self.description} | " + f"💉 Starting Tip: {self.starting_tip} | 🔧 Starting Nozzle: {self.starting_nozzle} | " + f"📜 API Tip Config: {self.api_tip_config} | 🚀 API Start: {self.api_start} | " + f"🛑 API End: {self.api_end if self.api_end else 'None'}" + ) + + +#### Define all viable partial tip configurations. + +# flex_96channel_1000 SINGLE +# names and descriptions describe where relative to the tiprack the pipette will pick up tips + +ninety_six_single_back_left = PartialTipConfig( + key="ninety_six_single_back_left", + description="96 single picking up back left of tiprack", + starting_tip="A1", + starting_nozzle="H12", + api_tip_config=SINGLE, + api_start="H12", + api_end=None, +) + +ninety_six_single_back_right = PartialTipConfig( + key="ninety_six_single_back_right", + description="96 single picking up back right of tiprack", + starting_tip="A12", + starting_nozzle="H1", + api_tip_config=SINGLE, + api_start="H1", + api_end=None, +) + +ninety_six_single_front_left = PartialTipConfig( + key="ninety_six_single_front_left", + description="96 single picking up front left of tiprack", + starting_tip="H1", + starting_nozzle="A12", + api_tip_config=SINGLE, + api_start="A12", + api_end=None, +) + +ninety_six_single_front_right = PartialTipConfig( + key="ninety_six_single_front_right", + description="96 single picking up front right of tiprack", + starting_tip="H12", + starting_nozzle="A1", + api_tip_config=SINGLE, + api_start="A1", + api_end=None, +) + +# flex_96channel_1000 COLUMN + +ninety_six_column_left = PartialTipConfig( + key="ninety_six_column_left", + description="96 column picking up left column of tiprack", + starting_tip="Column 1", + starting_nozzle="Column 12", + api_tip_config=COLUMN, + api_start="A12", + api_end=None, +) + + +ninety_six_column_right = PartialTipConfig( + key="ninety_six_column_right", + description="96 column picking up right column of tiprack", + starting_tip="Row 12", + starting_nozzle="Row 1", + api_tip_config=COLUMN, + api_start="A1", + api_end=None, +) + +# flex_96channel_1000 ROW + +ninety_six_row_back = PartialTipConfig( + key="ninety_six_row_back", + description="96 row picking up back row of tiprack", + starting_tip="Row A", + starting_nozzle="Row H", + api_tip_config=ROW, + api_start="H1", + api_end=None, +) + +ninety_six_row_front = PartialTipConfig( + key="ninety_six_row_front", + description="96 row picking up front row of tiprack", + starting_tip="Row H", + starting_nozzle="Row A", + api_tip_config=ROW, + api_start="A1", + api_end=None, +) + +# 8 channel SINGLE +eight_single = PartialTipConfig( + key="eight_single", + description="8 channel single picking up from the back left of the tiprack", + starting_tip="A1", + starting_nozzle="H1", + api_tip_config=SINGLE, + api_start="H1", + api_end=None, +) + +# PARTIAL_COLUMN +eight_partial_back_7_tips = PartialTipConfig( + key="eight_partial_back_7_tips", + description="8 channel picking up 7 tips", + starting_tip="H1", + starting_nozzle="B1", + api_tip_config=PARTIAL_COLUMN, + api_start="H1", + api_end="B1", +) + +eight_partial_back_6_tips = PartialTipConfig( + key="eight_partial_back_6_tips", + description="8 channel picking up 6 tips", + starting_tip="H1", + starting_nozzle="C1", + api_tip_config=PARTIAL_COLUMN, + api_start="H1", + api_end="C1", +) +eight_partial_back_5_tips = PartialTipConfig( + key="eight_partial_back_5_tips", + description="8 channel picking up 5 tips", + starting_tip="H1", + starting_nozzle="D1", + api_tip_config=PARTIAL_COLUMN, + api_start="H1", + api_end="D1", +) +eight_partial_back_4_tips = PartialTipConfig( + key="eight_partial_back_4_tips", + description="8 channel picking up 4 tips", + starting_tip="H1", + starting_nozzle="E1", + api_tip_config=PARTIAL_COLUMN, + api_start="H1", + api_end="E1", +) +eight_partial_back_3_tips = PartialTipConfig( + key="eight_partial_back_3_tips", + description="8 channel picking up 3 tips", + starting_tip="H1", + starting_nozzle="F1", + api_tip_config=PARTIAL_COLUMN, + api_start="H1", + api_end="F1", +) + +eight_partial_back_2_tips = PartialTipConfig( + key="eight_partial_back_2_tips", + description="8 channel picking up 2 tips", + starting_tip="H1", + starting_nozzle="G1", + api_tip_config=PARTIAL_COLUMN, + api_start="H1", + api_end="G1", +) + +no_tip_config = PartialTipConfig( + key="no_tip_config", + description="Will discard and not set a partial tip config", + starting_tip="", + starting_nozzle="", + api_tip_config=ALL, + api_start="", + api_end="", +) + +# make a list of all the partial tip configurations + +all_partial_configs = [ + ninety_six_single_back_left, + ninety_six_single_back_right, + ninety_six_single_front_left, + ninety_six_single_front_right, + ninety_six_column_left, + ninety_six_column_right, + ninety_six_row_back, + ninety_six_row_front, + eight_single, + eight_partial_back_2_tips, + eight_partial_back_3_tips, + eight_partial_back_4_tips, + eight_partial_back_5_tips, + eight_partial_back_6_tips, + eight_partial_back_7_tips, + no_tip_config, +] + + +def find_partial_tip_config(key: str) -> Optional[PartialTipConfig]: + """Find a partial tip config by key.""" + for config in all_partial_configs: + if config.key == key: + return config + raise ValueError(f"Could not find partial tip config with key {key}") + + +reservoir_choices = [ + { + "display_name": "Agilent Reservoir 290 mL", + "value": "agilent_1_reservoir_290ml", + }, + { + "display_name": "Axygen Reservoir 90 mL", + "value": "axygen_1_reservoir_90ml", + }, + { + "display_name": "nest_12_reservoir_15ml", + "value": "nest_12_reservoir_15ml", + }, + { + "display_name": "Nest Reservoir 195 mL", + "value": "nest_1_reservoir_195ml", + }, + { + "display_name": "Nest Reservoir 290 mL", + "value": "nest_1_reservoir_290ml", + }, + { + "display_name": "usa..._12_reservoir_22ml", + "value": "usascientific_12_reservoir_22ml", + }, +] + +position_choices = [ + {"display_name": "A1", "value": "A1"}, + {"display_name": "A2", "value": "A2"}, + {"display_name": "A3", "value": "A3"}, + {"display_name": "B1", "value": "B1"}, + {"display_name": "B2", "value": "B2"}, + {"display_name": "B3", "value": "B3"}, + {"display_name": "C1", "value": "C1"}, + {"display_name": "C2", "value": "C2"}, + {"display_name": "C3", "value": "C3"}, + {"display_name": "D1", "value": "D1"}, + {"display_name": "D2", "value": "D2"}, + {"display_name": "D3", "value": "D3"}, +] + + +def add_parameters(parameters): + parameters.add_str( + display_name="Partial Tip Configuration", + variable_name="partial_tip_config_key", + default="ninety_six_single_back_left", + description="Partial tip configurations described by pickup nozzle and tip count", + choices=[ # value of each choice maps to the key of the partial tip config dataclass we defined + {"display_name": "96 SINGLE nozzle H12", "value": "ninety_six_single_back_left"}, + {"display_name": "96 SINGLE nozzle H1", "value": "ninety_six_single_back_right"}, + {"display_name": "96 SINGLE nozzle A12", "value": "ninety_six_single_front_left"}, + {"display_name": "96 SINGLE nozzle A1", "value": "ninety_six_single_front_right"}, + {"display_name": "96 COLUMN 1", "value": "ninety_six_column_left"}, + {"display_name": "96 COLUMN 12", "value": "ninety_six_column_right"}, + {"display_name": "96 ROW A", "value": "ninety_six_row_back"}, + {"display_name": "96 ROW H", "value": "ninety_six_row_front"}, + {"display_name": "8 SINGLE", "value": "eight_single"}, + {"display_name": "8 PARTIAL 2 tips", "value": "eight_partial_back_2_tips"}, + {"display_name": "8 PARTIAL 3 tips", "value": "eight_partial_back_3_tips"}, + {"display_name": "8 PARTIAL 4 tips", "value": "eight_partial_back_4_tips"}, + {"display_name": "8 PARTIAL 5 tips", "value": "eight_partial_back_5_tips"}, + {"display_name": "8 PARTIAL 6 tips", "value": "eight_partial_back_6_tips"}, + {"display_name": "8 PARTIAL 7 tips", "value": "eight_partial_back_7_tips"}, + {"display_name": "No Partial tip config", "value": "no_tip_config"}, + ], + ) + + parameters.add_str( + display_name="Pipette", + variable_name="pipette_load_name", + choices=[ + { + "display_name": "50µl single channel", + "value": "flex_1channel_50", + }, + { + "display_name": "1000µl single channel", + "value": "flex_1channel_1000", + }, + { + "display_name": "50µl 8 channel", + "value": "flex_8channel_50", + }, + { + "display_name": "1000µl 8 channel", + "value": "flex_8channel_1000", + }, + { + "display_name": "96-Channel Pipette", + "value": "flex_96channel_1000", + }, + ], + default="flex_96channel_1000", + description="Select the pipette type", + ) + + parameters.add_str( + display_name="Tip Rack", + variable_name="tiprack_load_name", + choices=[ + { + "display_name": "1000µl Filter Tip Rack", + "value": "opentrons_flex_96_filtertiprack_1000ul", + }, + { + "display_name": "1000µl Standard Tip Rack", + "value": "opentrons_flex_96_tiprack_1000ul", + }, + { + "display_name": "200µl Standard Tip Rack", + "value": "opentrons_flex_96_tiprack_200ul", + }, + { + "display_name": "200µl Filter Tip Rack", + "value": "opentrons_flex_96_filtertiprack_200ul", + }, + { + "display_name": "50µl Filter Tip Rack", + "value": "opentrons_flex_96_filtertiprack_50ul", + }, + { + "display_name": "50µl Standard Tip Rack", + "value": "opentrons_flex_96_tiprack_50ul", + }, + ], + default="opentrons_flex_96_tiprack_1000ul", + description="Select the tip rack type", + ) + + parameters.add_str( + display_name="Pipette Mount", + variable_name="pipette_mount", + choices=[ + {"display_name": "left", "value": "left"}, + {"display_name": "right", "value": "right"}, + ], + default="left", + description="Select the pipette mount.", + ) + + parameters.add_str( + display_name="Reservoir A", + variable_name="reservoir_a_load_name", + choices=reservoir_choices, + default="nest_1_reservoir_290ml", + description="Select the reservoir type", + ) + + parameters.add_str( + display_name="Reservoir B", + variable_name="reservoir_b_load_name", + choices=reservoir_choices, + default="nest_1_reservoir_290ml", + description="Select the reservoir type", + ) + + parameters.add_str( + display_name="Tiprack Position", + variable_name="tiprack_position", + default="B2", + description="Select the position of the tiprack", + choices=position_choices, + ) + + parameters.add_str( + display_name="Reservoir A Position", + variable_name="reservoir_a_position", + default="C1", + description="Select the position of reservoir A", + choices=position_choices, + ) + + parameters.add_str( + display_name="Reservoir B Position", + variable_name="reservoir_b_position", + default="D1", + description="Select the position of reservoir B", + choices=position_choices, + ) + + +####### END RTP DEFINITIONS ####### + + +def set_configure_nozzle_layout(ctx, pipette, tipracks, tip_config): + """Convenience function to set the nozzle layout of a pipette + with the given tip config we have mapped to a RTP.""" + ctx.comment(f"Setting nozzle layout for {pipette}") + ctx.comment(f"Tip config: {tip_config}") + if tip_config.api_end: + pipette.configure_nozzle_layout( + style=tip_config.api_tip_config, start=tip_config.api_start, end=tip_config.api_end, tip_racks=tipracks + ) + else: + pipette.configure_nozzle_layout(style=tip_config.api_tip_config, start=tip_config.api_start, tip_racks=tipracks) + + +def comment_tip_rack_status(ctx, tip_rack): + """ + Print out the tip status for each row in a tip rack. + Each row (A-H) will print the well statuses for columns 1-12 in a single comment, + with a '🟢' for present tips and a '❌' for missing tips. + """ + range_A_to_H = [chr(i) for i in range(ord("A"), ord("H") + 1)] + range_1_to_12 = range(1, 13) + + ctx.comment(f"Tip rack in {tip_rack.parent}") + + for row in range_A_to_H: + status_line = f"{row}: " + for col in range_1_to_12: + well = f"{row}{col}" + has_tip = tip_rack.wells_by_name()[well].has_tip + status_emoji = "🟢" if has_tip else "❌" + status_line += f"{well} {status_emoji} " + + # Print the full status line for the row + ctx.comment(status_line) + + +def run(ctx): + trash = ctx.load_trash_bin("A3") # must load trash bin + # get the key from the parameters + tip_config = find_partial_tip_config(ctx.params.partial_tip_config_key) + pipette_load_name = ctx.params.pipette_load_name + tiprack_load_name = ctx.params.tiprack_load_name + tip_rack_position = ctx.params.tiprack_position + pipette_mount = ctx.params.pipette_mount + reservoir_a_load_name = ctx.params.reservoir_a_load_name + reservoir_b_load_name = ctx.params.reservoir_b_load_name + reservoir_a_position = ctx.params.reservoir_a_position + reservoir_b_position = ctx.params.reservoir_b_position + # print out the tip config + ctx.comment(f"Running with {tip_config}") + ctx.comment(f"Using pipette {pipette_load_name}") + ctx.comment(f"Using tip rack {tiprack_load_name}") + ctx.comment(f"Using pipette mount {pipette_mount}") + ctx.comment(f"Using reservoir A {reservoir_a_load_name}") + ctx.comment(f"Using reservoir B {reservoir_b_load_name}") + ctx.comment(f"Using reservoir A position {reservoir_a_position}") + ctx.comment(f"Using reservoir B position {reservoir_b_position}") + # load the labware + reservoir_a = ctx.load_labware(reservoir_a_load_name, reservoir_a_position) + reservoir_b = ctx.load_labware(reservoir_b_load_name, reservoir_b_position) + # example code on Flex for a pipette + # comment shows we picked up the tips we expected + if tip_config.key == "no_tip_config" and pipette_load_name == "flex_96channel_1000": + tip_rack = ctx.load_labware(tiprack_load_name, tip_rack_position, adapter="opentrons_flex_96_tiprack_adapter") + else: + tip_rack = ctx.load_labware(tiprack_load_name, tip_rack_position) + pipette = ctx.load_instrument(pipette_load_name, pipette_mount) + # use this convenience function to set the nozzle layout + set_configure_nozzle_layout(ctx=ctx, pipette=pipette, tipracks=[tip_rack], tip_config=tip_config) + + def how_much_to_pipette(tiprack_load_name): + if "50" in tiprack_load_name: + return 20 + else: + return 100 + + volume = how_much_to_pipette(tiprack_load_name) + + pipette.pick_up_tip() + comment_tip_rack_status(ctx=ctx, tip_rack=tip_rack) + ctx.comment("aspirate from reservoir A") + pipette.aspirate(volume=volume, location=reservoir_a.wells()[0]) + ctx.comment("dispense to reservoir B") + pipette.dispense(volume=volume, location=reservoir_b.wells()[0]) + ctx.comment("mixing in reservoir B") + pipette.mix(repetitions=3, volume=volume / 2) + ctx.comment("Aspirate from reservoir A") + pipette.aspirate(volume=volume, location=reservoir_a.wells()[0]) + ctx.comment("Blow out in reservoir A") + pipette.blow_out() + ctx.comment("Aspirate from reservoir B") + pipette.aspirate(volume=volume, location=reservoir_b.wells()[0]) + ctx.comment("air_gap with no argument in reservoir B") + pipette.air_gap() + pipette.drop_tip() diff --git a/analyses-snapshot-testing/mypy.ini b/analyses-snapshot-testing/mypy.ini index cab126eb42d..d5e1e97f945 100644 --- a/analyses-snapshot-testing/mypy.ini +++ b/analyses-snapshot-testing/mypy.ini @@ -7,7 +7,7 @@ disallow_any_generics = true check_untyped_defs = true no_implicit_reexport = true exclude = "__init__.py" -python_version = 3.12 +python_version = 3.13 plugins = pydantic.mypy [pydantic-mypy] diff --git a/analyses-snapshot-testing/pyproject.toml b/analyses-snapshot-testing/pyproject.toml index 4d4c9cf166c..9ea01a884cb 100644 --- a/analyses-snapshot-testing/pyproject.toml +++ b/analyses-snapshot-testing/pyproject.toml @@ -1,13 +1,13 @@ [tool.black] line-length = 140 -target-version = ['py312'] +target-version = ['py313'] [tool.ruff] # Like Black line-length = 140 # Like Black indent-width = 4 -target-version = "py312" +target-version = "py313" exclude = ["files"] src = ["*.py", "automation", "tests", "citools"] diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[09676b9f7e][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_south_west].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[09676b9f7e][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_south_west].json new file mode 100644 index 00000000000..2ca289680ef --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[09676b9f7e][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_south_west].json @@ -0,0 +1,1500 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "C2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-1000ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 97.47 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_1000ul", + "tipLength": 88, + "tipOverlap": 7.95 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.24, + "z": 9.47 + }, + "A10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.24, + "z": 9.47 + }, + "A11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.24, + "z": 9.47 + }, + "A12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.24, + "z": 9.47 + }, + "A2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.24, + "z": 9.47 + }, + "A3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.24, + "z": 9.47 + }, + "A4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.24, + "z": 9.47 + }, + "A5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.24, + "z": 9.47 + }, + "A6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.24, + "z": 9.47 + }, + "A7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.24, + "z": 9.47 + }, + "A8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.24, + "z": 9.47 + }, + "A9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.24, + "z": 9.47 + }, + "B1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.24, + "z": 9.47 + }, + "B10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.24, + "z": 9.47 + }, + "B11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.24, + "z": 9.47 + }, + "B12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.24, + "z": 9.47 + }, + "B2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.24, + "z": 9.47 + }, + "B3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.24, + "z": 9.47 + }, + "B4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.24, + "z": 9.47 + }, + "B5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.24, + "z": 9.47 + }, + "B6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.24, + "z": 9.47 + }, + "B7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.24, + "z": 9.47 + }, + "B8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.24, + "z": 9.47 + }, + "B9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.24, + "z": 9.47 + }, + "C1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.24, + "z": 9.47 + }, + "C10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.24, + "z": 9.47 + }, + "C11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.24, + "z": 9.47 + }, + "C12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.24, + "z": 9.47 + }, + "C2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.24, + "z": 9.47 + }, + "C3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.24, + "z": 9.47 + }, + "C4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.24, + "z": 9.47 + }, + "C5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.24, + "z": 9.47 + }, + "C6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.24, + "z": 9.47 + }, + "C7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.24, + "z": 9.47 + }, + "C8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.24, + "z": 9.47 + }, + "C9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.24, + "z": 9.47 + }, + "D1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.24, + "z": 9.47 + }, + "D10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.24, + "z": 9.47 + }, + "D11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.24, + "z": 9.47 + }, + "D12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.24, + "z": 9.47 + }, + "D2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.24, + "z": 9.47 + }, + "D3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.24, + "z": 9.47 + }, + "D4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.24, + "z": 9.47 + }, + "D5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.24, + "z": 9.47 + }, + "D6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.24, + "z": 9.47 + }, + "D7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.24, + "z": 9.47 + }, + "D8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.24, + "z": 9.47 + }, + "D9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.24, + "z": 9.47 + }, + "E1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.24, + "z": 9.47 + }, + "E10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.24, + "z": 9.47 + }, + "E11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.24, + "z": 9.47 + }, + "E12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.24, + "z": 9.47 + }, + "E2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.24, + "z": 9.47 + }, + "E3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.24, + "z": 9.47 + }, + "E4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.24, + "z": 9.47 + }, + "E5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.24, + "z": 9.47 + }, + "E6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.24, + "z": 9.47 + }, + "E7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.24, + "z": 9.47 + }, + "E8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.24, + "z": 9.47 + }, + "E9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.24, + "z": 9.47 + }, + "F1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.24, + "z": 9.47 + }, + "F10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.24, + "z": 9.47 + }, + "F11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.24, + "z": 9.47 + }, + "F12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.24, + "z": 9.47 + }, + "F2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.24, + "z": 9.47 + }, + "F3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.24, + "z": 9.47 + }, + "F4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.24, + "z": 9.47 + }, + "F5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.24, + "z": 9.47 + }, + "F6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.24, + "z": 9.47 + }, + "F7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.24, + "z": 9.47 + }, + "F8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.24, + "z": 9.47 + }, + "F9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.24, + "z": 9.47 + }, + "G1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.24, + "z": 9.47 + }, + "G10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.24, + "z": 9.47 + }, + "G11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.24, + "z": 9.47 + }, + "G12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.24, + "z": 9.47 + }, + "G2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.24, + "z": 9.47 + }, + "G3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.24, + "z": 9.47 + }, + "G4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.24, + "z": 9.47 + }, + "G5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.24, + "z": 9.47 + }, + "G6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.24, + "z": 9.47 + }, + "G7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.24, + "z": 9.47 + }, + "G8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.24, + "z": 9.47 + }, + "G9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.24, + "z": 9.47 + }, + "H1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.24, + "z": 9.47 + }, + "H10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.24, + "z": 9.47 + }, + "H11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.24, + "z": 9.47 + }, + "H12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.24, + "z": 9.47 + }, + "H2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.24, + "z": 9.47 + }, + "H3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.24, + "z": 9.47 + }, + "H4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.24, + "z": 9.47 + }, + "H5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.24, + "z": 9.47 + }, + "H6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.24, + "z": 9.47 + }, + "H7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.24, + "z": 9.47 + }, + "H8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.24, + "z": 9.47 + }, + "H9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.24, + "z": 9.47 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A12", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "691afd54dfa7982fb89e5f77c763bfd4", + "notes": [], + "params": { + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "D1" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 124.35 + }, + "gripperOffsets": {}, + "groups": [ + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352095", + "352096", + "352097", + "352099", + "352196" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 6x15 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A2", + "B1", + "B2", + "C1", + "C2" + ] + }, + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352070", + "352098" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 4x50 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A3", + "A4", + "B3", + "B4" + ] + } + ], + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Opentrons 10 Tube Rack with Falcon 4x50 mL, 6x15 mL Conical", + "displayVolumeUnits": "mL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1" + ], + [ + "A2", + "B2", + "C2" + ], + [ + "A3", + "B3" + ], + [ + "A4", + "B4" + ] + ], + "parameters": { + "format": "irregular", + "isMagneticModuleCompatible": false, + "isTiprack": false, + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical" + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 67.75, + "z": 6.85 + }, + "A2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 67.75, + "z": 6.85 + }, + "A3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 60.25, + "z": 7.3 + }, + "A4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 60.25, + "z": 7.3 + }, + "B1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 42.75, + "z": 6.85 + }, + "B2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 42.75, + "z": 6.85 + }, + "B3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 25.25, + "z": 7.3 + }, + "B4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 25.25, + "z": 7.3 + }, + "C1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 17.75, + "z": 6.85 + }, + "C2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 17.75, + "z": 6.85 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "PartialTipMovementNotAllowedError [line 479]: Error 2004 MOTION_PLANNING_FAILURE (PartialTipMovementNotAllowedError): Moving to Opentrons OT-2 96 Tip Rack 1000 µL in slot C2 with A12 nozzle partial configuration will result in collision with items in deck slot D1.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "Moving to Opentrons OT-2 96 Tip Rack 1000 µL in slot C2 with A12 nozzle partial configuration will result in collision with items in deck slot D1.", + "errorCode": "2004", + "errorInfo": {}, + "errorType": "PartialTipMovementNotAllowedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_south_west.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "C2" + } + }, + { + "definitionUri": "opentrons/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/1", + "id": "UUID", + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "D1" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Too tall labware on pickup tip" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_96" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[0b42cfc151][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_north_row].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[0b42cfc151][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_north_row].json new file mode 100644 index 00000000000..dfef8b35364 --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[0b42cfc151][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_north_row].json @@ -0,0 +1,1500 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "C2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-1000ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 97.47 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_1000ul", + "tipLength": 88, + "tipOverlap": 7.95 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.24, + "z": 9.47 + }, + "A10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.24, + "z": 9.47 + }, + "A11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.24, + "z": 9.47 + }, + "A12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.24, + "z": 9.47 + }, + "A2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.24, + "z": 9.47 + }, + "A3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.24, + "z": 9.47 + }, + "A4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.24, + "z": 9.47 + }, + "A5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.24, + "z": 9.47 + }, + "A6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.24, + "z": 9.47 + }, + "A7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.24, + "z": 9.47 + }, + "A8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.24, + "z": 9.47 + }, + "A9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.24, + "z": 9.47 + }, + "B1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.24, + "z": 9.47 + }, + "B10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.24, + "z": 9.47 + }, + "B11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.24, + "z": 9.47 + }, + "B12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.24, + "z": 9.47 + }, + "B2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.24, + "z": 9.47 + }, + "B3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.24, + "z": 9.47 + }, + "B4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.24, + "z": 9.47 + }, + "B5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.24, + "z": 9.47 + }, + "B6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.24, + "z": 9.47 + }, + "B7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.24, + "z": 9.47 + }, + "B8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.24, + "z": 9.47 + }, + "B9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.24, + "z": 9.47 + }, + "C1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.24, + "z": 9.47 + }, + "C10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.24, + "z": 9.47 + }, + "C11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.24, + "z": 9.47 + }, + "C12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.24, + "z": 9.47 + }, + "C2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.24, + "z": 9.47 + }, + "C3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.24, + "z": 9.47 + }, + "C4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.24, + "z": 9.47 + }, + "C5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.24, + "z": 9.47 + }, + "C6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.24, + "z": 9.47 + }, + "C7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.24, + "z": 9.47 + }, + "C8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.24, + "z": 9.47 + }, + "C9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.24, + "z": 9.47 + }, + "D1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.24, + "z": 9.47 + }, + "D10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.24, + "z": 9.47 + }, + "D11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.24, + "z": 9.47 + }, + "D12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.24, + "z": 9.47 + }, + "D2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.24, + "z": 9.47 + }, + "D3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.24, + "z": 9.47 + }, + "D4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.24, + "z": 9.47 + }, + "D5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.24, + "z": 9.47 + }, + "D6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.24, + "z": 9.47 + }, + "D7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.24, + "z": 9.47 + }, + "D8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.24, + "z": 9.47 + }, + "D9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.24, + "z": 9.47 + }, + "E1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.24, + "z": 9.47 + }, + "E10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.24, + "z": 9.47 + }, + "E11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.24, + "z": 9.47 + }, + "E12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.24, + "z": 9.47 + }, + "E2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.24, + "z": 9.47 + }, + "E3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.24, + "z": 9.47 + }, + "E4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.24, + "z": 9.47 + }, + "E5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.24, + "z": 9.47 + }, + "E6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.24, + "z": 9.47 + }, + "E7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.24, + "z": 9.47 + }, + "E8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.24, + "z": 9.47 + }, + "E9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.24, + "z": 9.47 + }, + "F1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.24, + "z": 9.47 + }, + "F10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.24, + "z": 9.47 + }, + "F11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.24, + "z": 9.47 + }, + "F12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.24, + "z": 9.47 + }, + "F2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.24, + "z": 9.47 + }, + "F3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.24, + "z": 9.47 + }, + "F4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.24, + "z": 9.47 + }, + "F5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.24, + "z": 9.47 + }, + "F6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.24, + "z": 9.47 + }, + "F7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.24, + "z": 9.47 + }, + "F8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.24, + "z": 9.47 + }, + "F9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.24, + "z": 9.47 + }, + "G1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.24, + "z": 9.47 + }, + "G10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.24, + "z": 9.47 + }, + "G11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.24, + "z": 9.47 + }, + "G12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.24, + "z": 9.47 + }, + "G2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.24, + "z": 9.47 + }, + "G3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.24, + "z": 9.47 + }, + "G4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.24, + "z": 9.47 + }, + "G5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.24, + "z": 9.47 + }, + "G6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.24, + "z": 9.47 + }, + "G7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.24, + "z": 9.47 + }, + "G8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.24, + "z": 9.47 + }, + "G9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.24, + "z": 9.47 + }, + "H1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.24, + "z": 9.47 + }, + "H10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.24, + "z": 9.47 + }, + "H11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.24, + "z": 9.47 + }, + "H12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.24, + "z": 9.47 + }, + "H2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.24, + "z": 9.47 + }, + "H3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.24, + "z": 9.47 + }, + "H4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.24, + "z": 9.47 + }, + "H5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.24, + "z": 9.47 + }, + "H6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.24, + "z": 9.47 + }, + "H7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.24, + "z": 9.47 + }, + "H8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.24, + "z": 9.47 + }, + "H9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.24, + "z": 9.47 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "H1", + "style": "ROW" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "691afd54dfa7982fb89e5f77c763bfd4", + "notes": [], + "params": { + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "B2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 124.35 + }, + "gripperOffsets": {}, + "groups": [ + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352095", + "352096", + "352097", + "352099", + "352196" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 6x15 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A2", + "B1", + "B2", + "C1", + "C2" + ] + }, + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352070", + "352098" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 4x50 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A3", + "A4", + "B3", + "B4" + ] + } + ], + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Opentrons 10 Tube Rack with Falcon 4x50 mL, 6x15 mL Conical", + "displayVolumeUnits": "mL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1" + ], + [ + "A2", + "B2", + "C2" + ], + [ + "A3", + "B3" + ], + [ + "A4", + "B4" + ] + ], + "parameters": { + "format": "irregular", + "isMagneticModuleCompatible": false, + "isTiprack": false, + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical" + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 67.75, + "z": 6.85 + }, + "A2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 67.75, + "z": 6.85 + }, + "A3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 60.25, + "z": 7.3 + }, + "A4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 60.25, + "z": 7.3 + }, + "B1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 42.75, + "z": 6.85 + }, + "B2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 42.75, + "z": 6.85 + }, + "B3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 25.25, + "z": 7.3 + }, + "B4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 25.25, + "z": 7.3 + }, + "C1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 17.75, + "z": 6.85 + }, + "C2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 17.75, + "z": 6.85 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "PartialTipMovementNotAllowedError [line 479]: Error 2004 MOTION_PLANNING_FAILURE (PartialTipMovementNotAllowedError): Moving to Opentrons OT-2 96 Tip Rack 1000 µL in slot C2 with H1 nozzle partial configuration will result in collision with items in deck slot B2.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "Moving to Opentrons OT-2 96 Tip Rack 1000 µL in slot C2 with H1 nozzle partial configuration will result in collision with items in deck slot B2.", + "errorCode": "2004", + "errorInfo": {}, + "errorType": "PartialTipMovementNotAllowedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_north_row.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "C2" + } + }, + { + "definitionUri": "opentrons/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/1", + "id": "UUID", + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "B2" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Too tall labware on pickup tip" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_96" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[109b7ad1f0][Flex_S_v2_20_96_None_ROW_HappyPath].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[109b7ad1f0][Flex_S_v2_20_96_None_ROW_HappyPath].json new file mode 100644 index 00000000000..a4a41ed8193 --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[109b7ad1f0][Flex_S_v2_20_96_None_ROW_HappyPath].json @@ -0,0 +1,6224 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "displayName": "Partial Tip Rack", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "B1" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.75, + "zDimension": 99 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 23.9, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons Flex 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_flex_96_tiprack_1000ul", + "quirks": [], + "tipLength": 95.6, + "tipOverlap": 10.5 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 121 + } + }, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.38, + "z": 1.5 + }, + "A10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.38, + "z": 1.5 + }, + "A11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.38, + "z": 1.5 + }, + "A12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.38, + "z": 1.5 + }, + "A2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.38, + "z": 1.5 + }, + "A3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.38, + "z": 1.5 + }, + "A4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.38, + "z": 1.5 + }, + "A5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.38, + "z": 1.5 + }, + "A6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.38, + "z": 1.5 + }, + "A7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.38, + "z": 1.5 + }, + "A8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.38, + "z": 1.5 + }, + "A9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.38, + "z": 1.5 + }, + "B1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.38, + "z": 1.5 + }, + "B10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.38, + "z": 1.5 + }, + "B11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.38, + "z": 1.5 + }, + "B12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.38, + "z": 1.5 + }, + "B2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.38, + "z": 1.5 + }, + "B3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.38, + "z": 1.5 + }, + "B4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.38, + "z": 1.5 + }, + "B5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.38, + "z": 1.5 + }, + "B6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.38, + "z": 1.5 + }, + "B7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.38, + "z": 1.5 + }, + "B8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.38, + "z": 1.5 + }, + "B9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.38, + "z": 1.5 + }, + "C1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.38, + "z": 1.5 + }, + "C10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.38, + "z": 1.5 + }, + "C11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.38, + "z": 1.5 + }, + "C12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.38, + "z": 1.5 + }, + "C2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.38, + "z": 1.5 + }, + "C3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.38, + "z": 1.5 + }, + "C4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.38, + "z": 1.5 + }, + "C5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.38, + "z": 1.5 + }, + "C6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.38, + "z": 1.5 + }, + "C7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.38, + "z": 1.5 + }, + "C8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.38, + "z": 1.5 + }, + "C9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.38, + "z": 1.5 + }, + "D1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.38, + "z": 1.5 + }, + "D10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.38, + "z": 1.5 + }, + "D11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.38, + "z": 1.5 + }, + "D12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.38, + "z": 1.5 + }, + "D2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.38, + "z": 1.5 + }, + "D3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.38, + "z": 1.5 + }, + "D4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.38, + "z": 1.5 + }, + "D5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.38, + "z": 1.5 + }, + "D6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.38, + "z": 1.5 + }, + "D7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.38, + "z": 1.5 + }, + "D8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.38, + "z": 1.5 + }, + "D9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.38, + "z": 1.5 + }, + "E1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.38, + "z": 1.5 + }, + "E10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.38, + "z": 1.5 + }, + "E11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.38, + "z": 1.5 + }, + "E12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.38, + "z": 1.5 + }, + "E2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.38, + "z": 1.5 + }, + "E3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.38, + "z": 1.5 + }, + "E4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.38, + "z": 1.5 + }, + "E5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.38, + "z": 1.5 + }, + "E6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.38, + "z": 1.5 + }, + "E7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.38, + "z": 1.5 + }, + "E8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.38, + "z": 1.5 + }, + "E9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.38, + "z": 1.5 + }, + "F1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.38, + "z": 1.5 + }, + "F10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.38, + "z": 1.5 + }, + "F11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.38, + "z": 1.5 + }, + "F12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.38, + "z": 1.5 + }, + "F2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.38, + "z": 1.5 + }, + "F3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.38, + "z": 1.5 + }, + "F4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.38, + "z": 1.5 + }, + "F5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.38, + "z": 1.5 + }, + "F6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.38, + "z": 1.5 + }, + "F7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.38, + "z": 1.5 + }, + "F8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.38, + "z": 1.5 + }, + "F9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.38, + "z": 1.5 + }, + "G1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.38, + "z": 1.5 + }, + "G10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.38, + "z": 1.5 + }, + "G11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.38, + "z": 1.5 + }, + "G12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.38, + "z": 1.5 + }, + "G2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.38, + "z": 1.5 + }, + "G3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.38, + "z": 1.5 + }, + "G4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.38, + "z": 1.5 + }, + "G5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.38, + "z": 1.5 + }, + "G6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.38, + "z": 1.5 + }, + "G7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.38, + "z": 1.5 + }, + "G8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.38, + "z": 1.5 + }, + "G9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.38, + "z": 1.5 + }, + "H1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.38, + "z": 1.5 + }, + "H10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.38, + "z": 1.5 + }, + "H11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.38, + "z": 1.5 + }, + "H12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.38, + "z": 1.5 + }, + "H2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.38, + "z": 1.5 + }, + "H3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.38, + "z": 1.5 + }, + "H4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.38, + "z": 1.5 + }, + "H5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.38, + "z": 1.5 + }, + "H6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.38, + "z": 1.5 + }, + "H7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.38, + "z": 1.5 + }, + "H8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.38, + "z": 1.5 + }, + "H9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.38, + "z": 1.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A1", + "style": "ROW" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "691afd54dfa7982fb89e5f77c763bfd4", + "notes": [], + "params": { + "displayName": "Liquid Transfer - Source Labware", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "C2" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c910be62291bb94458a59cb4185c5180", + "notes": [], + "params": { + "displayName": "Liquid Transfer - Destination Labware", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "C3" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2f59e0552969594ba6ab06f03af324e1", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H1" + }, + "result": { + "position": { + "x": 14.38, + "y": 225.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6b0053809cc5ea894449b20181bda1d6", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 178.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1c921a50baabd805b1ee8fa0e85c6682", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 342.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "75aa0b5116a9eba713b68a3850e26391", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "34f14498853a691a86c6e51955a923f5", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "92f6d16db82fc47bbd830b87c04cf587", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 14.38, + "y": 234.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "touchTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d4506d1b80c117247379fd1da0cdd540", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "radius": 1.0, + "speed": 60.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -1.0 + }, + "origin": "top" + }, + "wellName": "B1" + }, + "result": { + "position": { + "x": 178.38, + "y": 172.24, + "z": 14.7 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b6c0a6862c1e869c974d3bbf491b2f77", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "239bbe2e12ee55487024bc01a20c71b9", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ccd85f84c2d5a9969bce2957cc8ea1f1", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F1" + }, + "result": { + "position": { + "x": 14.38, + "y": 243.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c603a57fd9bba99db45ecb759ed91041", + "notes": [], + "params": { + "axes": [ + "leftPlunger", + "leftZ" + ] + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "615a33e51b3fb8d9a7c25fc4e3f6a04d", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3fcbc107a2ddb8aef2be961108add200", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e9ce054762d4edc21b2b4c74b3a264cb", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E1" + }, + "result": { + "position": { + "x": 14.38, + "y": 252.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a0f88d95e77f51e86818cb9e324a7006", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 154.24, + "z": 2.92 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7ed7eaaa162b89d760f55d949352464b", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "23eb3478c9444fcf3001ecb326f15411", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "34c3afeaf56af250ec42af0751995669", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "45d2cde26215d9e311e7f9745228d93c", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f3e7a78d7da267bc877af3a8bc8d8de3", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b5b355ee01907f745c80f2350c8e3e31", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dc872d009459778cbbf93fd8edfa4ef6", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ac0822a34f4d47ffb4989a5f63bfab59", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4e4778958eeb399df7ed9910c6d52431", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3bd5afcf7db6fd3db5480254738264d9", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "331962de59fdeac6a9ecfc21dcda5cac", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "457dec90436799e13fcbb6ffdde3859f", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a835d08fcbabe71ad357dcdafa9632c4", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d6e6d0dcaa50989719d4265d3fb9aaaf", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d92475e5e072d6961fe38612564b2d31", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0129acc2b378f88a55ba77758eb3ed02", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0354a7d87886f9008260cf75347b2452", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "93e0f4ac6e51c80ff19bfe60dc97542b", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c3bedc4720be98d3ed4a3c1734854d6a", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "29bfc3397bb9f9430b9f2f59288a540c", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7d6c3bf51293b3fee38ca9a4e44f6cfd", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 5.0000000000000036 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 154.24, + "z": 20.700000000000003 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a7d6a6a0fddaf753a629565eb4d912a3", + "notes": [], + "params": { + "flowRate": 80.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 5.0000000000000036 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 154.24, + "z": 20.700000000000003 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "prepareToAspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1654457443c6f75e15e311f0543fc66f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9911036ea844c7a6ba90923698fc224e", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 154.24, + "z": 2.92 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c3188c7feb06653501f6bf397a131dc8", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1943586caa4c85679a9ae04821c2d38a", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9579bd2d4199b9920413263739ef30ed", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4f2dfd5aa4da5e2a45a3f3b692227df5", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e50910ece222b51bd908e743c6bf7804", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "H1", + "style": "ROW" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5a00693acdb90f3631535748d93a8223", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 14.38, + "y": 288.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b782827466e82f28c3969485a65f3fe2", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "E1" + }, + "result": { + "position": { + "x": 178.38, + "y": 145.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "32989d99a33a00680804e9fc9fc2804b", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "E1" + }, + "result": { + "position": { + "x": 342.38, + "y": 145.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ba2c5376c66ec84d18a9a8585e95d9d9", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "252f2c9c7e1a96f8a4c8cc7eeff8fbdf", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ec32821a6c616dea97d3d2b4f59e1cd4", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B1" + }, + "result": { + "position": { + "x": 14.38, + "y": 279.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "touchTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dc740b4cde605ccfc143bd6b2dc65f7b", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "radius": 1.0, + "speed": 60.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -1.0 + }, + "origin": "top" + }, + "wellName": "F1" + }, + "result": { + "position": { + "x": 178.38, + "y": 136.24, + "z": 14.7 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d8894bf3d181e7ea041a675ae0eeb074", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3438f69dae7bf7c63c3caf25b1c0af6f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "36fce93206223fa6086fc3958b91de53", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C1" + }, + "result": { + "position": { + "x": 14.38, + "y": 270.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0f96ea2f581e7da13b2920758720217c", + "notes": [], + "params": { + "axes": [ + "leftPlunger", + "leftZ" + ] + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "052f6060ce6e871a6a65936ec86cd64e", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ba2b5012fff1efcc43be440738b96812", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "be37ed68d97eb27cdaa9f28b458c84cb", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 261.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c484812021d17a80f73bf5376416ff93", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 178.38, + "y": 127.24, + "z": 2.92 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "abeb19b3de05703b3e0ec8b69735094c", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 178.38, + "y": 127.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cf5afad6cb0e55ff82bf41cbb61278f9", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 178.38, + "y": 127.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "abc3039f932b9588a796a3d2844da6bc", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 178.38, + "y": 127.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8231c70a38e5e9514386c43272b24b3b", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 178.38, + "y": 127.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a9b22d17829464f4fc6f8bda7be4e82b", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 178.38, + "y": 127.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d2d5e3037bdb3057f4ac220c39d9968e", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 178.38, + "y": 127.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bbd96dd68d79179af153ef884b3430da", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 178.38, + "y": 127.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8c5b08c533f9c792b534a3231d054fa3", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 178.38, + "y": 127.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5f47db85c4a26fad793ff0bd71056e8f", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 178.38, + "y": 127.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f8c9b70248e4087475baa0ea41b7a8f2", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 178.38, + "y": 127.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a258c594b3064208d6b6a8c304dbe002", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 178.38, + "y": 127.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9fc7b604becb670c1c2bcc718b191072", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 178.38, + "y": 127.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "feaf07c0bf3861b566e4ab6bc54bc632", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 178.38, + "y": 127.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4b61daf27e7e1a5d020fc247827adafe", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 178.38, + "y": 127.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cd870b78d981e980bd5ca0c179487646", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 178.38, + "y": 127.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bff9cf8246b58f1bdbbb16ca3dc12d80", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 178.38, + "y": 127.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3d02ddc2c5fa9cfe85e9b0459595940e", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 178.38, + "y": 127.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c8b8e1fb79a8c8c22ea041fe1d30fe06", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 178.38, + "y": 127.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c960ea23d531567b5131f108b07f280d", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 178.38, + "y": 127.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3a0eadb753166ea07bd95887ffca1ef1", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 178.38, + "y": 127.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5fe73007151bae4924c6c6c55ef663b0", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 5.0000000000000036 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 178.38, + "y": 127.24, + "z": 20.700000000000003 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "88544514bc37e481edb0e05e76e088bb", + "notes": [], + "params": { + "flowRate": 80.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 5.0000000000000036 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 178.38, + "y": 127.24, + "z": 20.700000000000003 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "prepareToAspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2228ebb5354fb6841543953901ad0caf", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "25e7036b1ceb4c316002632bcb52134b", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 178.38, + "y": 127.24, + "z": 2.92 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a261b02a0248d089146924e44691411b", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 178.38, + "y": 127.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "19a48a90466241d64935c5a55b23fbea", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 178.38, + "y": 127.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "263dd8836ac5c6cff37fff2ef09bf09e", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "33d098affbd40500bc8579d4995dad56", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [], + "files": [ + { + "name": "Flex_S_v2_20_96_None_ROW_HappyPath.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_flex_96_tiprack_1000ul/1", + "displayName": "Partial Tip Rack", + "id": "UUID", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "B1" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "displayName": "Liquid Transfer - Source Labware", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "C2" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "displayName": "Liquid Transfer - Destination Labware", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "C3" + } + } + ], + "liquids": [], + "metadata": { + "description": "96 channel pipette and a ROW partial tip configuration.", + "protocolName": "96Channel ROW Happy Path" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_96" + } + ], + "result": "ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[10c2386b92][Flex_S_v2_20_96_AllCorners].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[10c2386b92][Flex_S_v2_20_96_AllCorners].json new file mode 100644 index 00000000000..f7457a3c48d --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[10c2386b92][Flex_S_v2_20_96_AllCorners].json @@ -0,0 +1,33713 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0c3bb3b5f63458c1ff149d26e64d98b5", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "80976ce3dffe6efe69a8b26c3c4a1f4b", + "notes": [], + "params": { + "displayName": "A1 Corner Tiprack 1", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "B1" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.75, + "zDimension": 99 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 23.9, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons Flex 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_flex_96_tiprack_1000ul", + "quirks": [], + "tipLength": 95.6, + "tipOverlap": 10.5 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 121 + } + }, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.38, + "z": 1.5 + }, + "A10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.38, + "z": 1.5 + }, + "A11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.38, + "z": 1.5 + }, + "A12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.38, + "z": 1.5 + }, + "A2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.38, + "z": 1.5 + }, + "A3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.38, + "z": 1.5 + }, + "A4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.38, + "z": 1.5 + }, + "A5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.38, + "z": 1.5 + }, + "A6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.38, + "z": 1.5 + }, + "A7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.38, + "z": 1.5 + }, + "A8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.38, + "z": 1.5 + }, + "A9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.38, + "z": 1.5 + }, + "B1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.38, + "z": 1.5 + }, + "B10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.38, + "z": 1.5 + }, + "B11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.38, + "z": 1.5 + }, + "B12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.38, + "z": 1.5 + }, + "B2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.38, + "z": 1.5 + }, + "B3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.38, + "z": 1.5 + }, + "B4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.38, + "z": 1.5 + }, + "B5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.38, + "z": 1.5 + }, + "B6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.38, + "z": 1.5 + }, + "B7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.38, + "z": 1.5 + }, + "B8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.38, + "z": 1.5 + }, + "B9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.38, + "z": 1.5 + }, + "C1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.38, + "z": 1.5 + }, + "C10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.38, + "z": 1.5 + }, + "C11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.38, + "z": 1.5 + }, + "C12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.38, + "z": 1.5 + }, + "C2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.38, + "z": 1.5 + }, + "C3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.38, + "z": 1.5 + }, + "C4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.38, + "z": 1.5 + }, + "C5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.38, + "z": 1.5 + }, + "C6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.38, + "z": 1.5 + }, + "C7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.38, + "z": 1.5 + }, + "C8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.38, + "z": 1.5 + }, + "C9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.38, + "z": 1.5 + }, + "D1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.38, + "z": 1.5 + }, + "D10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.38, + "z": 1.5 + }, + "D11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.38, + "z": 1.5 + }, + "D12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.38, + "z": 1.5 + }, + "D2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.38, + "z": 1.5 + }, + "D3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.38, + "z": 1.5 + }, + "D4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.38, + "z": 1.5 + }, + "D5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.38, + "z": 1.5 + }, + "D6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.38, + "z": 1.5 + }, + "D7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.38, + "z": 1.5 + }, + "D8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.38, + "z": 1.5 + }, + "D9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.38, + "z": 1.5 + }, + "E1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.38, + "z": 1.5 + }, + "E10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.38, + "z": 1.5 + }, + "E11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.38, + "z": 1.5 + }, + "E12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.38, + "z": 1.5 + }, + "E2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.38, + "z": 1.5 + }, + "E3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.38, + "z": 1.5 + }, + "E4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.38, + "z": 1.5 + }, + "E5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.38, + "z": 1.5 + }, + "E6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.38, + "z": 1.5 + }, + "E7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.38, + "z": 1.5 + }, + "E8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.38, + "z": 1.5 + }, + "E9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.38, + "z": 1.5 + }, + "F1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.38, + "z": 1.5 + }, + "F10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.38, + "z": 1.5 + }, + "F11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.38, + "z": 1.5 + }, + "F12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.38, + "z": 1.5 + }, + "F2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.38, + "z": 1.5 + }, + "F3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.38, + "z": 1.5 + }, + "F4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.38, + "z": 1.5 + }, + "F5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.38, + "z": 1.5 + }, + "F6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.38, + "z": 1.5 + }, + "F7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.38, + "z": 1.5 + }, + "F8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.38, + "z": 1.5 + }, + "F9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.38, + "z": 1.5 + }, + "G1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.38, + "z": 1.5 + }, + "G10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.38, + "z": 1.5 + }, + "G11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.38, + "z": 1.5 + }, + "G12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.38, + "z": 1.5 + }, + "G2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.38, + "z": 1.5 + }, + "G3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.38, + "z": 1.5 + }, + "G4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.38, + "z": 1.5 + }, + "G5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.38, + "z": 1.5 + }, + "G6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.38, + "z": 1.5 + }, + "G7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.38, + "z": 1.5 + }, + "G8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.38, + "z": 1.5 + }, + "G9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.38, + "z": 1.5 + }, + "H1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.38, + "z": 1.5 + }, + "H10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.38, + "z": 1.5 + }, + "H11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.38, + "z": 1.5 + }, + "H12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.38, + "z": 1.5 + }, + "H2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.38, + "z": 1.5 + }, + "H3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.38, + "z": 1.5 + }, + "H4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.38, + "z": 1.5 + }, + "H5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.38, + "z": 1.5 + }, + "H6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.38, + "z": 1.5 + }, + "H7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.38, + "z": 1.5 + }, + "H8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.38, + "z": 1.5 + }, + "H9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.38, + "z": 1.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d89b7e852badd592f2c16cd019f596b5", + "notes": [], + "params": { + "displayName": "D1 Corner Tiprack", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "C1" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.75, + "zDimension": 99 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 23.9, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons Flex 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_flex_96_tiprack_1000ul", + "quirks": [], + "tipLength": 95.6, + "tipOverlap": 10.5 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 121 + } + }, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.38, + "z": 1.5 + }, + "A10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.38, + "z": 1.5 + }, + "A11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.38, + "z": 1.5 + }, + "A12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.38, + "z": 1.5 + }, + "A2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.38, + "z": 1.5 + }, + "A3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.38, + "z": 1.5 + }, + "A4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.38, + "z": 1.5 + }, + "A5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.38, + "z": 1.5 + }, + "A6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.38, + "z": 1.5 + }, + "A7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.38, + "z": 1.5 + }, + "A8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.38, + "z": 1.5 + }, + "A9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.38, + "z": 1.5 + }, + "B1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.38, + "z": 1.5 + }, + "B10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.38, + "z": 1.5 + }, + "B11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.38, + "z": 1.5 + }, + "B12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.38, + "z": 1.5 + }, + "B2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.38, + "z": 1.5 + }, + "B3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.38, + "z": 1.5 + }, + "B4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.38, + "z": 1.5 + }, + "B5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.38, + "z": 1.5 + }, + "B6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.38, + "z": 1.5 + }, + "B7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.38, + "z": 1.5 + }, + "B8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.38, + "z": 1.5 + }, + "B9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.38, + "z": 1.5 + }, + "C1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.38, + "z": 1.5 + }, + "C10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.38, + "z": 1.5 + }, + "C11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.38, + "z": 1.5 + }, + "C12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.38, + "z": 1.5 + }, + "C2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.38, + "z": 1.5 + }, + "C3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.38, + "z": 1.5 + }, + "C4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.38, + "z": 1.5 + }, + "C5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.38, + "z": 1.5 + }, + "C6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.38, + "z": 1.5 + }, + "C7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.38, + "z": 1.5 + }, + "C8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.38, + "z": 1.5 + }, + "C9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.38, + "z": 1.5 + }, + "D1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.38, + "z": 1.5 + }, + "D10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.38, + "z": 1.5 + }, + "D11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.38, + "z": 1.5 + }, + "D12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.38, + "z": 1.5 + }, + "D2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.38, + "z": 1.5 + }, + "D3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.38, + "z": 1.5 + }, + "D4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.38, + "z": 1.5 + }, + "D5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.38, + "z": 1.5 + }, + "D6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.38, + "z": 1.5 + }, + "D7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.38, + "z": 1.5 + }, + "D8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.38, + "z": 1.5 + }, + "D9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.38, + "z": 1.5 + }, + "E1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.38, + "z": 1.5 + }, + "E10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.38, + "z": 1.5 + }, + "E11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.38, + "z": 1.5 + }, + "E12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.38, + "z": 1.5 + }, + "E2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.38, + "z": 1.5 + }, + "E3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.38, + "z": 1.5 + }, + "E4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.38, + "z": 1.5 + }, + "E5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.38, + "z": 1.5 + }, + "E6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.38, + "z": 1.5 + }, + "E7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.38, + "z": 1.5 + }, + "E8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.38, + "z": 1.5 + }, + "E9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.38, + "z": 1.5 + }, + "F1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.38, + "z": 1.5 + }, + "F10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.38, + "z": 1.5 + }, + "F11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.38, + "z": 1.5 + }, + "F12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.38, + "z": 1.5 + }, + "F2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.38, + "z": 1.5 + }, + "F3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.38, + "z": 1.5 + }, + "F4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.38, + "z": 1.5 + }, + "F5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.38, + "z": 1.5 + }, + "F6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.38, + "z": 1.5 + }, + "F7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.38, + "z": 1.5 + }, + "F8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.38, + "z": 1.5 + }, + "F9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.38, + "z": 1.5 + }, + "G1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.38, + "z": 1.5 + }, + "G10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.38, + "z": 1.5 + }, + "G11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.38, + "z": 1.5 + }, + "G12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.38, + "z": 1.5 + }, + "G2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.38, + "z": 1.5 + }, + "G3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.38, + "z": 1.5 + }, + "G4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.38, + "z": 1.5 + }, + "G5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.38, + "z": 1.5 + }, + "G6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.38, + "z": 1.5 + }, + "G7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.38, + "z": 1.5 + }, + "G8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.38, + "z": 1.5 + }, + "G9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.38, + "z": 1.5 + }, + "H1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.38, + "z": 1.5 + }, + "H10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.38, + "z": 1.5 + }, + "H11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.38, + "z": 1.5 + }, + "H12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.38, + "z": 1.5 + }, + "H2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.38, + "z": 1.5 + }, + "H3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.38, + "z": 1.5 + }, + "H4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.38, + "z": 1.5 + }, + "H5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.38, + "z": 1.5 + }, + "H6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.38, + "z": 1.5 + }, + "H7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.38, + "z": 1.5 + }, + "H8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.38, + "z": 1.5 + }, + "H9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.38, + "z": 1.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "440fd5d4d25f78376014c66392a18e38", + "notes": [], + "params": { + "displayName": "A3 Corner Tiprack 1", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "B2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.75, + "zDimension": 99 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 23.9, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons Flex 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_flex_96_tiprack_1000ul", + "quirks": [], + "tipLength": 95.6, + "tipOverlap": 10.5 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 121 + } + }, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.38, + "z": 1.5 + }, + "A10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.38, + "z": 1.5 + }, + "A11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.38, + "z": 1.5 + }, + "A12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.38, + "z": 1.5 + }, + "A2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.38, + "z": 1.5 + }, + "A3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.38, + "z": 1.5 + }, + "A4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.38, + "z": 1.5 + }, + "A5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.38, + "z": 1.5 + }, + "A6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.38, + "z": 1.5 + }, + "A7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.38, + "z": 1.5 + }, + "A8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.38, + "z": 1.5 + }, + "A9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.38, + "z": 1.5 + }, + "B1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.38, + "z": 1.5 + }, + "B10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.38, + "z": 1.5 + }, + "B11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.38, + "z": 1.5 + }, + "B12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.38, + "z": 1.5 + }, + "B2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.38, + "z": 1.5 + }, + "B3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.38, + "z": 1.5 + }, + "B4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.38, + "z": 1.5 + }, + "B5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.38, + "z": 1.5 + }, + "B6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.38, + "z": 1.5 + }, + "B7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.38, + "z": 1.5 + }, + "B8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.38, + "z": 1.5 + }, + "B9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.38, + "z": 1.5 + }, + "C1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.38, + "z": 1.5 + }, + "C10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.38, + "z": 1.5 + }, + "C11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.38, + "z": 1.5 + }, + "C12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.38, + "z": 1.5 + }, + "C2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.38, + "z": 1.5 + }, + "C3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.38, + "z": 1.5 + }, + "C4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.38, + "z": 1.5 + }, + "C5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.38, + "z": 1.5 + }, + "C6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.38, + "z": 1.5 + }, + "C7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.38, + "z": 1.5 + }, + "C8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.38, + "z": 1.5 + }, + "C9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.38, + "z": 1.5 + }, + "D1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.38, + "z": 1.5 + }, + "D10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.38, + "z": 1.5 + }, + "D11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.38, + "z": 1.5 + }, + "D12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.38, + "z": 1.5 + }, + "D2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.38, + "z": 1.5 + }, + "D3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.38, + "z": 1.5 + }, + "D4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.38, + "z": 1.5 + }, + "D5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.38, + "z": 1.5 + }, + "D6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.38, + "z": 1.5 + }, + "D7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.38, + "z": 1.5 + }, + "D8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.38, + "z": 1.5 + }, + "D9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.38, + "z": 1.5 + }, + "E1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.38, + "z": 1.5 + }, + "E10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.38, + "z": 1.5 + }, + "E11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.38, + "z": 1.5 + }, + "E12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.38, + "z": 1.5 + }, + "E2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.38, + "z": 1.5 + }, + "E3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.38, + "z": 1.5 + }, + "E4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.38, + "z": 1.5 + }, + "E5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.38, + "z": 1.5 + }, + "E6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.38, + "z": 1.5 + }, + "E7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.38, + "z": 1.5 + }, + "E8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.38, + "z": 1.5 + }, + "E9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.38, + "z": 1.5 + }, + "F1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.38, + "z": 1.5 + }, + "F10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.38, + "z": 1.5 + }, + "F11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.38, + "z": 1.5 + }, + "F12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.38, + "z": 1.5 + }, + "F2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.38, + "z": 1.5 + }, + "F3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.38, + "z": 1.5 + }, + "F4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.38, + "z": 1.5 + }, + "F5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.38, + "z": 1.5 + }, + "F6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.38, + "z": 1.5 + }, + "F7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.38, + "z": 1.5 + }, + "F8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.38, + "z": 1.5 + }, + "F9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.38, + "z": 1.5 + }, + "G1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.38, + "z": 1.5 + }, + "G10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.38, + "z": 1.5 + }, + "G11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.38, + "z": 1.5 + }, + "G12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.38, + "z": 1.5 + }, + "G2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.38, + "z": 1.5 + }, + "G3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.38, + "z": 1.5 + }, + "G4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.38, + "z": 1.5 + }, + "G5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.38, + "z": 1.5 + }, + "G6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.38, + "z": 1.5 + }, + "G7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.38, + "z": 1.5 + }, + "G8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.38, + "z": 1.5 + }, + "G9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.38, + "z": 1.5 + }, + "H1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.38, + "z": 1.5 + }, + "H10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.38, + "z": 1.5 + }, + "H11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.38, + "z": 1.5 + }, + "H12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.38, + "z": 1.5 + }, + "H2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.38, + "z": 1.5 + }, + "H3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.38, + "z": 1.5 + }, + "H4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.38, + "z": 1.5 + }, + "H5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.38, + "z": 1.5 + }, + "H6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.38, + "z": 1.5 + }, + "H7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.38, + "z": 1.5 + }, + "H8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.38, + "z": 1.5 + }, + "H9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.38, + "z": 1.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d18d39c6822ff1cd6ce2fd098338c7f0", + "notes": [], + "params": { + "displayName": "D3 Corner Tiprack", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "C2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.75, + "zDimension": 99 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 23.9, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons Flex 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_flex_96_tiprack_1000ul", + "quirks": [], + "tipLength": 95.6, + "tipOverlap": 10.5 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 121 + } + }, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.38, + "z": 1.5 + }, + "A10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.38, + "z": 1.5 + }, + "A11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.38, + "z": 1.5 + }, + "A12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.38, + "z": 1.5 + }, + "A2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.38, + "z": 1.5 + }, + "A3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.38, + "z": 1.5 + }, + "A4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.38, + "z": 1.5 + }, + "A5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.38, + "z": 1.5 + }, + "A6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.38, + "z": 1.5 + }, + "A7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.38, + "z": 1.5 + }, + "A8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.38, + "z": 1.5 + }, + "A9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.38, + "z": 1.5 + }, + "B1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.38, + "z": 1.5 + }, + "B10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.38, + "z": 1.5 + }, + "B11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.38, + "z": 1.5 + }, + "B12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.38, + "z": 1.5 + }, + "B2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.38, + "z": 1.5 + }, + "B3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.38, + "z": 1.5 + }, + "B4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.38, + "z": 1.5 + }, + "B5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.38, + "z": 1.5 + }, + "B6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.38, + "z": 1.5 + }, + "B7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.38, + "z": 1.5 + }, + "B8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.38, + "z": 1.5 + }, + "B9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.38, + "z": 1.5 + }, + "C1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.38, + "z": 1.5 + }, + "C10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.38, + "z": 1.5 + }, + "C11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.38, + "z": 1.5 + }, + "C12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.38, + "z": 1.5 + }, + "C2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.38, + "z": 1.5 + }, + "C3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.38, + "z": 1.5 + }, + "C4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.38, + "z": 1.5 + }, + "C5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.38, + "z": 1.5 + }, + "C6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.38, + "z": 1.5 + }, + "C7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.38, + "z": 1.5 + }, + "C8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.38, + "z": 1.5 + }, + "C9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.38, + "z": 1.5 + }, + "D1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.38, + "z": 1.5 + }, + "D10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.38, + "z": 1.5 + }, + "D11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.38, + "z": 1.5 + }, + "D12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.38, + "z": 1.5 + }, + "D2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.38, + "z": 1.5 + }, + "D3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.38, + "z": 1.5 + }, + "D4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.38, + "z": 1.5 + }, + "D5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.38, + "z": 1.5 + }, + "D6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.38, + "z": 1.5 + }, + "D7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.38, + "z": 1.5 + }, + "D8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.38, + "z": 1.5 + }, + "D9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.38, + "z": 1.5 + }, + "E1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.38, + "z": 1.5 + }, + "E10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.38, + "z": 1.5 + }, + "E11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.38, + "z": 1.5 + }, + "E12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.38, + "z": 1.5 + }, + "E2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.38, + "z": 1.5 + }, + "E3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.38, + "z": 1.5 + }, + "E4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.38, + "z": 1.5 + }, + "E5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.38, + "z": 1.5 + }, + "E6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.38, + "z": 1.5 + }, + "E7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.38, + "z": 1.5 + }, + "E8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.38, + "z": 1.5 + }, + "E9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.38, + "z": 1.5 + }, + "F1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.38, + "z": 1.5 + }, + "F10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.38, + "z": 1.5 + }, + "F11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.38, + "z": 1.5 + }, + "F12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.38, + "z": 1.5 + }, + "F2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.38, + "z": 1.5 + }, + "F3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.38, + "z": 1.5 + }, + "F4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.38, + "z": 1.5 + }, + "F5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.38, + "z": 1.5 + }, + "F6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.38, + "z": 1.5 + }, + "F7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.38, + "z": 1.5 + }, + "F8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.38, + "z": 1.5 + }, + "F9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.38, + "z": 1.5 + }, + "G1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.38, + "z": 1.5 + }, + "G10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.38, + "z": 1.5 + }, + "G11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.38, + "z": 1.5 + }, + "G12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.38, + "z": 1.5 + }, + "G2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.38, + "z": 1.5 + }, + "G3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.38, + "z": 1.5 + }, + "G4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.38, + "z": 1.5 + }, + "G5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.38, + "z": 1.5 + }, + "G6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.38, + "z": 1.5 + }, + "G7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.38, + "z": 1.5 + }, + "G8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.38, + "z": 1.5 + }, + "G9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.38, + "z": 1.5 + }, + "H1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.38, + "z": 1.5 + }, + "H10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.38, + "z": 1.5 + }, + "H11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.38, + "z": 1.5 + }, + "H12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.38, + "z": 1.5 + }, + "H2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.38, + "z": 1.5 + }, + "H3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.38, + "z": 1.5 + }, + "H4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.38, + "z": 1.5 + }, + "H5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.38, + "z": 1.5 + }, + "H6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.38, + "z": 1.5 + }, + "H7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.38, + "z": 1.5 + }, + "H8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.38, + "z": 1.5 + }, + "H9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.38, + "z": 1.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d26e79600f75864088f39597ce155cb4", + "notes": [], + "params": { + "displayName": "A3 Corner Tiprack 2", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "A2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.75, + "zDimension": 99 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 23.9, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons Flex 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_flex_96_tiprack_1000ul", + "quirks": [], + "tipLength": 95.6, + "tipOverlap": 10.5 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 121 + } + }, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.38, + "z": 1.5 + }, + "A10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.38, + "z": 1.5 + }, + "A11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.38, + "z": 1.5 + }, + "A12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.38, + "z": 1.5 + }, + "A2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.38, + "z": 1.5 + }, + "A3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.38, + "z": 1.5 + }, + "A4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.38, + "z": 1.5 + }, + "A5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.38, + "z": 1.5 + }, + "A6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.38, + "z": 1.5 + }, + "A7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.38, + "z": 1.5 + }, + "A8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.38, + "z": 1.5 + }, + "A9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.38, + "z": 1.5 + }, + "B1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.38, + "z": 1.5 + }, + "B10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.38, + "z": 1.5 + }, + "B11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.38, + "z": 1.5 + }, + "B12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.38, + "z": 1.5 + }, + "B2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.38, + "z": 1.5 + }, + "B3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.38, + "z": 1.5 + }, + "B4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.38, + "z": 1.5 + }, + "B5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.38, + "z": 1.5 + }, + "B6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.38, + "z": 1.5 + }, + "B7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.38, + "z": 1.5 + }, + "B8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.38, + "z": 1.5 + }, + "B9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.38, + "z": 1.5 + }, + "C1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.38, + "z": 1.5 + }, + "C10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.38, + "z": 1.5 + }, + "C11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.38, + "z": 1.5 + }, + "C12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.38, + "z": 1.5 + }, + "C2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.38, + "z": 1.5 + }, + "C3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.38, + "z": 1.5 + }, + "C4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.38, + "z": 1.5 + }, + "C5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.38, + "z": 1.5 + }, + "C6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.38, + "z": 1.5 + }, + "C7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.38, + "z": 1.5 + }, + "C8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.38, + "z": 1.5 + }, + "C9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.38, + "z": 1.5 + }, + "D1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.38, + "z": 1.5 + }, + "D10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.38, + "z": 1.5 + }, + "D11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.38, + "z": 1.5 + }, + "D12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.38, + "z": 1.5 + }, + "D2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.38, + "z": 1.5 + }, + "D3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.38, + "z": 1.5 + }, + "D4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.38, + "z": 1.5 + }, + "D5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.38, + "z": 1.5 + }, + "D6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.38, + "z": 1.5 + }, + "D7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.38, + "z": 1.5 + }, + "D8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.38, + "z": 1.5 + }, + "D9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.38, + "z": 1.5 + }, + "E1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.38, + "z": 1.5 + }, + "E10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.38, + "z": 1.5 + }, + "E11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.38, + "z": 1.5 + }, + "E12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.38, + "z": 1.5 + }, + "E2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.38, + "z": 1.5 + }, + "E3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.38, + "z": 1.5 + }, + "E4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.38, + "z": 1.5 + }, + "E5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.38, + "z": 1.5 + }, + "E6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.38, + "z": 1.5 + }, + "E7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.38, + "z": 1.5 + }, + "E8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.38, + "z": 1.5 + }, + "E9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.38, + "z": 1.5 + }, + "F1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.38, + "z": 1.5 + }, + "F10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.38, + "z": 1.5 + }, + "F11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.38, + "z": 1.5 + }, + "F12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.38, + "z": 1.5 + }, + "F2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.38, + "z": 1.5 + }, + "F3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.38, + "z": 1.5 + }, + "F4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.38, + "z": 1.5 + }, + "F5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.38, + "z": 1.5 + }, + "F6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.38, + "z": 1.5 + }, + "F7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.38, + "z": 1.5 + }, + "F8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.38, + "z": 1.5 + }, + "F9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.38, + "z": 1.5 + }, + "G1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.38, + "z": 1.5 + }, + "G10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.38, + "z": 1.5 + }, + "G11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.38, + "z": 1.5 + }, + "G12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.38, + "z": 1.5 + }, + "G2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.38, + "z": 1.5 + }, + "G3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.38, + "z": 1.5 + }, + "G4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.38, + "z": 1.5 + }, + "G5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.38, + "z": 1.5 + }, + "G6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.38, + "z": 1.5 + }, + "G7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.38, + "z": 1.5 + }, + "G8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.38, + "z": 1.5 + }, + "G9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.38, + "z": 1.5 + }, + "H1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.38, + "z": 1.5 + }, + "H10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.38, + "z": 1.5 + }, + "H11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.38, + "z": 1.5 + }, + "H12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.38, + "z": 1.5 + }, + "H2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.38, + "z": 1.5 + }, + "H3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.38, + "z": 1.5 + }, + "H4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.38, + "z": 1.5 + }, + "H5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.38, + "z": 1.5 + }, + "H6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.38, + "z": 1.5 + }, + "H7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.38, + "z": 1.5 + }, + "H8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.38, + "z": 1.5 + }, + "H9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.38, + "z": 1.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0ad11818ed6a58b4125b09f521ef7427", + "notes": [], + "params": { + "displayName": "A1 Corner Tiprack 2", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "addressableAreaName": "D4" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.75, + "zDimension": 99 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 23.9, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons Flex 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_flex_96_tiprack_1000ul", + "quirks": [], + "tipLength": 95.6, + "tipOverlap": 10.5 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 121 + } + }, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.38, + "z": 1.5 + }, + "A10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.38, + "z": 1.5 + }, + "A11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.38, + "z": 1.5 + }, + "A12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.38, + "z": 1.5 + }, + "A2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.38, + "z": 1.5 + }, + "A3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.38, + "z": 1.5 + }, + "A4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.38, + "z": 1.5 + }, + "A5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.38, + "z": 1.5 + }, + "A6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.38, + "z": 1.5 + }, + "A7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.38, + "z": 1.5 + }, + "A8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.38, + "z": 1.5 + }, + "A9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.38, + "z": 1.5 + }, + "B1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.38, + "z": 1.5 + }, + "B10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.38, + "z": 1.5 + }, + "B11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.38, + "z": 1.5 + }, + "B12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.38, + "z": 1.5 + }, + "B2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.38, + "z": 1.5 + }, + "B3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.38, + "z": 1.5 + }, + "B4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.38, + "z": 1.5 + }, + "B5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.38, + "z": 1.5 + }, + "B6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.38, + "z": 1.5 + }, + "B7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.38, + "z": 1.5 + }, + "B8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.38, + "z": 1.5 + }, + "B9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.38, + "z": 1.5 + }, + "C1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.38, + "z": 1.5 + }, + "C10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.38, + "z": 1.5 + }, + "C11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.38, + "z": 1.5 + }, + "C12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.38, + "z": 1.5 + }, + "C2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.38, + "z": 1.5 + }, + "C3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.38, + "z": 1.5 + }, + "C4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.38, + "z": 1.5 + }, + "C5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.38, + "z": 1.5 + }, + "C6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.38, + "z": 1.5 + }, + "C7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.38, + "z": 1.5 + }, + "C8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.38, + "z": 1.5 + }, + "C9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.38, + "z": 1.5 + }, + "D1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.38, + "z": 1.5 + }, + "D10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.38, + "z": 1.5 + }, + "D11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.38, + "z": 1.5 + }, + "D12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.38, + "z": 1.5 + }, + "D2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.38, + "z": 1.5 + }, + "D3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.38, + "z": 1.5 + }, + "D4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.38, + "z": 1.5 + }, + "D5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.38, + "z": 1.5 + }, + "D6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.38, + "z": 1.5 + }, + "D7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.38, + "z": 1.5 + }, + "D8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.38, + "z": 1.5 + }, + "D9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.38, + "z": 1.5 + }, + "E1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.38, + "z": 1.5 + }, + "E10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.38, + "z": 1.5 + }, + "E11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.38, + "z": 1.5 + }, + "E12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.38, + "z": 1.5 + }, + "E2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.38, + "z": 1.5 + }, + "E3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.38, + "z": 1.5 + }, + "E4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.38, + "z": 1.5 + }, + "E5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.38, + "z": 1.5 + }, + "E6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.38, + "z": 1.5 + }, + "E7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.38, + "z": 1.5 + }, + "E8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.38, + "z": 1.5 + }, + "E9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.38, + "z": 1.5 + }, + "F1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.38, + "z": 1.5 + }, + "F10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.38, + "z": 1.5 + }, + "F11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.38, + "z": 1.5 + }, + "F12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.38, + "z": 1.5 + }, + "F2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.38, + "z": 1.5 + }, + "F3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.38, + "z": 1.5 + }, + "F4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.38, + "z": 1.5 + }, + "F5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.38, + "z": 1.5 + }, + "F6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.38, + "z": 1.5 + }, + "F7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.38, + "z": 1.5 + }, + "F8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.38, + "z": 1.5 + }, + "F9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.38, + "z": 1.5 + }, + "G1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.38, + "z": 1.5 + }, + "G10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.38, + "z": 1.5 + }, + "G11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.38, + "z": 1.5 + }, + "G12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.38, + "z": 1.5 + }, + "G2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.38, + "z": 1.5 + }, + "G3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.38, + "z": 1.5 + }, + "G4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.38, + "z": 1.5 + }, + "G5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.38, + "z": 1.5 + }, + "G6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.38, + "z": 1.5 + }, + "G7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.38, + "z": 1.5 + }, + "G8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.38, + "z": 1.5 + }, + "G9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.38, + "z": 1.5 + }, + "H1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.38, + "z": 1.5 + }, + "H10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.38, + "z": 1.5 + }, + "H11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.38, + "z": 1.5 + }, + "H12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.38, + "z": 1.5 + }, + "H2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.38, + "z": 1.5 + }, + "H3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.38, + "z": 1.5 + }, + "H4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.38, + "z": 1.5 + }, + "H5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.38, + "z": 1.5 + }, + "H6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.38, + "z": 1.5 + }, + "H7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.38, + "z": 1.5 + }, + "H8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.38, + "z": 1.5 + }, + "H9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.38, + "z": 1.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e59adc286bd3bc6c094ce600f1fc7df7", + "notes": [], + "params": { + "labwareId": "UUID", + "newLocation": { + "slotName": "A1" + }, + "strategy": "usingGripper" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dc3333d4314b8f2e93c504d0d76cd023", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A1", + "style": "ROW" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fd5e1fbbdbd5980754514c29ff56f612", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H1" + }, + "result": { + "position": { + "x": 14.38, + "y": 118.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "55c001604193d02deca6d26ee961e665", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2bc2e305fc1f083468154eb63543dc6b", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "581858797e1c84d6ef6907ff6564704b", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 14.38, + "y": 127.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2ad8d3cad2ceb13e535a911c14f2ca51", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "085700c231f9630847ca7be0a9712c10", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bfc154c2055eafd8de53ed7918a8b2bd", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F1" + }, + "result": { + "position": { + "x": 14.38, + "y": 136.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "26ac7fd5faef93302d3fbc49db7add06", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ea4eb91e895b420538a0f4a3de35215e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f4bafffc24563db38f66d512f9d52608", + "notes": [], + "params": { + "labwareId": "UUID", + "newLocation": { + "slotName": "D1" + }, + "strategy": "usingGripper" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "43f132bd8c8be367bbea536d45800b00", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A1", + "style": "COLUMN" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5234bb754a520a0c82d95a2cc0a11630", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A12" + }, + "result": { + "position": { + "x": 277.38, + "y": 288.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "80792fac4307676440a65242d477c0ba", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8d8a833b3949c88948069284842708e2", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "84535a57c980ec368b9273f4cae42077", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A11" + }, + "result": { + "position": { + "x": 268.38, + "y": 288.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f5cc216ec1e6fbd4ce8a80f25ee81bff", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "66addfca5f355d51d9e1187f739b1933", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cae1bda03bf2cc927b8809f29e0461ba", + "notes": [], + "params": { + "labwareId": "UUID", + "newLocation": { + "slotName": "A3" + }, + "strategy": "usingGripper" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cb826260b033670baaf76946fe18cb0c", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A1", + "style": "ROW" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "477b2ca4b04f63f479976cea028ddc34", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H1" + }, + "result": { + "position": { + "x": 178.38, + "y": 118.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ef685bf857220d56d2ec09c953cdd54c", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "caaa68a8872363bd55a03840a073f7a3", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2f7ae7ea31cb49a846c2e85131933241", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 178.38, + "y": 127.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3cc8b36c29f009e6ddd79ab7d51f9b9c", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fd186ea036e5c43100366048a9bf96bf", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a7da3feeaf59ab9910abd390415ae0e3", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F1" + }, + "result": { + "position": { + "x": 178.38, + "y": 136.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3b86d87937b20d929bfce9dba650e3bc", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2b83cf73f3499cd1e645e8b5d3a2268f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6feea658b6c942f5b277ac0865e4fe6f", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A1", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "241eca009cb04e7eafe03e547bfb9f0f", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E12" + }, + "result": { + "position": { + "x": 277.38, + "y": 145.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0be2b0fb1538d3dc7e3b995b8db53e04", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "920b03027fda8f0380c157234d3ecd73", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f69826303f6a2752d1c912a9928093e2", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D12" + }, + "result": { + "position": { + "x": 277.38, + "y": 154.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "44d8fecee455b87b7c71773c061b766d", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "81c7f6220dcd4580909c4d889559392e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "40666d2d148b449215a32a9ea46cfd20", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C12" + }, + "result": { + "position": { + "x": 277.38, + "y": 163.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f30c895d42dc07604ca0a7a714dba8b3", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f8cf5fe75119a980716eb872c8f54498", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3849966716a1d0aa6f54c8d62fe5129f", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B12" + }, + "result": { + "position": { + "x": 277.38, + "y": 172.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "23c40755c72164e6cb4960e930f806fa", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c887c611c40293ea14ebb66d57c9e2b1", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e6f1db550101e672a1b882bb41daf8f2", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A12" + }, + "result": { + "position": { + "x": 277.38, + "y": 181.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cd7ff8e7a96ed93a96b3e174644df331", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f57b28a3534977384836f5835db58300", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "56d0e95682f0cb1e0879a3cfe6df4c90", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E11" + }, + "result": { + "position": { + "x": 268.38, + "y": 145.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "aa0097329cfb6974a656e4e48ad9045d", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7f4aad30a64ea520545090b8ecbd6957", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "679a3d4e21ca968e77c91f0e6c715624", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D11" + }, + "result": { + "position": { + "x": 268.38, + "y": 154.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "60eae530a213eb258059469d3ec1cff3", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9fcb72c68fcf7a6f6065c01bca605f5b", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8533435cdfea2ee9f208027a557b3ba5", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C11" + }, + "result": { + "position": { + "x": 268.38, + "y": 163.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a9ec53b4f44b7d3d71157c1537843d15", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7a4d0c477562921f79fb938ab9e8156f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ac1e40d322083b6d79b93ba1c68af10c", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B11" + }, + "result": { + "position": { + "x": 268.38, + "y": 172.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a49902680bb808047d1f43b764971554", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "796a15fd2ad469beece86be7dd7ebe65", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "93ca7655a522d7721e8c4694bbba68a9", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A11" + }, + "result": { + "position": { + "x": 268.38, + "y": 181.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b8336ac6302191e710ed99e9e6adf41e", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5b582194b41028577624f215159d76ae", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0ba74b1ae7de89595b2e8d6384dd6202", + "notes": [], + "params": { + "labwareId": "UUID", + "newLocation": { + "slotName": "D3" + }, + "strategy": "usingGripper" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7a8c624e1508d4b12fcba0b3649387f2", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A1", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "65daad6f2fac10b8009cf754adbcc192", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E12" + }, + "result": { + "position": { + "x": 113.38, + "y": 38.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8e8ec2d4f03ce33a370b155bb19002ad", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6eadef0c6f337062bd02835b9fab4b89", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "29ebfa5049489f12fb5b5e3d93b70431", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D12" + }, + "result": { + "position": { + "x": 113.38, + "y": 47.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "24f33a0efeb2b8cf0e859474dae2b22d", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c7bb920ec5ec7eab264a5919b94797cf", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d0433b56b7e9fdaad17fff3f46eaf0c8", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C12" + }, + "result": { + "position": { + "x": 113.38, + "y": 56.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "900947aa38f6b74be850e578c4a072b4", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "74487159c087b2a18436bfafa54861db", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8f084b45586bc3555ed741af945d7070", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B12" + }, + "result": { + "position": { + "x": 113.38, + "y": 65.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d8f80d27fcfc38ed3bd1faded465cdd5", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dd7219e1fc01741cd131415a22e3b87d", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1193b4a08a9c759700cf568bf4a88b4a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A12" + }, + "result": { + "position": { + "x": 113.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f521f51e2b73ff52e0612040912f6924", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4a626e29cbb967070723a6d01213138e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fad0059b46c4edeb84095e9ba6e71eb3", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E11" + }, + "result": { + "position": { + "x": 104.38, + "y": 38.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "89bb6a003749f5123c48bbf55cbd32a8", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f15b703741d9c2fcbaf5fd294c2396bd", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "068f1ffc1b770b921cb4dc939dc6ffd9", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D11" + }, + "result": { + "position": { + "x": 104.38, + "y": 47.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d7ac79ad61d16f25244c5f6a1672406d", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "482c6e36e3c3e1a1287e9f754d5313cc", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0ba822570668ca07719e98413b4944fd", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C11" + }, + "result": { + "position": { + "x": 104.38, + "y": 56.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2b819cf6061f0fccc739fab480d3146b", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "76de98b36b9fbad51fb179d53b2d563d", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ca9af7cd6188408d7e49e6e6277fd5f6", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B11" + }, + "result": { + "position": { + "x": 104.38, + "y": 65.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a23044ec7a251b0ff8b9d439a29834ea", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c04c5f88f0d665a874d7056c2be4e0aa", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7c8c0b9c6ceeb88152e819bf34a639d7", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A11" + }, + "result": { + "position": { + "x": 104.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cb8e7aa358a0e09d593ca9d74b77511e", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "56aa8a870b94fa26317f2fc8adac8432", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "666becbcb68227de89a8862b08a32bec", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E10" + }, + "result": { + "position": { + "x": 95.38, + "y": 38.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b84dcd58d6435ca3c49a037f604e511e", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6d1eebaf10c55301752f7dc037f8bdfb", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b526f30b873a29b6c438234db0ab7fbe", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D10" + }, + "result": { + "position": { + "x": 95.38, + "y": 47.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e4b806a88ccf7da7778891f4540bbbd7", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "542a65a5f9b9291e3f616b672246720f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fbf7b7d915ef8f511b67c20842fd529d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C10" + }, + "result": { + "position": { + "x": 95.38, + "y": 56.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "88e017cfde3286e114d080785d91aff9", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "31f51a22279576d33752d3691b14763f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f49f12eb381d1979a74aba3a4acad6ec", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B10" + }, + "result": { + "position": { + "x": 95.38, + "y": 65.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "18b48ebffe6d23a582b4dabff91ae5fc", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "56c752b2a026271cd0df2518e5f0fc91", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "eabc12011277672d886be2f85fd40017", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A10" + }, + "result": { + "position": { + "x": 95.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3c747638500d7344551d3480fa2e31ad", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "13e8311ee634170e75112c31cc8e7d7a", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3c3241059ddca1ab71d95401c385f7ed", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A12", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d46b10b6c1d5843dede0a5e53f849652", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E1" + }, + "result": { + "position": { + "x": 14.38, + "y": 38.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "88779d29803d3fbba6a9294da7491200", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6bbc49890257568fba0e3e6c74996a73", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b8ea68c3fb8b89adb783329cf5695d2a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 47.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0293b1047a20be51a0d0e23288b99f27", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7454e3dba9a2ca6d2d2ae97a3d481e42", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "57be6958aef7d861809108d2cb6943cb", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C1" + }, + "result": { + "position": { + "x": 14.38, + "y": 56.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7abc41a52d8571499a87c37ca6e2ed7e", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2ca6f7f8811cde0642d513ea1c9626cb", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "92919140073a46b9834a3b877c6b0164", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B1" + }, + "result": { + "position": { + "x": 14.38, + "y": 65.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d0e7b1c082f1a03878fcdcfac3d38088", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "952ffb780eec38bce33166569c1a1fb8", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c40ddf768c7c884c2b104e7eb5abb31d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 14.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a7cfc4e694b9c09147b3c730f8bf9863", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ce8cdbb13fc142652fcbef5389ad43d2", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3e1f5e062c7516a0b0c2a6a2ded77eb1", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E2" + }, + "result": { + "position": { + "x": 23.38, + "y": 38.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c6fb7ed1ab303623d94354372cfd4396", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "297c57e5258012246c176c654e8d40ab", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3d1e0bf4201ae6014e0be849df34cddb", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D2" + }, + "result": { + "position": { + "x": 23.38, + "y": 47.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7da7dae43dfd05fec92878914f66a524", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d3b0863b4a751a4f468689d751820ebf", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "aa67a33a881a773ae15967cc5866afcd", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C2" + }, + "result": { + "position": { + "x": 23.38, + "y": 56.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f56730ff29a71011babff188d0adac14", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cbd0ec4b4fd3804eec2db9cfed4065a5", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "63ebd9796b2a84b80ae46b2a34179c82", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B2" + }, + "result": { + "position": { + "x": 23.38, + "y": 65.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "06462e84cd9bba2206501755f8a9502c", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "583fb4530f969d51b6f5c31fd0ea74ad", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "439436633ba8c82db083be9224d6ca03", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A2" + }, + "result": { + "position": { + "x": 23.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6f120296f38cb4136ea281d647c6c968", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "488e49a2ae65b958137e5b96f33b86c0", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a6b9c91aebb57a2da747d3af33389881", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E3" + }, + "result": { + "position": { + "x": 32.38, + "y": 38.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d14acbf657c39804cc60a3ebd74c4b93", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "448361a19a8a5d203444b758dce42d4a", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cfd5c6a077b5fdb508c84815cc0c0419", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D3" + }, + "result": { + "position": { + "x": 32.38, + "y": 47.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b691c808ac83cdaa847d6145a21a7e1f", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d81df2d794fa8d86f9081044a8b4632d", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "db4116a1fd2504c822d16176537a9744", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C3" + }, + "result": { + "position": { + "x": 32.38, + "y": 56.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ed9fda97210f0ff38c246a3356f493af", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a9b6cd450ffa30637df72120515b27a0", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4473f8a398d3ad940e5d2d9e3e2a8b99", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B3" + }, + "result": { + "position": { + "x": 32.38, + "y": 65.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c1efab737f3ac1b0c32d57346a213103", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "424cb0fa05d3212b4a240524b7b72b1b", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "edba3092ebf3b9e53fd499e5358231ba", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 32.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d58310c3a50ed08137e402ef22bd3134", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "446144a4e689564b2f5901198acfef9f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4b9e3c7a245107c3ef20445b1478ed31", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "H1", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f3febe36dce0f9ea84638f460101787c", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A9" + }, + "result": { + "position": { + "x": 86.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e07c12a45a58d15c84070ca7a7f0bebf", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2cc012e503f5eec627f28502dca84f24", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a4b5f6d122c7abe8c0ac8f6eeef15686", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B9" + }, + "result": { + "position": { + "x": 86.38, + "y": 65.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bcfadc4d666de17d13f216a430745423", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "de2576c7c78db325ef24346cf5cf4159", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "324ba1c75e7b6c4f3213edbd572f3d7a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C9" + }, + "result": { + "position": { + "x": 86.38, + "y": 56.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e9559850fa7942dc65780a762e309744", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "925d384a350a9ab95e4bed52d99d12fa", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "75ba53438adcb5db46651e69f11e84ad", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D9" + }, + "result": { + "position": { + "x": 86.38, + "y": 47.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d321176bbd49d60fceb734e0223411ec", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "99b7ac2d67ad676e79f70a5eec1fb5f5", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e09e2f94817979918bbd7c49b04ace84", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E9" + }, + "result": { + "position": { + "x": 86.38, + "y": 38.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b4118f8deb8e82e0a5e9da6a16fe553f", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "39200025551a33bf2e7278e1ced7bcd5", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4dc6bc30062e1c6989903ce38a85d902", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A8" + }, + "result": { + "position": { + "x": 77.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "58caf4548070bbdac328defdeab0be98", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d8b34d9e6e6be788ac5bad8abc7b1ee2", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "904685cbf1633bb78e2e8a628b13c91e", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B8" + }, + "result": { + "position": { + "x": 77.38, + "y": 65.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "597950b3b675fb432e6aefa4a8a09e54", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ef137e1d61725a85ab02d610f4c92be1", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3a405a69123e1e0432da74f8441f6ad3", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C8" + }, + "result": { + "position": { + "x": 77.38, + "y": 56.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7359802f4bc9967ac0643ece9b2284f1", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3b7b674008a1622788dbed7d09edbaa4", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "733cc2a55c013d2847ecb03f50e69a0d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D8" + }, + "result": { + "position": { + "x": 77.38, + "y": 47.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2e1cc93473ddb6e6ea9e160b6578fce3", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "09e3a4d04f46b8c4a554814f26b26a92", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6db3e055a3eb15ca1beb837075821cbf", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E8" + }, + "result": { + "position": { + "x": 77.38, + "y": 38.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4de4faf1849c9203450e4fa59331492a", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "48f45578f33a7e5b67fcd7ebb773262e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "13542871f6d055e73a08e14f361b8eac", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2998f6bba5e08651ad75a24f38f2bb1d", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2340dc15447fc6272a693242744ff8ca", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f8043e4634696564497681eeb3a0305c", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B7" + }, + "result": { + "position": { + "x": 68.38, + "y": 65.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9c11805f77cc4df9f3574e67d171bd6f", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3f89aa970306e6c12302ce7d4236555e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8abc075e569d91bbcd49dc7529524587", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C7" + }, + "result": { + "position": { + "x": 68.38, + "y": 56.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "04c10ec59ae45389aa1db99df716fb84", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2d3f8c30e6e9665a223f97486bff50c3", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "59c8327d1e9f711d6dd81142f60bbd20", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D7" + }, + "result": { + "position": { + "x": 68.38, + "y": 47.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e1a0e8f24ec93f7151d6259d80001222", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8b03ac0181b84973e9b56c87a23b9f17", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cd7ea6ef414aeb10bfd996753c6ec262", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E7" + }, + "result": { + "position": { + "x": 68.38, + "y": 38.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9bf3ad7c73330f611dee46a2c4305cac", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "65bd4ea7a7dc70ea852fee4b84032431", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "781c152f1a6e86df45864a79f418a10f", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "H12", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d2af8e44f6eecbc5ed6da21135d319d1", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A4" + }, + "result": { + "position": { + "x": 41.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0162e6eccab6ac26e3f9cdc516d23482", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "45c070d255ca6c6e0dc2215342f2326d", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "75bf67cacb2631ffdac705704f9030a8", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B4" + }, + "result": { + "position": { + "x": 41.38, + "y": 65.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d7f33cb3c10ec244227fa0411fb50f71", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a7d6a6f5b79ef0447a5eae98daf763d9", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "34635985f44d6064c200ffdb81d9f227", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C4" + }, + "result": { + "position": { + "x": 41.38, + "y": 56.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b38547bb27e653dc2714a02152ff7c36", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3e6f781ae687e0ab9ff3bdfd5480b39a", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0f950f55ad850aafe8f2645abf1e62b5", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D4" + }, + "result": { + "position": { + "x": 41.38, + "y": 47.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9a62e1e5475d1efb974e8f032a712593", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fc4d95a82e65f190ff38fca615465a02", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1ba428cb9bb8a25005b6594722be2d2f", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E4" + }, + "result": { + "position": { + "x": 41.38, + "y": 38.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cb4674cab1438a455e9a16b3060912fc", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d7d7871c1d0958444ad3109c2404991a", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7ec0679185952164b8993101b25476e0", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A5" + }, + "result": { + "position": { + "x": 50.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "126a5cdc7b9be24f096047fed0d8c524", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4ae6c04aabce9bbe77767e02aaaca2a6", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f00f357dcff058e09cdf6db04576995f", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B5" + }, + "result": { + "position": { + "x": 50.38, + "y": 65.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "01e4cab0798dd41c1d4a75a3f290d5f7", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5f8f50c3094059e37f0f0fb70dba1088", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "99ee1e37123eeed187024561fbcd59b4", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C5" + }, + "result": { + "position": { + "x": 50.38, + "y": 56.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b89ae5081ca3bf28159ae9cea0f36c72", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f15ce25a4e4a2583c40f9a204aa03737", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "19910e2422de93bebfb6f53c856a95c8", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D5" + }, + "result": { + "position": { + "x": 50.38, + "y": 47.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "091ef9daf282e51a1db640688ab95897", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a51684dec2501528b4491a6f06e505d6", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "87545e0c14a275d8900d185c26394335", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E5" + }, + "result": { + "position": { + "x": 50.38, + "y": 38.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c8d3fe477333f520415a3ba694ec0f8b", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b78244639c1ba35817db350b5febd6fa", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "828d0ab1a8cfcc634ea10300c4d242bf", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 59.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5d2594b2fa3d1bc1a446e80a4e8ce1a4", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "798d2e708312ef90908f1fd936a35aaa", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "130dff34f9f1f14b1aea16e61c175cb4", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B6" + }, + "result": { + "position": { + "x": 59.38, + "y": 65.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "abf4b6e24cbc14a6bce761903873a54c", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "23306966afbb5f5a48049ff738c00cd0", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8b8cb2669c6eb7b27a7beb57758bead6", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C6" + }, + "result": { + "position": { + "x": 59.38, + "y": 56.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "29a5fc0430c7b9ce02d03ae1bc1509bf", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a3cfc43606fb9d8c879f88df03b7cd4c", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "995e9d73203fe3fe9a0665f9cb020a26", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D6" + }, + "result": { + "position": { + "x": 59.38, + "y": 47.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "854cb07c78c566afe1f67ac83a43eef5", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "55050f3328e73697b0e3bcd4515cbaee", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b50c54d6a19afcb3242e60b8d88baa79", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E6" + }, + "result": { + "position": { + "x": 59.38, + "y": 38.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bdbdf677d0064ca4f32f960c51d6a445", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4a1fdbfccd14852406c034ea50ea0c10", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "532b1be9c7e4ff77746a800b746982fd", + "notes": [], + "params": { + "labwareId": "UUID", + "newLocation": { + "slotName": "B2" + }, + "strategy": "usingGripper" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4407a4c50ab9bca786ff1eb3aded4c7c", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "H1", + "style": "ROW" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a3d3a254f58dbf5eaf54d3e9d8b0430e", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 178.38, + "y": 288.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "31afd3a65d9fff5f3c7f1bdc94f39a02", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "852d90573712a29469c40462d58bf44b", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "26153c16168a3fea625595ef12cac2cb", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B1" + }, + "result": { + "position": { + "x": 178.38, + "y": 279.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1a60728e4281690a85cc180186dcee14", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "90b5d2ae9184f8e902e89258479d2dc9", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e896afe0dab6242cc4a0b2284854f4b2", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C1" + }, + "result": { + "position": { + "x": 178.38, + "y": 270.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6eca8573e72eb22fd69a5b9258aedd6b", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "46b6ab5a7cc1a2d384daca47ab685093", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "faf22c19a9b4ba20a2b5aab3b0bb60e1", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a9b70d77ff319e5ac26b93755bbc7453", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8d7f1f400c4cf876993291a83f5b36c8", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6b0398211d16aac590e0a745c5f69a20", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E1" + }, + "result": { + "position": { + "x": 178.38, + "y": 252.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4f10163c2ff2046a35e3ee824c7b63f3", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1466ebd16eeeed80a76b8f940f215770", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0f6ae3480820082349e36eef2768afdb", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F1" + }, + "result": { + "position": { + "x": 178.38, + "y": 243.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b1a3880a04bdd33d91ab43b79efc2ee1", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f97c7eb31b0e2a1db652fb0d48beac09", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "29f42d9a0f06178291eb27779972f665", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 178.38, + "y": 234.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d0694099b83e3ef4f205f8900244560f", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b9026d22c3fed4cba4551c47d5514872", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "96a7e3ac47b91f0c2359c5004dd567fe", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A1", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f77f000873cc2acb3c2ef36416ffa6e9", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H12" + }, + "result": { + "position": { + "x": 277.38, + "y": 225.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "93d72c623251300144711f8e1ffca2c7", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3afd5fd12b773af9fd9ea6022e849b18", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c4d1ff84cca093ccbfc9389db6cb83f3", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H11" + }, + "result": { + "position": { + "x": 268.38, + "y": 225.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ec5561932dfeed3448d49b6ae19cafdb", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2681611e12ba3f43f60105ea40dc2cf8", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "41c9116cf34d7fa591d2b8ce1867aca1", + "notes": [], + "params": { + "labwareId": "UUID", + "newLocation": { + "slotName": "C1" + }, + "strategy": "usingGripper" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7c76efe563f7a20e0242eb5ead0cb9a9", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A1", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "01ea156ed112d6bc2bac8d35531b67aa", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H12" + }, + "result": { + "position": { + "x": 113.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "998ff1e207d7649c2b3705919dac54fc", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "676c0b0fcbbc22b5b52d0f9911e73cce", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "69d6675492957b4d8ae660781a2b5e54", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G12" + }, + "result": { + "position": { + "x": 113.38, + "y": 341.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fa385876a40816d97be595f871c55586", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "26b60271c1d32e7cacfe0332e7401da2", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "80841e9dedbc7b94a74df97e0a323262", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F12" + }, + "result": { + "position": { + "x": 113.38, + "y": 350.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "906912bd2261f8bfa9d22f1d32f4e6f1", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0907a969265f7b85e9fa79a8aef88631", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ebf91c6459fc0404bb5a0b7069ff5e24", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E12" + }, + "result": { + "position": { + "x": 113.38, + "y": 359.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5042def3dfef5de5aecf9614c815c684", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "df46106aacbc01643ccc8100ea78c296", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "625ea1255906c411ff4c40571d84c8ee", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D12" + }, + "result": { + "position": { + "x": 113.38, + "y": 368.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c7ccc820777900863f148da03b44641a", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1ff65f42435700eb138d3c6a0fd884b4", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "11aa4b24d023c7084f3c2246bbd14fe9", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C12" + }, + "result": { + "position": { + "x": 113.38, + "y": 377.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8819690542a49ac8ea16485a42fb72ec", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b66d8fdbf993fa368481ab79ed0d47a3", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f0ed36a24af5778cd633de4be25adbe2", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B12" + }, + "result": { + "position": { + "x": 113.38, + "y": 386.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bb84180808ea83fdd65d77b9b3781d14", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e10732b3cc753d22874d59e88429933f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "aa4f35b4133a88582c9c15d8100b3485", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A12" + }, + "result": { + "position": { + "x": 113.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ca43d5642bf49f0c5630fa15ca275e9d", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b47af825db3ceea4d48e1ded3f9a9c94", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a367df43057b99792288c16758c4641d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H11" + }, + "result": { + "position": { + "x": 104.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3dd5124d6b9ff0ed07f215d50866df47", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3c3819db10059e841503ea96d7aa3ae7", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b555a35a4712a960be7d7ba3078e2c2c", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G11" + }, + "result": { + "position": { + "x": 104.38, + "y": 341.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5f89638804ac3890a36ba24817faaf3c", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "92a173fbffbc5364d91991c5d425454a", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2a26229245fea599aadb0cdf191d3818", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F11" + }, + "result": { + "position": { + "x": 104.38, + "y": 350.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "34cb5296321674959a04a032e41f9f78", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "789f783381552d6bf74d3637102385a5", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d458854df8af17425adb8cb2ec1c7725", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E11" + }, + "result": { + "position": { + "x": 104.38, + "y": 359.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ae48e657f88e7cc63cec6f10f1704938", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fe4fee5cb325c9ec86836089bb23ca07", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e77b160f34beab2403e8f7b6a49b837f", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D11" + }, + "result": { + "position": { + "x": 104.38, + "y": 368.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0119a54bbd9979cb77e523b106f379a7", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d7485dada9d77f9e02766d02b7121a82", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d5cefe617cb82aa087792628b11e084a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C11" + }, + "result": { + "position": { + "x": 104.38, + "y": 377.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "981e22013991709788e36779c805b1dd", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3eac44c354438e5ec47c7e56f31146f6", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c6fd655602415a4ffebb34a1dcb2f515", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B11" + }, + "result": { + "position": { + "x": 104.38, + "y": 386.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b657a79e0b06a1f159022c02de18e24d", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "67a1296d5954060c07c1d8745e59044b", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8e86fe7085f1e216b50190094c5383d0", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A11" + }, + "result": { + "position": { + "x": 104.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "07c63b8179da557cab3e9564faedad1e", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "00ea041a4af6e576c7727b44bb06ef4c", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "83a9c2b6d49e81e8c70b516e7d80341f", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H10" + }, + "result": { + "position": { + "x": 95.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d0064b714da1df79c9dd56bcd56498f6", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6ada1d237b794734e8922a270dd33bf8", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d02287e9dc964cdca2db343497e7934f", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G10" + }, + "result": { + "position": { + "x": 95.38, + "y": 341.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c9de20f52b787eb9e43d87ea7b9a7e0e", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "303da1da439decf38c0eacd30716cab0", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fca59dc908629d84b8fbfdfd6a3899d6", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F10" + }, + "result": { + "position": { + "x": 95.38, + "y": 350.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "82967b8d51d01a718842b63b945105a0", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "904a64c977ea00fb0959f9b3e8905baf", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "68936c987cc71e5046397a7100e75757", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E10" + }, + "result": { + "position": { + "x": 95.38, + "y": 359.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b3b4a292a947437a6256f5ced6b05237", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fb4e8e1d2999847749ae4b38cee72aac", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "de416e66819992158d8b013bf7f5ecc0", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D10" + }, + "result": { + "position": { + "x": 95.38, + "y": 368.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4cdd8a33e6408438271dce62fb8cee65", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e5e5cb7f5ee78f1de307f16169d8bb8f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bb104ec3111cb5323c5403911258f902", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C10" + }, + "result": { + "position": { + "x": 95.38, + "y": 377.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c78cfbee03e4ac477b9a639aa4b2fe64", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0baa0123aba5752868b59fdf3fe1f280", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2d5db8b26229573755e3a816322a1435", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B10" + }, + "result": { + "position": { + "x": 95.38, + "y": 386.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7a7fdfcf22b9d2d182d9a20916b31d49", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "586b7960d1f537d053135d49ee88c0c9", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e3f26721ca7ed73a542d9d7d1244bdbf", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A10" + }, + "result": { + "position": { + "x": 95.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e2cfa06b27bd46c4c9df2a19e78354dc", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1e1d402db78a2c54cd95e8d6543d37e0", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cdbf43640a99ff91d0bb54a482475c7e", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H9" + }, + "result": { + "position": { + "x": 86.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "07144ab339c518c13a39c1120c0fe931", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cc60a671f169933a769ee407648189f1", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f99a16031c12e93dbb7a58d2812bd082", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G9" + }, + "result": { + "position": { + "x": 86.38, + "y": 341.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "612b2ba97e09981314a5eb73bdbac57a", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8fa81d919277daa89b848d44a73ed1ed", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d32580d57c1330866fd502ecb7f8be38", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F9" + }, + "result": { + "position": { + "x": 86.38, + "y": 350.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "db54694455645a82b2c391b991145c35", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "62e8fa03c718363f2eae2cca56b6b990", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9b05c325539b90ff9ed534fa4e586b86", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E9" + }, + "result": { + "position": { + "x": 86.38, + "y": 359.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ec0bed8a77b5241b314fdc986a46f8a2", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6ff571c7f1af11e3b4b4d42f39322cfa", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "446b56c4e011230fb7f9c33b15c0885b", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D9" + }, + "result": { + "position": { + "x": 86.38, + "y": 368.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0e4c7462bf4a701f06e29a3bc9a63ca4", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f12526837bc03fc836b1713af96f4066", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "789ba62a54b493cf84b9e77165b9a584", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C9" + }, + "result": { + "position": { + "x": 86.38, + "y": 377.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "64bdea2a8b73f074e90955b9ba54bf04", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "661646579d48c85eee1d9cb5845253b4", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0eae169696e9429ed7ffc06cdcf880be", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B9" + }, + "result": { + "position": { + "x": 86.38, + "y": 386.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "15bb137bbe607729e2f67acea6d655d7", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "645aa67564678e9a12c75652c22159b0", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b1cd85389280e6bda8d61a1bf0038665", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A9" + }, + "result": { + "position": { + "x": 86.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b4c14bf6af26e4934ac4934c0741fd64", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a5a4abc1d20830b1c013b380f5102858", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f4c8bfbb9d9ffa33aaf27bf3a2b606f2", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H8" + }, + "result": { + "position": { + "x": 77.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d5a86a7fd6ba5ef4e38f2ac740f4033a", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d201e9c1eb937634253755f706e7d869", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c20d7915462ba55b25dce9de65caefbf", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G8" + }, + "result": { + "position": { + "x": 77.38, + "y": 341.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "174b9a2eeaded2155dd374c5f763397d", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2b98b6a9374987b4c85aae4a90dde170", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e5810bcd05293d78d917cccd4877cbd5", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F8" + }, + "result": { + "position": { + "x": 77.38, + "y": 350.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1350ce3f30fd4b74e94957da386304fd", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e8647f1d7b5fb517a48a4675bb0eaa0d", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ee0629c3c2a8c38c6c9de32e38b07f78", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E8" + }, + "result": { + "position": { + "x": 77.38, + "y": 359.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d65e06fe08381c131f633cc3acb95614", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f1892b30c8052b4076ab887b6d687e62", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b9cbc87c24c17ef53a2b3566a60d391c", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D8" + }, + "result": { + "position": { + "x": 77.38, + "y": 368.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "be8ef89d90cedf22a579e5d26a5fda28", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "17a0c4e8ae80077bb0af6ce76614087a", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bdd34c8cf9e42cda89711ab3713a69ff", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C8" + }, + "result": { + "position": { + "x": 77.38, + "y": 377.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0fcf8cbadf2c96070c49eb259b287453", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8d88be309e137990a6a81a468aa5e9b4", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d21a12b8dec55360d53d8609d669943a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B8" + }, + "result": { + "position": { + "x": 77.38, + "y": 386.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f7f6303988ef2920bb16724afa69f88a", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3be22156da42f7d9ebfae7dcb98d447e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "87310a1532fb827a49fd79037ef6b843", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A8" + }, + "result": { + "position": { + "x": 77.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c92d10507dc4d7773edf9dd959928b2b", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5011b3cecdc9edc29b103178ad4ba001", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1ae8b3ee1926c86102180ea764698c85", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H7" + }, + "result": { + "position": { + "x": 68.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d14949f54d015f2cff41b54934ad74bf", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "935a7c05e5b25d3bbf1c7a4e74d61f59", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "aeffa465b0a00beec26f112d6aa4bf09", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G7" + }, + "result": { + "position": { + "x": 68.38, + "y": 341.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "648f1d9682fcfd3db1df65d27b4daf0d", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "eb5c95a9762adbdb09285b7e40d5cf3b", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a29f0c6ae1535d39e03c1385b0020c22", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F7" + }, + "result": { + "position": { + "x": 68.38, + "y": 350.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "09a023cf2190bf1ab2f53fc12cac25cd", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "02b233df33d3bbfbc80400aef4a673de", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f8370c6311ab2be97ced4e48103d3f4d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E7" + }, + "result": { + "position": { + "x": 68.38, + "y": 359.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "24ebbcb639525b4bbe5ca2d6c3726551", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "89aa309b56a5cab6056151c16328a879", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6b29ec3b4986d473476f501c59451568", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D7" + }, + "result": { + "position": { + "x": 68.38, + "y": 368.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c3c69e177bb06851b1c7c29e93350888", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "820971d1aa87f0120ddeb56f15dc1200", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "118a76905b9e524f27d1fe08564ff664", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C7" + }, + "result": { + "position": { + "x": 68.38, + "y": 377.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "65014974120b50fbfb10f80a9d48c95e", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a1fa5be3e345864988076f45848e3eba", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a4c79d516791c3009ca1458dcf5a0b9a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B7" + }, + "result": { + "position": { + "x": 68.38, + "y": 386.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f067a6248bad4b83f51301c575d8c869", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "20228e610dfea5a198ea02a883949bd4", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "576455f3a5d3933c20da6af1d84d3d23", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "257911e91c5ff4745437fad2642a8b1d", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "07fc4164b2721da8c0b61da637c97a7e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8da1ef248ab5c85de0d34f6bfcbd7de5", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A12", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e31e294fa0fa9366a6204cdfba890c83", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H1" + }, + "result": { + "position": { + "x": 14.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a41f2be500d29c898b9408317e3143a0", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "371b7fac69c59b585ef44b5b403eef07", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8c1379f153d12f446d44ca37c680779e", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 14.38, + "y": 341.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a8003b6371de7e8aeee4714f89675217", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d3447610f3da4bb3df4ee45b525c1015", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8bae4193146b1b3e6ecad781fda558d6", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F1" + }, + "result": { + "position": { + "x": 14.38, + "y": 350.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cc958bb95666998dd17e5454bf6b86f9", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fec1d6c8233f653961cd474b105bcd5a", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bf5c1f5eaa9016114c35baa31f69447c", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E1" + }, + "result": { + "position": { + "x": 14.38, + "y": 359.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c26442bca4fd8421ca5fea3fa54b8405", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "32ad8bf50f5f748ef5dc4a778c351b78", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "593b6ab957edbd16ff2ccba10cc81413", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 368.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "37bf107670a631e9a92a9bd27327e2d9", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e1a2226b3aeb092e2f7b229cb2f2649d", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "892fc5886a5a90ab19261623d01e1ce1", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C1" + }, + "result": { + "position": { + "x": 14.38, + "y": 377.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "04a8715aa9c072ead1ee5e48fd517bee", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "89b3e82488b5069b1a5d9781eed386db", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c3e289a173e39343e492f840a43409ce", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B1" + }, + "result": { + "position": { + "x": 14.38, + "y": 386.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b0024cbf5a921b47920f766d5317cf7e", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6d9b557958eb4041c946823177a6a525", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "97d0c0cd1e40c99fdda5ea54c337010f", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 14.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "63c756d0e15e2f7c46e1a0e1f86aa7cd", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "68a597ff53c6865ecfd3be150b3c549c", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c177c1e3ebd1b7a5e29eb5d0749b338a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H2" + }, + "result": { + "position": { + "x": 23.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "be6902b9abe645acb4a97a41270797c2", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "85f6c9e13c8c3e7641ab56b280a69c18", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f2d4334434063b919ed116e7d1ce81b3", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G2" + }, + "result": { + "position": { + "x": 23.38, + "y": 341.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "af5972095785b5fa251602a6dfde9041", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c49ce737c28b866965703d67e24206a0", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "11203b5795c3e5767eb8cc901dfd315a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F2" + }, + "result": { + "position": { + "x": 23.38, + "y": 350.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a2934a4b9b57fb267d6e13bb098247bb", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c9ec96152ffa6b441fd20700e06fa57e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dd4c91a1885df077a87b0f8243c3bb6a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E2" + }, + "result": { + "position": { + "x": 23.38, + "y": 359.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3037c0a20adddf74ee7d4fd2a25b00c5", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5b62493686a068a87a958e8e19d213b1", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1e1655c11fbd103872722c2c2a3e65fb", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D2" + }, + "result": { + "position": { + "x": 23.38, + "y": 368.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4a7bb648e4d350769315f6edcba980ac", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a96b735ef4b542daaa9536ce097527e2", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2a0ed0e72b2f18b45f9ec248265fe016", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C2" + }, + "result": { + "position": { + "x": 23.38, + "y": 377.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8fc130912c080523fa9ba79032911b1f", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5efb88c17db8bbc70142fc16cc215849", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "65178a1567f99baf562cbeb9cadbad62", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B2" + }, + "result": { + "position": { + "x": 23.38, + "y": 386.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd851bade975a3d12e210de566e7f700", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "880ed4bafd9dbcf09ce318eaba4b263c", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "42106772f98b669e37544bab155cdcd7", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A2" + }, + "result": { + "position": { + "x": 23.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e1b8ed9f5c44726d00236c9b295516a0", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "23ca49d1754272e88fe099bd40d9faca", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "877ec65acfb065390e4bf7a8c074ee7f", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H3" + }, + "result": { + "position": { + "x": 32.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0ea8791cbeb5e701cd01d69d967e27dc", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "abe76eddb473705df349cb8340b876ed", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "af90a8dc3ca0d9f459c30bdc39c7c992", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G3" + }, + "result": { + "position": { + "x": 32.38, + "y": 341.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "818a6fe4c7599c8a5096014bc6ced7b7", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1f11643d98f7bd0c8cbb399a0209cd0f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c05d5f7d36844a586f6f9a85a057c2f0", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F3" + }, + "result": { + "position": { + "x": 32.38, + "y": 350.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2baca8c299a4fbff7f4bf298375d4de2", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f506af465640277f3de0163b9cf8dc17", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bcaa9233840b62dd04a4e14ed836ee47", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E3" + }, + "result": { + "position": { + "x": 32.38, + "y": 359.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8a5f8327a31b45a433dbfe0ab78e5f6f", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cae6759d694ff670eb4d392fcc61c884", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "466bcc4e60019b0a4b5f3f050838fdf2", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D3" + }, + "result": { + "position": { + "x": 32.38, + "y": 368.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "72cebe7829c0a9b61f6941a748fc5a3c", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e0b44a7965c6d4624b28350a1b2a6d38", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ccf5af1e159790b6d5bfe8d5c7910611", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C3" + }, + "result": { + "position": { + "x": 32.38, + "y": 377.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "148275ecdd68c79e0aac66fabd3f788d", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1855200817e768061064bbaa3162403d", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "783697fbf5bd51a9e5bc200463a7efcb", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B3" + }, + "result": { + "position": { + "x": 32.38, + "y": 386.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "76f2dc0e1f07df7ddfa8dab116baa5e3", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ee86912a612728dd716b40bf11146365", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a0a3622471dc28820343dd9badf5fc30", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 32.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "534352903657980cbdbd1e533fdb99b2", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7e4a5282ba9a63766f590e20ef2fd9be", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0612c83cdced113debafd2ffb1f5738a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H4" + }, + "result": { + "position": { + "x": 41.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "20442d68f77b39013a96faf51235b3a2", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4e5f5475ad6bed9f86ec38fb4b49b2aa", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ddd1abb6a2ea73ff2bbf07d483424e2d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G4" + }, + "result": { + "position": { + "x": 41.38, + "y": 341.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ab6efce78849e1855ad3f3af9d90cf9b", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1cb40e09400f7056ecfdc07ca3465fcb", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "372a86276e5755b4f74ba21c1c9ce55b", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F4" + }, + "result": { + "position": { + "x": 41.38, + "y": 350.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3685722ec6fb831432d56d2b9842a352", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d100dd3a15e63cf14cafb3d2637f4fb4", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e1b535e3c9e207a40223b0945b67289b", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E4" + }, + "result": { + "position": { + "x": 41.38, + "y": 359.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "126e055f234cb4d2aa5f4b9e39dfdc2d", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "480c54697bb7831d6b41194d004cdb49", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ca464193568b9af4c04fd6d0acdff9f9", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D4" + }, + "result": { + "position": { + "x": 41.38, + "y": 368.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cf89114d77ea21feb0476081687dd075", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d7bee3088b8f14c5c82a34482d907bef", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e996252f8e620a518c561f6c7cafa027", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C4" + }, + "result": { + "position": { + "x": 41.38, + "y": 377.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "81cfd4a93a9958aa6d670bef0c190b04", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0ebbd2aed8406663086203730813171b", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "96958a532d34f35c680ad217b218a360", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B4" + }, + "result": { + "position": { + "x": 41.38, + "y": 386.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2920fd70277f48be0c4c61660279a038", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "02ad9354623f6a4096396d1b26a35ae3", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "82744fab02f43397c58c3d7f01882b94", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A4" + }, + "result": { + "position": { + "x": 41.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ae61c6f3bc189dd71547d9d0597aab19", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "29b8b68fbc24cf23eab2ce551dcd139b", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e8c42b39a5e157e930639a6011fdd393", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H5" + }, + "result": { + "position": { + "x": 50.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3c235fde533078643982e46248459e38", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "df9c114032b36f846730ed5fbc420f62", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "aa3884c750256c60467df6e8bdfec403", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G5" + }, + "result": { + "position": { + "x": 50.38, + "y": 341.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1226a569fc64a585766ade98018f6470", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "43812b7d3eff4e1b1e5a5c7d00f42ed4", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7fecb063320c0fdf66e4ef56080bae08", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F5" + }, + "result": { + "position": { + "x": 50.38, + "y": 350.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "295ff8d6b69633ac9c10cca2fd7715ec", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9043e2a4adeacdf553dd6f4e8abb4cf6", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1d0eeb0458cb80d28ce2bb418d16d2aa", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E5" + }, + "result": { + "position": { + "x": 50.38, + "y": 359.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a34acec5dc987ee4b8b148ed9eafc473", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3489ceac1aa5626b9bc354891702e81e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "28e3f3e46980221eeee61caf4d3f8b6c", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D5" + }, + "result": { + "position": { + "x": 50.38, + "y": 368.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d9682c82cd756f0e4ab7b44ab122f97e", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "efd7fe01f5363818b972cc829a9d9b2b", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c8db6b4c0fb5ed1517de2b549e46814f", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C5" + }, + "result": { + "position": { + "x": 50.38, + "y": 377.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "991d1ea970ea7c9a3388975f1e65d2c5", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "04e1c6e9308b7c8f9d8a72bb7eed986d", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e028469328577914d6979c7ca54df9dd", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B5" + }, + "result": { + "position": { + "x": 50.38, + "y": 386.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "29096d1e8bcea20cdaacb42f04f88c9a", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4ff3a1e507f48ad655a393904bb87ec9", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "263ffdf13dc7d4325789eabdd3880d92", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A5" + }, + "result": { + "position": { + "x": 50.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "82e90fca23d05f6b505ceb2ff3530ce8", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fcdd158004042b340611f877ad80e876", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1fb601233b3c65ed4f67174200d5d854", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H6" + }, + "result": { + "position": { + "x": 59.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "52a68e26f39e2c83e8c63129eab68548", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e7a55276ff8a13c1557caa98a8cbe1ae", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c579dcc422d614bb875bdf1da40a7cc6", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G6" + }, + "result": { + "position": { + "x": 59.38, + "y": 341.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b6075b8cbc583be3c6cf772e5044fcf8", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6abdb95a8ce7957fa25c9d17a771abd9", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a9b11c6b0cc6122cff6881b9bb48fbe0", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F6" + }, + "result": { + "position": { + "x": 59.38, + "y": 350.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dbb5b121636123e25bf643562cb2f29d", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f97947d8dd29c2610682ef7a5b4758fc", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "099d5e23d1a810e21b274221dfd8ca63", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E6" + }, + "result": { + "position": { + "x": 59.38, + "y": 359.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2d687727201d2d5bd885f0013d0b6bd6", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b673e09d1e15cacca6496055d8ce1e09", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5b7f37166b7cc232af1ff2ba90bb52ae", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D6" + }, + "result": { + "position": { + "x": 59.38, + "y": 368.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2b2876f3b126ac832921b92f891f02fb", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "615c930997aa3d7512a4c6a7f992db7c", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2925bedd4a0f399b96ba1b791052d891", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C6" + }, + "result": { + "position": { + "x": 59.38, + "y": 377.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ded827c0cfc1eae8370fe5a530030907", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "deb75cf16192c99b4436ed9eac91a751", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3d0616c70492909c417a501fcacac5b0", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B6" + }, + "result": { + "position": { + "x": 59.38, + "y": 386.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "013c3a9025583fa9b715fb9a30f97936", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3ebc3d7a4d2725d96d03c3d4c136e771", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0105ab201af86161f28a72dc6c1674e1", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 59.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e0873c6907eca0e84a1c0a998d0ae8a3", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "54ef7582dff334bf42fc179b1cf597d1", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6e01967f5c5b810d7497bdcd1423f7e5", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A1", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7dbd3a0f1bd6f9f3340d5efb2ec353a7", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H10" + }, + "result": { + "position": { + "x": 423.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7b69a80483ad36b7bb62bb517303f137", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2755964b641b9a23802a7c3398db397a", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cf6e6aaa146bc592acd3f0b1b640d25f", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G10" + }, + "result": { + "position": { + "x": 423.38, + "y": 341.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9b36669c9d0b9c9775431a58931d4a93", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "959b38b1589e99d2ba9fffe679cf79da", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4db5b14be34ff233843566a30e9eaaee", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F10" + }, + "result": { + "position": { + "x": 423.38, + "y": 350.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c6890e42b3cbae9c98d53902b6fcc1c1", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "90c9ec7b540a5860ed44e7a40a1ef8c5", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "561afb0724a474bea02119dd0a80d887", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E10" + }, + "result": { + "position": { + "x": 423.38, + "y": 359.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "79bc5bc21de8d32213cb7896c91faedc", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8ef16139ea7d5488caecccd31909aa81", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f81f7e6b269822c9c2a5e3262e2324e1", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D10" + }, + "result": { + "position": { + "x": 423.38, + "y": 368.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "35abd555b9c91db0773a7a773a3ba821", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "074158002233c573cd4fe5d11ff8c503", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cb0042c149dba68c3c92d9e4ff5c0610", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C10" + }, + "result": { + "position": { + "x": 423.38, + "y": 377.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0f21c96834f593aa1cc740b1dd77cdb8", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3ecc6454c6f3b9469f7ad3b4a072a31e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7db567566187e75f8b71f3452bbe9974", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B10" + }, + "result": { + "position": { + "x": 423.38, + "y": 386.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "12dc3844186b29284e2df7f34a1d3808", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d5ce869d32df699540e6dc6072b5273f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3089e6a2190cc061fb01670b31edb938", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A10" + }, + "result": { + "position": { + "x": 423.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b3c5eab02d004666a7593249419ad052", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3bc1c65f78610974c641885299e2d8c6", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0d2f1d533572453a9c50d7e9cf9eea7d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H9" + }, + "result": { + "position": { + "x": 414.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b81175fca1af5b65e3ea24f1b6f24b72", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "702f89dd9bf1dab711a35c4ab3c40a75", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "acbc8d05a25092366f271273fb06c899", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G9" + }, + "result": { + "position": { + "x": 414.38, + "y": 341.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "529a30b986d159a2fd52e7bf44bad759", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e6d4ecd4b31375919d82436705c68cae", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "074a35994b4981f50932940aa60114c0", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F9" + }, + "result": { + "position": { + "x": 414.38, + "y": 350.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "374dd0e8e493d3c56468d5c34ad3e80b", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "71bee6d12397b150bdc3ce4721b03304", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ee49b5796a9a33185dcba1de6cb611a5", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E9" + }, + "result": { + "position": { + "x": 414.38, + "y": 359.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f3db0e6fa845da099dba7cdb85d24daa", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "00800ff335719cedf79ec269318ae551", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "25cfc86a090f26d7414f0effa28e3de7", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D9" + }, + "result": { + "position": { + "x": 414.38, + "y": 368.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "07f92974ce698d73ea7b8b9787f73192", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "da356919f097a5ad8e256e24c2132236", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5c71735d0d306348ea67eccde1201082", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C9" + }, + "result": { + "position": { + "x": 414.38, + "y": 377.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b2a4b075218021405560f3e1795926ad", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d225319a077991ae40e075bf17136ba7", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4164f12fb323c73275b6db3d87befa1d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B9" + }, + "result": { + "position": { + "x": 414.38, + "y": 386.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1c154e60f01c49bceb3ef7b2c207599e", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c63af70183bb9873621961297a41c369", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "150512268b54877a0bfa519cdb528756", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A9" + }, + "result": { + "position": { + "x": 414.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "64a8bed4d87c0f272423490631b523d1", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "68a566da4eef0177dee39de8e16ae224", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7420018f9eafd5c9beff377f0aa88d9e", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H8" + }, + "result": { + "position": { + "x": 405.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a3d61c332e1868a3ab6a1a26996fd4fc", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "03eabcb52c6864d38e5fc7d25eb39b9e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8694b98222b4c14c108cfd4a42078bc9", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G8" + }, + "result": { + "position": { + "x": 405.38, + "y": 341.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cfb900a1a396223689a1072fa768363a", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "37cc84cdf16ce2f9a503ea14d855d9dd", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fb271d9e24017d9a51f2bba5296b7673", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F8" + }, + "result": { + "position": { + "x": 405.38, + "y": 350.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "645d96fa0f311b0763610442acf19c0c", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "aa422cc71428ba4b5b3f42538303e29e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0f8f1cb8972b3131edac300e6960bc11", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E8" + }, + "result": { + "position": { + "x": 405.38, + "y": 359.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e154132dfb6dee1156d2aae43721ba34", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "057500321e55c1407fa63327f3d52ae6", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a92430c44f81de8ef4b84791b4407657", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D8" + }, + "result": { + "position": { + "x": 405.38, + "y": 368.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "418804e8aa37c95ff88fef5daf7376a8", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e7717649a000decbc244d2f4e74dad33", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "eca110999ae7fdc4ddea9979e1724175", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C8" + }, + "result": { + "position": { + "x": 405.38, + "y": 377.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a70d9ba30bbe320a02682ad0528bbabe", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c4b22f8d39e4b8ac5a12631ad7497f35", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1737cd414181f4f7836c6db330381eaf", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B8" + }, + "result": { + "position": { + "x": 405.38, + "y": 386.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6c358889668f79c49f6ba6ed7e87860f", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "92fe9864c7e6a5cf60e7bb7d455ffa4c", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0a77bd1d1dfa444d9430e44630f7bdef", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A8" + }, + "result": { + "position": { + "x": 405.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b5990df971afff4d737a85c5041fedca", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "942381538cd4e0006587abe44b2e0450", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9d646859c0068262d2df79a733378e0e", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H7" + }, + "result": { + "position": { + "x": 396.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1c8274f3e398238341a67fe41fdb10d0", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c5e2bbbbd454a138fe7d42ae9e8839db", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0ea1904f1bf91e45d8d633d31843a194", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G7" + }, + "result": { + "position": { + "x": 396.38, + "y": 341.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d39ab7e211f9d2b9c331550e2f253d14", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "55ae7743eea78cf18367814540a68f62", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a95c59a706d3a4315f14675e89d57994", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F7" + }, + "result": { + "position": { + "x": 396.38, + "y": 350.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a5d4347389185aa9b15c773874b0290a", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6101af4154d4b092b792d146ad1f1e8f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "560bc5ab0a8a4bb0446d981a9609a7c8", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E7" + }, + "result": { + "position": { + "x": 396.38, + "y": 359.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ee3cb767f5d5310613e5d641696f8ee2", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "17fd702202c9824a40e4a697d380a183", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f31d528f4032524ae0be891705b85f19", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D7" + }, + "result": { + "position": { + "x": 396.38, + "y": 368.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e8757776e617fd15e6fd1260e98ed6f1", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "34688f0879134d5990d66299beeb97a4", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1562ce3d26b4cced31d414c5cb9dd1e7", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C7" + }, + "result": { + "position": { + "x": 396.38, + "y": 377.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3e789171c5d344d9e05e769d0e86a7b7", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "917bc650dad124fcbb9a2438bdff60a3", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b892e4217ac02abc6c06b8a77387385b", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B7" + }, + "result": { + "position": { + "x": 396.38, + "y": 386.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "295f71cd158ac77904f756c4060e6793", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0f4756185b4a5e17519181ef5ab3d66d", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "61b015a9d363bb33fabf5a51d536c0e0", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 396.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "286f54cab33dadf13eadf628712f47f6", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "547c934ed4e83bdde9490c6a700ad333", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ba3eaed7e661cfafbf45410e8329eecf", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H6" + }, + "result": { + "position": { + "x": 387.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b40c9301228ec24c33fbd11f4fca25c1", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a6af618fbec807d6a91a446107333bc9", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "524cadcb2745e374166f453122db34b1", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G6" + }, + "result": { + "position": { + "x": 387.38, + "y": 341.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ae912dbb73244b0fc7b0c5d4a87dd005", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8e53ac696cfc1678263b514d68e0f426", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6fbffb6371920fb462cc219082321f42", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F6" + }, + "result": { + "position": { + "x": 387.38, + "y": 350.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "74dcb77a6f8b803535899163ecbb2454", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9507fe3156aa1878f60f0f900b65cec3", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ef85ae3d1eae94f84df2bd421f42ab2c", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E6" + }, + "result": { + "position": { + "x": 387.38, + "y": 359.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b228de93f81fe5783c520f635d6162d0", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c21eee7bdc17e3d47338d3d42e5ba792", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f045691a392d7aa568afb79f5e5806f6", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D6" + }, + "result": { + "position": { + "x": 387.38, + "y": 368.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ef5dcf3662be2bfef68c908147c2440b", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7863d112bfb165c1b8829aed536a0ab0", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cd5de4016c0d17b1d2472c9e588f83bb", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C6" + }, + "result": { + "position": { + "x": 387.38, + "y": 377.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d5e945200930eaf799b9ecb549dcb305", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b89da5e63b789e6935fad4a917b6c439", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0394a1f67d7487c34546da9a0e1e68cb", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B6" + }, + "result": { + "position": { + "x": 387.38, + "y": 386.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0985201f92b9b04036e56710e36b99e9", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7a7f83555ce072ef82bc1c4f9919f3ba", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "16bd83cd235f3023c44b570a92be3bee", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 387.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4639e7c42217f3cf195c822d6f683862", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7001052cad1700875411cc50e226b8db", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e20911cbafb8511028363952a08d0e01", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A12", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b0937e3920af4bbe7619104e0d9ed7d8", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H1" + }, + "result": { + "position": { + "x": 342.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7ed9623020a12eab5d87ca4f677fccdc", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ca8dcb166431f5a64e475e5ccbf02d3e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6f0fbbfc969b9d0a6d4940d51eb5f9fc", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 342.38, + "y": 341.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a88b411fc3096956860d7910187e4623", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "35542ca9fcf3e26d9faa954457d8a281", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a6f27b91605214d9c0f91967f70246d9", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F1" + }, + "result": { + "position": { + "x": 342.38, + "y": 350.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "86a65b7983710e9adc4b8a1e3734b3c6", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "981eafb5d50bb58889a96847b696de38", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "373c711bac00413b1d9c6e5884a190ba", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E1" + }, + "result": { + "position": { + "x": 342.38, + "y": 359.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "01ce7f1730d961bee936397a9b39b65b", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7d7998a5b09b5111a4f3d7e56a80e015", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "25a6fb51d2aeb1605c4a377bc50d3b54", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 342.38, + "y": 368.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "341967128fa10a2e0680a1065701550f", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a82e63ba42890436c622caf769a53103", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e43f75ab09e84d2638261f62a6921642", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C1" + }, + "result": { + "position": { + "x": 342.38, + "y": 377.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "792a53502535810427d82e7d3423a48a", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bba2a3713140042d16c03890ca6c3d8e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "899377fe4b4b5ab4528d0a7fd194de63", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B1" + }, + "result": { + "position": { + "x": 342.38, + "y": 386.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c0bf003c89da88422ee9df786a85c06b", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a7f6d088bb233ec54bc98038fc32026f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d0ab802ab5d39e9a713196791acc8200", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 342.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bbf9a01c731023679ad4484b83802cdc", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7392a8c8df856d893da74f2621fbd591", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "926dbdd0e4c516cb64ebe64787edb2e0", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H2" + }, + "result": { + "position": { + "x": 351.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0acaaf7343ab5bd96f0fb73b91516f65", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a3da180aff8b2c506c9548284ebf5fd8", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "528f910e2594ad18fcbbb138f2d0e36a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G2" + }, + "result": { + "position": { + "x": 351.38, + "y": 341.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "372f12bfdbeb9aa89636015435183c2e", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4de43ece7caf62a37066e3a1cb0faed1", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b2b75aa20bb25917a3e1944938a85356", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F2" + }, + "result": { + "position": { + "x": 351.38, + "y": 350.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "340aaa73f03e647f31a449fdb570f47d", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b429013d61d1a7b9e91996d9bd98f341", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5df928c66e7ebaff8eba953271ef0a5a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E2" + }, + "result": { + "position": { + "x": 351.38, + "y": 359.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2283928e7b62ce3d8a1e371e56027121", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7e823c62d6e696c9f3e1c67a352b214e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "230f93a6870a7adfb95604c909bb0932", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D2" + }, + "result": { + "position": { + "x": 351.38, + "y": 368.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cb7755c8237bab422004256f267b7b3a", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8deccc90d10f738b937e3222a0e16a43", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dd4cc07a997c4d11ffadab8bbd199535", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C2" + }, + "result": { + "position": { + "x": 351.38, + "y": 377.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "af3cc237a466f5e856df242607c8c0de", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "29dd7312ccb93a1141a057e247b7da54", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3981aeb8fdd92e72257f610b94205304", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B2" + }, + "result": { + "position": { + "x": 351.38, + "y": 386.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ffc884b47bf3b1ceebec7a140f6b8c69", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bcafef636252e9d6c7a2cb8cac938b87", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "93de9992af90654531a8473481bf09cf", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A2" + }, + "result": { + "position": { + "x": 351.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f42524dd0650308e0a2c3314a450b284", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1912fb91471114ee063426cd9afb6e79", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "47bb707aabccb8c98ed07ed83c45778a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H3" + }, + "result": { + "position": { + "x": 360.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "071a72f5ec91378b82728bc51531f72c", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "61149ed6ce5d2d567ae44f774c63e7b4", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c191466b2a8ecc97c82559e954ec53b2", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G3" + }, + "result": { + "position": { + "x": 360.38, + "y": 341.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0f06420df2cda5288e7a0f8e1f1e537f", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b8e26e43c0b8a01902ae020c821273a9", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "76d7ffa2250469acb86f8471268a7357", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F3" + }, + "result": { + "position": { + "x": 360.38, + "y": 350.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "82c22210037d35e8dd2526f7186005f0", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9a0c49941439a1470f6bd09f37d145e3", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "677698fc7cf2f7f9c936cd7683698f3a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E3" + }, + "result": { + "position": { + "x": 360.38, + "y": 359.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a821b799105c2cc7fc1267d65892be52", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "83cc563ef4916931fa00ceb7b0dffad6", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "26b835cb3014e34db5e9c3411bd35396", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D3" + }, + "result": { + "position": { + "x": 360.38, + "y": 368.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6e3806ae0a6dadb2b276e3883b5a6ff2", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bb7720c4baa6d9b0ef9ca774609248ba", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c42886adc207fc91d8c591b4861fe8d0", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C3" + }, + "result": { + "position": { + "x": 360.38, + "y": 377.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cd80cf4dd434caf0998a068b85e38ccb", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8d4ea09e7c2565e8d2b1461ab23fda15", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dcb7291ab93536dd17e34281a8c5373d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B3" + }, + "result": { + "position": { + "x": 360.38, + "y": 386.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ae0423e2c46f49f1aea8c1d940046def", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "71c521c1005c550ae7acc2defe4985ba", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5670eb410c1e4f0400deb4c01efa89b6", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 360.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d8bbc484d4535ca467927e32eb6ff30d", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "164e85a77bce24e4ade7f0776daf5814", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f9cb893e2a1bbfa97b3856e6ef8e5eed", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H4" + }, + "result": { + "position": { + "x": 369.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5e9d82f8b7a0548c6e4f876bf43d45e4", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e094aad575fca03e911a3a00e15dbae9", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2e1954c062b457db0f2feac2e14fc8b4", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G4" + }, + "result": { + "position": { + "x": 369.38, + "y": 341.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "286dca3d33a64fe089ed692b4bac3ddf", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "37b0a36b51c73851ccdf33201ca6fe24", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a032208841855326a8178ef84105ea91", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F4" + }, + "result": { + "position": { + "x": 369.38, + "y": 350.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b5d0ce3403cff5e5fb04cd26ba24466c", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "be466db458e74fc12846754b50216d6b", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8d58d9a76c6c2c111bc8e2d3367d2d01", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E4" + }, + "result": { + "position": { + "x": 369.38, + "y": 359.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "402584fcd38b2b99b478bfd4702be149", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2ca8673ad6d5fbf0a707c71d695baa7f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "88410674a560b5842c290a2a05c5b399", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D4" + }, + "result": { + "position": { + "x": 369.38, + "y": 368.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fc8b3555b984e41076e3b172f54ff6cc", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5718559d1f28f26a9bfde7fc112f74a9", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "85ed8801921352be92c1092ff285959f", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C4" + }, + "result": { + "position": { + "x": 369.38, + "y": 377.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ac60738ae4f26eaf80a0a40c90ca64f6", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d43087f090be4f00976373051317d2e0", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "555a8dcc048868221b1bc3cc6df926ac", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B4" + }, + "result": { + "position": { + "x": 369.38, + "y": 386.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fab04c4f54bf1a4251f034fe03d4cb85", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fdf82612ff980e9907246502e7f5058b", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e777ec605fb0042886a1cee2e99c5ef8", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A4" + }, + "result": { + "position": { + "x": 369.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "98d348eaced3cf3d267b235a7956f38d", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e1e605aa4bd6a4cedf87ff2db6914f4f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e40e38c2e49a9bfc6349402ab66c15d7", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H5" + }, + "result": { + "position": { + "x": 378.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8fd5140f861d5cb928817b70c52c7af6", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6f99ff52649e3f849ca00f0e78914a60", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f47ad841ccfbae8970bb44614796edc6", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G5" + }, + "result": { + "position": { + "x": 378.38, + "y": 341.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e8b4a76a6c496a1925e9922248787b7d", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "81be73e7d8d67a3b3d523d5f430ffb61", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0107324b1f779679a5022b667326774a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F5" + }, + "result": { + "position": { + "x": 378.38, + "y": 350.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b7a794eda36026dde09ec4ea4e952a6c", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2ab38a1cb45b1cf896584da4a536749a", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "be0d9d914e2b70acfd905a89c9692aab", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E5" + }, + "result": { + "position": { + "x": 378.38, + "y": 359.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "225f6c04d32e603573288067936d4a6a", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d6eccdd7a873e6db96625351eb618dfd", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "46592708e01f0f923dd36ad018162c52", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D5" + }, + "result": { + "position": { + "x": 378.38, + "y": 368.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "89de33f9164ab6a17d7675f6b5ddd7b2", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cee6812da90b0732507b0d5eff0b8d0a", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7423c8f6ca701c6499e528427c905cc6", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C5" + }, + "result": { + "position": { + "x": 378.38, + "y": 377.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "66247b61a54d7f6b398d4a11d42200e2", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d6568d009d285a68d4907679900fc439", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1befdd9aaf3dd1e0550da86f1959ed87", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B5" + }, + "result": { + "position": { + "x": 378.38, + "y": 386.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "16dc620122d17b59e770cb3f2ca6665c", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f14aded4ebf3e32b07f790ccbdd25d4c", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "11359c9722e9d55a9df1052083ac9b96", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A5" + }, + "result": { + "position": { + "x": 378.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "80db9f1422fca1c504fe022940cd4b39", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "529fe3907e0cee635b313fb86a5750a2", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d2dda93bb1966de0a916ab53657f51be", + "notes": [], + "params": { + "labwareId": "UUID", + "newLocation": { + "addressableAreaName": "A4" + }, + "strategy": "usingGripper" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2d5b6ba42f927352b1bf1c9c3247cb7c", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A1", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73cbdf81b2329618b9a02facd27ab8cb", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E10" + }, + "result": { + "position": { + "x": 423.38, + "y": 38.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d8e0048b86b386c3cf7fbed77f103a8d", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "771493b4c76a2ce6576a7ca183ece284", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ea323964f5dad9ccffff97c41975d3d9", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D10" + }, + "result": { + "position": { + "x": 423.38, + "y": 47.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "af920212f2bd0ade99d74f01932fc6f1", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ae1a8ea6a629d587300b722d169c4886", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b02aae1e2d0bf39f311efc3bdbcac1e5", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C10" + }, + "result": { + "position": { + "x": 423.38, + "y": 56.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "754e6104ead4f39190ce8dae92e0a2d7", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f663a6c825a8b57af22b498b667c7a37", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9bb224ad9f17af4c5026037ed8fd520f", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B10" + }, + "result": { + "position": { + "x": 423.38, + "y": 65.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f962ead2152756e477b9a7ddaf0431e8", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4613cd8a14e55b2b70167aebeff2cec3", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fb9f85008cefb60987e677920cb50f05", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A10" + }, + "result": { + "position": { + "x": 423.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8d4bff2efc7487527dc56de6558cda28", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d6642b30ceaa29201f485acfcba8874b", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c4a5997a0853547e216396f09557fbbc", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E9" + }, + "result": { + "position": { + "x": 414.38, + "y": 38.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "06f1994fcf44a2d7b7ce53b3fbc6fb88", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "78dee0c6eb213a83b04fe7b8a3ee60e3", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e4d95a0424c909ae87bc23d35d597d5f", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D9" + }, + "result": { + "position": { + "x": 414.38, + "y": 47.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3efc677302f2729098a59a54946cdfb1", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d4f02aaa88bc124dce24e059309d6531", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e230e4367265f02486a9aed4a65336cc", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C9" + }, + "result": { + "position": { + "x": 414.38, + "y": 56.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3a025c8a11259fbe7857dfc0b49baba0", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "adbc478d45b41628e94b5395245b2957", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "540a5793f120c3f67d1f684596965cf0", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B9" + }, + "result": { + "position": { + "x": 414.38, + "y": 65.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a72a835031c98d97ae11c522179490fd", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8cf48279ef652f9528624573cef06a2b", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7b5f4bc3bfbf1cba3a3a6bbf3c6681d1", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A9" + }, + "result": { + "position": { + "x": 414.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e71eb989d35a51f7ec8a6daf34617efa", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d68d1c9ea9f3e4a0ec0daf7b0f038330", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e27675102957b4cb63f98ab91d9c7ed5", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A12", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3868ab1c535a7c62d346cb81e233d0aa", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E1" + }, + "result": { + "position": { + "x": 342.38, + "y": 38.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1d80638cf0da1534f235aa0c193d7dfe", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ea7a8c70ef4f39161d991ec2161ce473", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a0cf930e28e72166bc2800b02649dfd7", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 342.38, + "y": 47.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6085215f281f9121a8eaebdb7bc77d36", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5f3c2b62a92b4568ef62b5a1970dfcd1", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "89f7dca9b8fb6340c94e74d0d861be1f", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C1" + }, + "result": { + "position": { + "x": 342.38, + "y": 56.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "47d4ada22b8ab83448ed24ff94f304a6", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8666db9e335cfe8f3ffa02052d7e6790", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "63c6ac8b16588d07bef6bef5579b9297", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B1" + }, + "result": { + "position": { + "x": 342.38, + "y": 65.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "303fd0cb0235b01895b4c54dd7ddc7f5", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b8c1f2b8845918db0e97bd6a656f24ae", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d66c80770fedfdba9d8461edaddb88ce", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 342.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9684fffe64a093ce8585cd42be67a07e", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6a8d26b000134cc223f34009fcc7f115", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "aec438e91cfb0d9748b0b76ea2239df5", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E2" + }, + "result": { + "position": { + "x": 351.38, + "y": 38.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "994aeb1e4c1823a00b7c63a3391efe12", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e9eb706de6c253ea0818b189807839b8", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1ebab681646674b37a51b79d90a16e7a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D2" + }, + "result": { + "position": { + "x": 351.38, + "y": 47.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "09a0da30dd760da3ad9752775399e569", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b3acfa0e8398e96e0754bb0ea98da2b8", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e9eb56fb3ea086734c70754c04d321ca", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C2" + }, + "result": { + "position": { + "x": 351.38, + "y": 56.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "13b5bf16f74cd266abae0e4f17613d5d", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8487ed07b348c791d374152b446b2fbd", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ca8e42e57e7ca116a8dfe5bf0a4dd645", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B2" + }, + "result": { + "position": { + "x": 351.38, + "y": 65.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8c475800a139f9326642270e06acbae2", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "48028d9157d16f180cfec1f00a1f8dc9", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "12058ef8ec196af9747306718d200ecc", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A2" + }, + "result": { + "position": { + "x": 351.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cf5cab6b7af81f0bcb5be88e0c6e5d79", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c22631db547ad09ac676e1788d5bff90", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a14d019655f85c97310c6524ec9ffde3", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "H1", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d4e7cb68291e27a1f24a3455ba0c9b05", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A8" + }, + "result": { + "position": { + "x": 405.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "901af170b27283fef67e3573e4dd5bd5", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "eac45c472880dd2d22db92bdd18e661d", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6323b627a98e5335780ca564b659939a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B8" + }, + "result": { + "position": { + "x": 405.38, + "y": 65.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "85c87dcd75c43a491334684345399396", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3d7eac2e3cd50600dfbb68a591a68fbc", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "432788e777d39b7ca9deefdb0014bcfa", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C8" + }, + "result": { + "position": { + "x": 405.38, + "y": 56.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "173aa11041d13035eaedef7bfd94a857", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "78d8d762bb8d4393b512fa87c4829bff", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "74fe4f9f9ff7eb8b42f2be01ad5f19d7", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D8" + }, + "result": { + "position": { + "x": 405.38, + "y": 47.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2e434f98998e9825faed5810b6072343", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f36dfb0274e4d45a6bc887d3cd3a2e3a", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4d49deec216abc515b0b54a9feab4ef5", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E8" + }, + "result": { + "position": { + "x": 405.38, + "y": 38.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "22535ef2f08f40f3552c2eabdaeff011", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "feb7608f156ecefd90b1eae3fa4e2545", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9001c5354e234fc7a8f6e6c4ed661e45", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 396.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "218dd92475206713aa3f0766713519a5", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0fa7d6c73ae8bb4e89dac2f86599eec0", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "346b1fcb831aec9e2ba1d98d9f245341", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B7" + }, + "result": { + "position": { + "x": 396.38, + "y": 65.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fff5a79b19d082c22f4be41759129d4c", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2eec9d36f870a016a055cc32583cff34", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "943cc0579d5b7a06412296d4cb83287c", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C7" + }, + "result": { + "position": { + "x": 396.38, + "y": 56.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6e95646589b15267cdbc219b3de4fd07", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ebf8e73441f89b5ec73ebc663538df61", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "209e2151129b775391851f103e411e7a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D7" + }, + "result": { + "position": { + "x": 396.38, + "y": 47.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dc853f9695d7810f92db085039dc6d04", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "00ad929bdb54040745d143ccd87bae7d", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e532da39d332f39a9ce711cd8b268e46", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E7" + }, + "result": { + "position": { + "x": 396.38, + "y": 38.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e8e2f1a9d8544ed151a82b588dba3dfe", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "edd344364f59050b273c4ebec1dadb17", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b9534f992947ce499bda0eff712950cd", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 387.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "45fe4b983b3c1de706bec152a214b4f2", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0a76fa44f105392882cabbc07f7f073a", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0249478fc14c18568c5144924e45d1b6", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B6" + }, + "result": { + "position": { + "x": 387.38, + "y": 65.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0cf220923a384dcf747c53d6952425ab", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cdd6446cfbbbd7b5e01b91e2220208e3", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2dfa9a1b49bc515402daccab67cd4f01", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C6" + }, + "result": { + "position": { + "x": 387.38, + "y": 56.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0ba82ca5f133111b0349b52445ae895c", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dda485025195b674fc284a254a7f4c1f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2775221a31aa813108e994fe79e02829", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D6" + }, + "result": { + "position": { + "x": 387.38, + "y": 47.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fb894933f6aefd7646f2b80d84c983f0", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d6da63260436dfefc42c45bee23fa512", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "99733a8b5afec002991fcaa786b3fd59", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E6" + }, + "result": { + "position": { + "x": 387.38, + "y": 38.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b05df60be2caf97bc0822af4b8cfa75f", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9ab5ff51b45bc34be4a9f64831956bb9", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7c55b0195c4185722601329cbda61249", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "H12", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "61e71d8116fd5362e76f5c38402eeb89", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 360.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "db7cebeb6f7f7cd452ccce25a3f090c0", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "93d63b4242ff008d4729bc8452d42afb", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3f83cab4f076e9d3810483ab035b28cf", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B3" + }, + "result": { + "position": { + "x": 360.38, + "y": 65.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7ef2af786a74feb1a5b4a0ebdfd4238b", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3a02c83f62d1ac7037956019dd111f05", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b8367f70f7958e19225082886a2bd981", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C3" + }, + "result": { + "position": { + "x": 360.38, + "y": 56.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cf67f06e478e0f633829e90567360d69", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "25b5c8019503537d4091370c23ebd8d0", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8e86cd67f5f1c50deb291876676c6b5e", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D3" + }, + "result": { + "position": { + "x": 360.38, + "y": 47.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bed3e1b915e2351366f8949d1b398782", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1ded024e4ef208dd947ee8688198d1fd", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6ee2ca5e157f4924da97a17e46915c9b", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E3" + }, + "result": { + "position": { + "x": 360.38, + "y": 38.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "03a8b3b5655fa79205722323d21545a0", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e813722f8f6270290110d6bb9859e587", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5e773ddb3f4e25e53f36621dfacbf08e", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A4" + }, + "result": { + "position": { + "x": 369.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c1448312b1773ba15764230aabf8cc61", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7b99737eb7fa57cfa299a19c5cbf7927", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "858276422b785499c894bc1722aa1997", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B4" + }, + "result": { + "position": { + "x": 369.38, + "y": 65.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b577575564bad863511a32b7144e4e0d", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fc015272c344b3ca5db148219e4c6b93", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7fca504e083734021326b888b4bc6610", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C4" + }, + "result": { + "position": { + "x": 369.38, + "y": 56.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "42ee6c141ab105d1fcc2073512e17dbf", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d6e777e1706e97b1b5882b1156e0bb66", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7e59fbac3ac205268e836a90edffd385", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D4" + }, + "result": { + "position": { + "x": 369.38, + "y": 47.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3a23e407340d4539285ba4351f593e6e", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "959569ad59d9c3ae34b614164f40d94b", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "45f1bbc3107770a38d70e1d7f3ead45c", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E4" + }, + "result": { + "position": { + "x": 369.38, + "y": 38.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bf306abead081d95e4a192269b140230", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d5b0cd34a88a4a5d2f267aa476357fc0", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c5d821692ad59d0fa1e46e864ab5cc97", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A5" + }, + "result": { + "position": { + "x": 378.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "302a6825e48d93d7a0e57be230d7f8d6", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e32ba4e7b814c5fd9f4e093ef39b222e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "36e4b0a094c465342bfd68ef7555bbb2", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B5" + }, + "result": { + "position": { + "x": 378.38, + "y": 65.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "736a482704adb52db4dd700f29a3bfb2", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bb05deac414a8ed549c043f290ceea11", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a986c49bfb22abe8e6989b328d949056", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C5" + }, + "result": { + "position": { + "x": 378.38, + "y": 56.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "72108834e48b339bf07e4b6bd6c4d95f", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "95c15c9ecfb267f98a0b6cd0bad65a3f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "22bf19af2ea3749c773fc9dfc147e542", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D5" + }, + "result": { + "position": { + "x": 378.38, + "y": 47.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ba16adf0e01f2fefa0807994f4d83894", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4bb5907e2b9d8004130bbc681dc1beeb", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ca5931fb5f63397d65d9d6b976842e68", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E5" + }, + "result": { + "position": { + "x": 378.38, + "y": 38.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1d1562e9860df353baffa1a1861dcb2c", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bc969b48325a9173b608f5ab86ce7eb5", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d2fe55dc114566815da41c8ba0d7ed01", + "notes": [], + "params": { + "labwareId": "UUID", + "newLocation": { + "addressableAreaName": "D4" + }, + "strategy": "usingGripper" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cc2f605bb3295a00501d383928a8e364", + "notes": [], + "params": { + "labwareId": "UUID", + "newLocation": { + "slotName": "D2" + }, + "strategy": "usingGripper" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "633e183d9012553ad1809bfc06999d02", + "notes": [], + "params": { + "labwareId": "UUID", + "newLocation": { + "slotName": "A3" + }, + "strategy": "usingGripper" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b9bfa86a5a8244e63655ffd7a450963f", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "H1", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4700e418bd8c2ffea896fad82c64295d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H10" + }, + "result": { + "position": { + "x": 423.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2dcd7dc479fec3fd63f3b26e9e45dc05", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b0c3d37aac4f7a0b8172d487f1fc6f5b", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a994d1fc8db2ebc39f8f98a62c81affd", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H9" + }, + "result": { + "position": { + "x": 414.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "25a825954529a800a5928ce1e33484a2", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "69ce71aadb2f05176236bdf5fb550566", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cd9e65b037015c9fc0f84e49bee9f9f1", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H8" + }, + "result": { + "position": { + "x": 405.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7db1b8c7eb24c173de8cd2735028fd63", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5d82c56715e0e1c7b6aedabd9f2663ac", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e9d1d18e882409beb58e37ce89f2d792", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H7" + }, + "result": { + "position": { + "x": 396.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "47b5d87c0b15e2075b2623657c95d9cc", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9eebc15a777c2e97e54f3e5a8ce0c104", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6cd18667bfc31771d8722a01f0bff1e6", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H6" + }, + "result": { + "position": { + "x": 387.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a80bccad5e81fd5898a0ce085d4f4a3c", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d63a9d48529b5073845c250bffb9ecfa", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ad47b4391b17dfeeeed630cd2ea5fc8b", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "H12", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d7a2ee27aa7647caee8c2ce4bf424acd", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H1" + }, + "result": { + "position": { + "x": 342.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1ff853b12567a852f5771a91133fa3d4", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c40b60afea39e27c42fecef375da9295", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bb22d4b0945d05ebedf42ac9cf72de89", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H2" + }, + "result": { + "position": { + "x": 351.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ca49d073071619bbcd042230f3ebf4c5", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3495edb8ce7ece223d069f5430194aae", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ef035a90a6b88674f6501ca27bcae33c", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H3" + }, + "result": { + "position": { + "x": 360.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d6143666860a09f5f270ffff2ac08487", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cd3ca017f71cbff64f6842e3875ac4a8", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "96a1201608ccb5e913321b49b4d934ad", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H4" + }, + "result": { + "position": { + "x": 369.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d63d69e7bb71b538495154522e124fdc", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f84bf3252b2798569437c702563f6e2e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "835b162c41e1ac0d075cf2cbc687bed6", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H5" + }, + "result": { + "position": { + "x": 378.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c59e1e3d168ab2eeb85fc63fd4e8fb8", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "06ad657f3dda981932c591055f13f326", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a1a15e7f8b141c887ff70c444aae7ed3", + "notes": [], + "params": { + "labwareId": "UUID", + "newLocation": { + "slotName": "B2" + }, + "strategy": "usingGripper" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fe757ed1fa44666d54979161797ec39d", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "H1", + "style": "ROW" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2d3961a6cbf87adbf3a35c65ae78b5de", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 178.38, + "y": 288.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cc978ccc9e5d7a64c00dc43a6c45da96", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3fa3699fd7e32e51208e9252253a9429", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e4a0bf4a1aeb2911f441bb657d95da1a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B1" + }, + "result": { + "position": { + "x": 178.38, + "y": 279.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "77b3c8fa88495bc30cbc3c38e45d633d", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5f0f652e1b63d96f68c48806f36dc499", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "91f8ae768aaa6504e68513b56792d3e4", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C1" + }, + "result": { + "position": { + "x": 178.38, + "y": 270.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f501e8b4e0a2a34ec63b349605c21f4a", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cb390aa7298262f6d68a7566df4b8300", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3be5a2eaca6153b0dd6c1497cada434d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "45a6f379ac67d6bd897c451233cf0415", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ffb6a397ba17f325e856412e8a0d9645", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3eeabcf1a927ed5e3cc89b311ccbd001", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E1" + }, + "result": { + "position": { + "x": 178.38, + "y": 252.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ff3dcaf653544e8a99afc3ba1560258b", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5432505fcb798867655ee2b04dd5152e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2cf6a56ac40778276229458d25964bce", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F1" + }, + "result": { + "position": { + "x": 178.38, + "y": 243.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "92212e8dae667dfe61e8d360da7e39f7", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9b61c4b6f907735084e434621e6724a1", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "917a84f401daf656bb9a192269e270e3", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 178.38, + "y": 234.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "052f464e0a10c3c0f823369ee761d120", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9b55d869054cedc0921a9040eb53a594", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "834a19a05914f4b7cdab77548b69642d", + "notes": [], + "params": { + "labwareId": "UUID", + "newLocation": { + "slotName": "C3" + }, + "strategy": "usingGripper" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f418041b1043d09e3f78480832e8eb37", + "notes": [], + "params": { + "labwareId": "UUID", + "newLocation": { + "slotName": "A1" + }, + "strategy": "usingGripper" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4c61b023023208d28a31697120f5025c", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "H1", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "22a8ebc62b5faa76a138cafc451c5306", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H12" + }, + "result": { + "position": { + "x": 113.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6615eacf6dc74dbd805e6d7b1002edd7", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "23db3dda8d5e9dce4b0393cec67c0938", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ff94a12288debec3748142f51509f6f2", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H11" + }, + "result": { + "position": { + "x": 104.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1c4251a2b539ab053ad0519af4621672", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "72cabeaa6de17e253774ef9126a24bc5", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "25727b16cca23eb448e157ce1c3704bd", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H10" + }, + "result": { + "position": { + "x": 95.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4d6716fd265e148c4fa2e47ac0b259ed", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "38693fcc9dcaa6910654c14ded4e9f84", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4630bf7e11af5cde23ca3cadeac80e23", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H9" + }, + "result": { + "position": { + "x": 86.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d034ec1445544bc84ed7cc71830ca2af", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a877dc5069115b586b611ecbc73db1be", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6e86f95e7c85bbaa107edd2a1e282eab", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H8" + }, + "result": { + "position": { + "x": 77.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "480b681945214388512545afb589d2e4", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5568d8f9de34ab32ecb792657eeaad5a", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "55772ace7bb27890823195c1eb9bc6cd", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H7" + }, + "result": { + "position": { + "x": 68.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c3db6379991de2c177b4eeb5c68a6924", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d1df57569ed3b8f26912aef93b738294", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c884bd0a43bdfb9f2d8d6e82f015d3b6", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "H12", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "480903e9ad10b20440c766bd3c1e40e5", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H1" + }, + "result": { + "position": { + "x": 14.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3d51375fb89843b06e38477ace5fb3a0", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "896fd02263673b40d86ff01a5de8a169", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "422ed8642bac64a84f425649d70a885e", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H2" + }, + "result": { + "position": { + "x": 23.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c7b65b463fff9cdc9768c71e6869ca0f", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5bc183d00f2791ff60254bb7d2cdf98b", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "92b95c1912905a3b360a918b4de886ed", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H3" + }, + "result": { + "position": { + "x": 32.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "40d21c65925f17ed3fb761f2bdfbd0e6", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6e6d9cd182d5890bcb21d77eb2409038", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5dc4b08c3d4bd692055f0f0b1a70a6fc", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H4" + }, + "result": { + "position": { + "x": 41.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fb04a83e5d255f980694218baa92d76f", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "be8d296ef3d8e0a86f1d466e3fff8336", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7482b15057987979ab99b25cba533ba2", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H5" + }, + "result": { + "position": { + "x": 50.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4a6c319ff0ffc9f3491fe02fc06ec8fe", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "20054d01b064fe8e0f42f0730d66d1a1", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cc69f9f62eae9d852d23131aee055ce3", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H6" + }, + "result": { + "position": { + "x": 59.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "381535c145f0445202baa2766d46ed52", + "notes": [], + "params": { + "addressableAreaName": "movableTrashB3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 257.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b94c4ce70f53fb36fe77c397e17247eb", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [], + "files": [ + { + "name": "Flex_S_v2_20_96_AllCorners.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_flex_96_tiprack_1000ul/1", + "displayName": "A1 Corner Tiprack 1", + "id": "UUID", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "C3" + } + }, + { + "definitionUri": "opentrons/opentrons_flex_96_tiprack_1000ul/1", + "displayName": "D1 Corner Tiprack", + "id": "UUID", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "D1" + } + }, + { + "definitionUri": "opentrons/opentrons_flex_96_tiprack_1000ul/1", + "displayName": "A3 Corner Tiprack 1", + "id": "UUID", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "D2" + } + }, + { + "definitionUri": "opentrons/opentrons_flex_96_tiprack_1000ul/1", + "displayName": "D3 Corner Tiprack", + "id": "UUID", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "D3" + } + }, + { + "definitionUri": "opentrons/opentrons_flex_96_tiprack_1000ul/1", + "displayName": "A3 Corner Tiprack 2", + "id": "UUID", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "A3" + } + }, + { + "definitionUri": "opentrons/opentrons_flex_96_tiprack_1000ul/1", + "displayName": "A1 Corner Tiprack 2", + "id": "UUID", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "A1" + } + } + ], + "liquids": [], + "metadata": {}, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_96" + } + ], + "result": "ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[13e5a9c68b][Flex_S_v2_20_P8X1000_P50_LLD].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[13e5a9c68b][Flex_S_v2_20_P8X1000_P50_LLD].json new file mode 100644 index 00000000000..3273a66a921 --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[13e5a9c68b][Flex_S_v2_20_P8X1000_P50_LLD].json @@ -0,0 +1,6191 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "A2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.75, + "zDimension": 99 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 23.9, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons Flex 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_flex_96_tiprack_1000ul", + "quirks": [], + "tipLength": 95.6, + "tipOverlap": 10.5 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 121 + } + }, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.38, + "z": 1.5 + }, + "A10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.38, + "z": 1.5 + }, + "A11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.38, + "z": 1.5 + }, + "A12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.38, + "z": 1.5 + }, + "A2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.38, + "z": 1.5 + }, + "A3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.38, + "z": 1.5 + }, + "A4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.38, + "z": 1.5 + }, + "A5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.38, + "z": 1.5 + }, + "A6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.38, + "z": 1.5 + }, + "A7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.38, + "z": 1.5 + }, + "A8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.38, + "z": 1.5 + }, + "A9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.38, + "z": 1.5 + }, + "B1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.38, + "z": 1.5 + }, + "B10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.38, + "z": 1.5 + }, + "B11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.38, + "z": 1.5 + }, + "B12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.38, + "z": 1.5 + }, + "B2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.38, + "z": 1.5 + }, + "B3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.38, + "z": 1.5 + }, + "B4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.38, + "z": 1.5 + }, + "B5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.38, + "z": 1.5 + }, + "B6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.38, + "z": 1.5 + }, + "B7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.38, + "z": 1.5 + }, + "B8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.38, + "z": 1.5 + }, + "B9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.38, + "z": 1.5 + }, + "C1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.38, + "z": 1.5 + }, + "C10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.38, + "z": 1.5 + }, + "C11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.38, + "z": 1.5 + }, + "C12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.38, + "z": 1.5 + }, + "C2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.38, + "z": 1.5 + }, + "C3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.38, + "z": 1.5 + }, + "C4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.38, + "z": 1.5 + }, + "C5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.38, + "z": 1.5 + }, + "C6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.38, + "z": 1.5 + }, + "C7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.38, + "z": 1.5 + }, + "C8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.38, + "z": 1.5 + }, + "C9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.38, + "z": 1.5 + }, + "D1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.38, + "z": 1.5 + }, + "D10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.38, + "z": 1.5 + }, + "D11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.38, + "z": 1.5 + }, + "D12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.38, + "z": 1.5 + }, + "D2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.38, + "z": 1.5 + }, + "D3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.38, + "z": 1.5 + }, + "D4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.38, + "z": 1.5 + }, + "D5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.38, + "z": 1.5 + }, + "D6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.38, + "z": 1.5 + }, + "D7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.38, + "z": 1.5 + }, + "D8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.38, + "z": 1.5 + }, + "D9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.38, + "z": 1.5 + }, + "E1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.38, + "z": 1.5 + }, + "E10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.38, + "z": 1.5 + }, + "E11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.38, + "z": 1.5 + }, + "E12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.38, + "z": 1.5 + }, + "E2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.38, + "z": 1.5 + }, + "E3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.38, + "z": 1.5 + }, + "E4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.38, + "z": 1.5 + }, + "E5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.38, + "z": 1.5 + }, + "E6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.38, + "z": 1.5 + }, + "E7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.38, + "z": 1.5 + }, + "E8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.38, + "z": 1.5 + }, + "E9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.38, + "z": 1.5 + }, + "F1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.38, + "z": 1.5 + }, + "F10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.38, + "z": 1.5 + }, + "F11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.38, + "z": 1.5 + }, + "F12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.38, + "z": 1.5 + }, + "F2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.38, + "z": 1.5 + }, + "F3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.38, + "z": 1.5 + }, + "F4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.38, + "z": 1.5 + }, + "F5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.38, + "z": 1.5 + }, + "F6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.38, + "z": 1.5 + }, + "F7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.38, + "z": 1.5 + }, + "F8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.38, + "z": 1.5 + }, + "F9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.38, + "z": 1.5 + }, + "G1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.38, + "z": 1.5 + }, + "G10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.38, + "z": 1.5 + }, + "G11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.38, + "z": 1.5 + }, + "G12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.38, + "z": 1.5 + }, + "G2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.38, + "z": 1.5 + }, + "G3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.38, + "z": 1.5 + }, + "G4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.38, + "z": 1.5 + }, + "G5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.38, + "z": 1.5 + }, + "G6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.38, + "z": 1.5 + }, + "G7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.38, + "z": 1.5 + }, + "G8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.38, + "z": 1.5 + }, + "G9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.38, + "z": 1.5 + }, + "H1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.38, + "z": 1.5 + }, + "H10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.38, + "z": 1.5 + }, + "H11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.38, + "z": 1.5 + }, + "H12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.38, + "z": 1.5 + }, + "H2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.38, + "z": 1.5 + }, + "H3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.38, + "z": 1.5 + }, + "H4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.38, + "z": 1.5 + }, + "H5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.38, + "z": 1.5 + }, + "H6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.38, + "z": 1.5 + }, + "H7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.38, + "z": 1.5 + }, + "H8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.38, + "z": 1.5 + }, + "H9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.38, + "z": 1.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50de88d471ad3910c29207fb6df4502e", + "notes": [], + "params": { + "loadName": "opentrons_flex_96_tiprack_50ul", + "location": { + "slotName": "B2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.75, + "zDimension": 99 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 23.9, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons Flex 96 Tip Rack 50 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_flex_96_tiprack_50ul", + "quirks": [], + "tipLength": 57.9, + "tipOverlap": 10.5 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 121 + } + }, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 74.38, + "z": 1.5 + }, + "A10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 74.38, + "z": 1.5 + }, + "A11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 74.38, + "z": 1.5 + }, + "A12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 74.38, + "z": 1.5 + }, + "A2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 74.38, + "z": 1.5 + }, + "A3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 74.38, + "z": 1.5 + }, + "A4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 74.38, + "z": 1.5 + }, + "A5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 74.38, + "z": 1.5 + }, + "A6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 74.38, + "z": 1.5 + }, + "A7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 74.38, + "z": 1.5 + }, + "A8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 74.38, + "z": 1.5 + }, + "A9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 74.38, + "z": 1.5 + }, + "B1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 65.38, + "z": 1.5 + }, + "B10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 65.38, + "z": 1.5 + }, + "B11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 65.38, + "z": 1.5 + }, + "B12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 65.38, + "z": 1.5 + }, + "B2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 65.38, + "z": 1.5 + }, + "B3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 65.38, + "z": 1.5 + }, + "B4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 65.38, + "z": 1.5 + }, + "B5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 65.38, + "z": 1.5 + }, + "B6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 65.38, + "z": 1.5 + }, + "B7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 65.38, + "z": 1.5 + }, + "B8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 65.38, + "z": 1.5 + }, + "B9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 65.38, + "z": 1.5 + }, + "C1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 56.38, + "z": 1.5 + }, + "C10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 56.38, + "z": 1.5 + }, + "C11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 56.38, + "z": 1.5 + }, + "C12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 56.38, + "z": 1.5 + }, + "C2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 56.38, + "z": 1.5 + }, + "C3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 56.38, + "z": 1.5 + }, + "C4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 56.38, + "z": 1.5 + }, + "C5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 56.38, + "z": 1.5 + }, + "C6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 56.38, + "z": 1.5 + }, + "C7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 56.38, + "z": 1.5 + }, + "C8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 56.38, + "z": 1.5 + }, + "C9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 56.38, + "z": 1.5 + }, + "D1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 47.38, + "z": 1.5 + }, + "D10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 47.38, + "z": 1.5 + }, + "D11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 47.38, + "z": 1.5 + }, + "D12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 47.38, + "z": 1.5 + }, + "D2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 47.38, + "z": 1.5 + }, + "D3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 47.38, + "z": 1.5 + }, + "D4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 47.38, + "z": 1.5 + }, + "D5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 47.38, + "z": 1.5 + }, + "D6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 47.38, + "z": 1.5 + }, + "D7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 47.38, + "z": 1.5 + }, + "D8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 47.38, + "z": 1.5 + }, + "D9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 47.38, + "z": 1.5 + }, + "E1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 38.38, + "z": 1.5 + }, + "E10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 38.38, + "z": 1.5 + }, + "E11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 38.38, + "z": 1.5 + }, + "E12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 38.38, + "z": 1.5 + }, + "E2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 38.38, + "z": 1.5 + }, + "E3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 38.38, + "z": 1.5 + }, + "E4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 38.38, + "z": 1.5 + }, + "E5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 38.38, + "z": 1.5 + }, + "E6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 38.38, + "z": 1.5 + }, + "E7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 38.38, + "z": 1.5 + }, + "E8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 38.38, + "z": 1.5 + }, + "E9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 38.38, + "z": 1.5 + }, + "F1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 29.38, + "z": 1.5 + }, + "F10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 29.38, + "z": 1.5 + }, + "F11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 29.38, + "z": 1.5 + }, + "F12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 29.38, + "z": 1.5 + }, + "F2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 29.38, + "z": 1.5 + }, + "F3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 29.38, + "z": 1.5 + }, + "F4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 29.38, + "z": 1.5 + }, + "F5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 29.38, + "z": 1.5 + }, + "F6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 29.38, + "z": 1.5 + }, + "F7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 29.38, + "z": 1.5 + }, + "F8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 29.38, + "z": 1.5 + }, + "F9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 29.38, + "z": 1.5 + }, + "G1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 20.38, + "z": 1.5 + }, + "G10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 20.38, + "z": 1.5 + }, + "G11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 20.38, + "z": 1.5 + }, + "G12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 20.38, + "z": 1.5 + }, + "G2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 20.38, + "z": 1.5 + }, + "G3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 20.38, + "z": 1.5 + }, + "G4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 20.38, + "z": 1.5 + }, + "G5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 20.38, + "z": 1.5 + }, + "G6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 20.38, + "z": 1.5 + }, + "G7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 20.38, + "z": 1.5 + }, + "G8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 20.38, + "z": 1.5 + }, + "G9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 20.38, + "z": 1.5 + }, + "H1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 11.38, + "z": 1.5 + }, + "H10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 11.38, + "z": 1.5 + }, + "H11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 11.38, + "z": 1.5 + }, + "H12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 11.38, + "z": 1.5 + }, + "H2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 11.38, + "z": 1.5 + }, + "H3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 11.38, + "z": 1.5 + }, + "H4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 11.38, + "z": 1.5 + }, + "H5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 11.38, + "z": 1.5 + }, + "H6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 11.38, + "z": 1.5 + }, + "H7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 11.38, + "z": 1.5 + }, + "H8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 11.38, + "z": 1.5 + }, + "H9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 11.38, + "z": 1.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a83392f86baf8cd5b4f0157c89d31dbd", + "notes": [], + "params": { + "loadName": "armadillo_96_wellplate_200ul_pcr_full_skirt", + "location": { + "slotName": "C3" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Thermo Scientific", + "brandId": [ + "AB2396" + ], + "links": [ + "https://www.fishersci.com/shop/products/armadillo-96-well-pcr-plate-1/AB2396" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 16.0 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.0, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "Armadillo 96 Well Plate 200 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "armadillo_96_wellplate_200ul_pcr_full_skirt" + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.95 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 11.91 + } + }, + "stackingOffsetWithModule": { + "magneticBlockV1": { + "x": 0, + "y": 0, + "z": 3.54 + }, + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.7 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.38, + "y": 74.24, + "z": 1.05 + }, + "A10": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.38, + "y": 74.24, + "z": 1.05 + }, + "A11": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.38, + "y": 74.24, + "z": 1.05 + }, + "A12": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.38, + "y": 74.24, + "z": 1.05 + }, + "A2": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.38, + "y": 74.24, + "z": 1.05 + }, + "A3": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.38, + "y": 74.24, + "z": 1.05 + }, + "A4": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.38, + "y": 74.24, + "z": 1.05 + }, + "A5": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.38, + "y": 74.24, + "z": 1.05 + }, + "A6": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.38, + "y": 74.24, + "z": 1.05 + }, + "A7": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.38, + "y": 74.24, + "z": 1.05 + }, + "A8": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.38, + "y": 74.24, + "z": 1.05 + }, + "A9": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.38, + "y": 74.24, + "z": 1.05 + }, + "B1": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.38, + "y": 65.24, + "z": 1.05 + }, + "B10": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.38, + "y": 65.24, + "z": 1.05 + }, + "B11": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.38, + "y": 65.24, + "z": 1.05 + }, + "B12": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.38, + "y": 65.24, + "z": 1.05 + }, + "B2": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.38, + "y": 65.24, + "z": 1.05 + }, + "B3": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.38, + "y": 65.24, + "z": 1.05 + }, + "B4": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.38, + "y": 65.24, + "z": 1.05 + }, + "B5": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.38, + "y": 65.24, + "z": 1.05 + }, + "B6": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.38, + "y": 65.24, + "z": 1.05 + }, + "B7": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.38, + "y": 65.24, + "z": 1.05 + }, + "B8": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.38, + "y": 65.24, + "z": 1.05 + }, + "B9": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.38, + "y": 65.24, + "z": 1.05 + }, + "C1": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.38, + "y": 56.24, + "z": 1.05 + }, + "C10": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.38, + "y": 56.24, + "z": 1.05 + }, + "C11": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.38, + "y": 56.24, + "z": 1.05 + }, + "C12": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.38, + "y": 56.24, + "z": 1.05 + }, + "C2": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.38, + "y": 56.24, + "z": 1.05 + }, + "C3": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.38, + "y": 56.24, + "z": 1.05 + }, + "C4": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.38, + "y": 56.24, + "z": 1.05 + }, + "C5": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.38, + "y": 56.24, + "z": 1.05 + }, + "C6": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.38, + "y": 56.24, + "z": 1.05 + }, + "C7": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.38, + "y": 56.24, + "z": 1.05 + }, + "C8": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.38, + "y": 56.24, + "z": 1.05 + }, + "C9": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.38, + "y": 56.24, + "z": 1.05 + }, + "D1": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.38, + "y": 47.24, + "z": 1.05 + }, + "D10": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.38, + "y": 47.24, + "z": 1.05 + }, + "D11": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.38, + "y": 47.24, + "z": 1.05 + }, + "D12": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.38, + "y": 47.24, + "z": 1.05 + }, + "D2": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.38, + "y": 47.24, + "z": 1.05 + }, + "D3": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.38, + "y": 47.24, + "z": 1.05 + }, + "D4": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.38, + "y": 47.24, + "z": 1.05 + }, + "D5": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.38, + "y": 47.24, + "z": 1.05 + }, + "D6": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.38, + "y": 47.24, + "z": 1.05 + }, + "D7": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.38, + "y": 47.24, + "z": 1.05 + }, + "D8": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.38, + "y": 47.24, + "z": 1.05 + }, + "D9": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.38, + "y": 47.24, + "z": 1.05 + }, + "E1": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.38, + "y": 38.24, + "z": 1.05 + }, + "E10": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.38, + "y": 38.24, + "z": 1.05 + }, + "E11": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.38, + "y": 38.24, + "z": 1.05 + }, + "E12": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.38, + "y": 38.24, + "z": 1.05 + }, + "E2": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.38, + "y": 38.24, + "z": 1.05 + }, + "E3": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.38, + "y": 38.24, + "z": 1.05 + }, + "E4": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.38, + "y": 38.24, + "z": 1.05 + }, + "E5": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.38, + "y": 38.24, + "z": 1.05 + }, + "E6": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.38, + "y": 38.24, + "z": 1.05 + }, + "E7": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.38, + "y": 38.24, + "z": 1.05 + }, + "E8": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.38, + "y": 38.24, + "z": 1.05 + }, + "E9": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.38, + "y": 38.24, + "z": 1.05 + }, + "F1": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.38, + "y": 29.24, + "z": 1.05 + }, + "F10": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.38, + "y": 29.24, + "z": 1.05 + }, + "F11": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.38, + "y": 29.24, + "z": 1.05 + }, + "F12": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.38, + "y": 29.24, + "z": 1.05 + }, + "F2": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.38, + "y": 29.24, + "z": 1.05 + }, + "F3": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.38, + "y": 29.24, + "z": 1.05 + }, + "F4": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.38, + "y": 29.24, + "z": 1.05 + }, + "F5": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.38, + "y": 29.24, + "z": 1.05 + }, + "F6": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.38, + "y": 29.24, + "z": 1.05 + }, + "F7": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.38, + "y": 29.24, + "z": 1.05 + }, + "F8": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.38, + "y": 29.24, + "z": 1.05 + }, + "F9": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.38, + "y": 29.24, + "z": 1.05 + }, + "G1": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.38, + "y": 20.24, + "z": 1.05 + }, + "G10": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.38, + "y": 20.24, + "z": 1.05 + }, + "G11": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.38, + "y": 20.24, + "z": 1.05 + }, + "G12": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.38, + "y": 20.24, + "z": 1.05 + }, + "G2": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.38, + "y": 20.24, + "z": 1.05 + }, + "G3": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.38, + "y": 20.24, + "z": 1.05 + }, + "G4": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.38, + "y": 20.24, + "z": 1.05 + }, + "G5": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.38, + "y": 20.24, + "z": 1.05 + }, + "G6": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.38, + "y": 20.24, + "z": 1.05 + }, + "G7": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.38, + "y": 20.24, + "z": 1.05 + }, + "G8": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.38, + "y": 20.24, + "z": 1.05 + }, + "G9": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.38, + "y": 20.24, + "z": 1.05 + }, + "H1": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.38, + "y": 11.24, + "z": 1.05 + }, + "H10": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.38, + "y": 11.24, + "z": 1.05 + }, + "H11": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.38, + "y": 11.24, + "z": 1.05 + }, + "H12": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.38, + "y": 11.24, + "z": 1.05 + }, + "H2": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.38, + "y": 11.24, + "z": 1.05 + }, + "H3": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.38, + "y": 11.24, + "z": 1.05 + }, + "H4": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.38, + "y": 11.24, + "z": 1.05 + }, + "H5": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.38, + "y": 11.24, + "z": 1.05 + }, + "H6": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.38, + "y": 11.24, + "z": 1.05 + }, + "H7": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.38, + "y": 11.24, + "z": 1.05 + }, + "H8": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.38, + "y": 11.24, + "z": 1.05 + }, + "H9": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.38, + "y": 11.24, + "z": 1.05 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "596b975cce05f1835b73fd3e2e9c04b0", + "notes": [], + "params": { + "loadName": "nest_1_reservoir_290ml", + "location": { + "slotName": "D3" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "360206", + "360266" + ], + "links": [ + "https://www.nest-biotech.com/reagent-reserviors" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.47, + "zDimension": 44.4 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1" + ] + } + ], + "metadata": { + "displayCategory": "reservoir", + "displayName": "NEST 1 Well Reservoir 290 mL", + "displayVolumeUnits": "mL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1" + ] + ], + "parameters": { + "format": "trough", + "isMagneticModuleCompatible": false, + "isTiprack": false, + "loadName": "nest_1_reservoir_290ml", + "quirks": [ + "centerMultichannelOnWells", + "touchTipDisabled" + ] + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 39.55, + "shape": "rectangular", + "totalLiquidVolume": 290000, + "x": 63.88, + "xDimension": 106.8, + "y": 42.74, + "yDimension": 71.2, + "z": 4.85 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "43c0dcf1828d77562caa82b5e8a8c91e", + "notes": [], + "params": { + "loadName": "nest_12_reservoir_15ml", + "location": { + "slotName": "B3" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "360102" + ], + "links": [ + "https://www.nest-biotech.com/reagent-reserviors/59178414.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 31.4 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9" + ] + } + ], + "metadata": { + "displayCategory": "reservoir", + "displayName": "NEST 12 Well Reservoir 15 mL", + "displayVolumeUnits": "mL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1" + ], + [ + "A10" + ], + [ + "A11" + ], + [ + "A12" + ], + [ + "A2" + ], + [ + "A3" + ], + [ + "A4" + ], + [ + "A5" + ], + [ + "A6" + ], + [ + "A7" + ], + [ + "A8" + ], + [ + "A9" + ] + ], + "parameters": { + "format": "trough", + "isMagneticModuleCompatible": false, + "isTiprack": false, + "loadName": "nest_12_reservoir_15ml", + "quirks": [ + "centerMultichannelOnWells", + "touchTipDisabled" + ] + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 14.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + }, + "A10": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 95.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + }, + "A11": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 104.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + }, + "A12": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 113.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + }, + "A2": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 23.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + }, + "A3": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 32.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + }, + "A4": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 41.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + }, + "A5": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 50.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + }, + "A6": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 59.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + }, + "A7": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 68.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + }, + "A8": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 77.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + }, + "A9": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 86.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLiquid", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5d3ae21e7b20c8d594290fcda36e0906", + "notes": [], + "params": { + "labwareId": "UUID", + "liquidId": "UUID", + "volumeByWell": { + "A1": 800.0 + } + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLiquid", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "660a0039e8fc361930633bfde72e7048", + "notes": [], + "params": { + "labwareId": "UUID", + "liquidId": "UUID", + "volumeByWell": { + "A2": 800.0 + } + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "688fe76a3082d775c9982d7bbaac7474", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_multi_flex", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d2d8580716928e6cedf10922be675c01", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "right", + "pipetteName": "p50_single_flex", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "waitForResume", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "305bf2316d3fc7964ebdf17e5cb150fc", + "notes": [], + "params": { + "message": "This tests Tip Pick Up Failure (General Error for now)" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "waitForResume", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6627c460f2c1d181b2d6bce906457ae0", + "notes": [], + "params": { + "message": "Please remove tip rack from deck. When you're testing recovery, add tiprack back as necessary." + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "748924f7bc1bc2293181fde240dd2497", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 178.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.92999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "waitForResume", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b9df600eccab4fa173cf714a9e113bac", + "notes": [], + "params": { + "message": "Overpressure - While Aspirating" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7058414b08572e4a67114c649fbc4baf", + "notes": [], + "params": { + "axes": [ + "leftPlunger", + "leftZ" + ] + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "waitForResume", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f8432cddacf8e16c07eba0897f1eb9e4", + "notes": [], + "params": { + "message": "Use p50UL tips - Swap with tip(s) that are hot glued shut (you will need to swap the tips for retry recovery options)" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "64ac4c89015a5b101b05c9f241d2b01a", + "notes": [], + "params": { + "flowRate": 716.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 900.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 900.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dfbcaf24956ff601c54c8eca232341b8", + "notes": [], + "params": { + "flowRate": 716.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 900.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 900.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dc3fc81e61d1b082aff31b267536c7f0", + "notes": [], + "params": { + "flowRate": 716.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 900.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 900.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d5a40428312b4232069455942e7fc4fb", + "notes": [], + "params": { + "flowRate": 716.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 900.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 900.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "89153d8b32e4685dbc442e6591d02947", + "notes": [], + "params": { + "flowRate": 716.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 900.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 900.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a5b8fd811d0ef18cc2dfd021bd49f205", + "notes": [], + "params": { + "flowRate": 716.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 900.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 900.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6fb040ec1b86b7ccd93e803275eeaedb", + "notes": [], + "params": { + "flowRate": 716.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 900.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 900.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "489b07c38ce0381f99b57179d4e21479", + "notes": [], + "params": { + "flowRate": 716.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 900.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 900.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bedb30145351546caecd4fde02041d3e", + "notes": [], + "params": { + "flowRate": 716.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 900.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 900.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "14184571a28f9a7cbced653653a5e4c8", + "notes": [], + "params": { + "flowRate": 716.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 900.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 900.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fa062920af0726db7ad4887c27b36880", + "notes": [], + "params": { + "flowRate": 716.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 900.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 900.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0b302adfd08da748fe70219d2b2aec25", + "notes": [], + "params": { + "flowRate": 716.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 900.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 900.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2eb6e6298939a64ca99771710a0f796c", + "notes": [], + "params": { + "flowRate": 716.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 900.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 900.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "09e6b07abc76b0f47eca5bde4a073fc8", + "notes": [], + "params": { + "flowRate": 716.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 900.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 900.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f77abbc6fccb00d97c44105e4d0dc8c5", + "notes": [], + "params": { + "flowRate": 716.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 900.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 900.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cf010ab2b5036733a0536650b665ef0d", + "notes": [], + "params": { + "flowRate": 716.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 900.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 900.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7201cbd6da4b3a1f9f9a46b87e7f0406", + "notes": [], + "params": { + "flowRate": 716.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 900.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 900.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2ede2f094fbeec343eed731eef8194e7", + "notes": [], + "params": { + "flowRate": 716.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 900.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 900.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9d8af9e55efc49019e13e9deb41f8931", + "notes": [], + "params": { + "flowRate": 716.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 900.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 900.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "99f5375c033353b7601cae5b9aa65ac0", + "notes": [], + "params": { + "flowRate": 716.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 900.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 900.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "waitForResume", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8c2e09cbe90d48fa924fb8cc51ab6f2e", + "notes": [], + "params": { + "message": "This tests Liquid Presence Detection - PLEASE MAKE SURE YOU'RE USING 1000UL TIPS OR YOU WILL BREAK THE PIPETTE" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "waitForResume", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "113ace5134dc05770bbbc9f25616e4d2", + "notes": [], + "params": { + "message": "Make sure reservoir is empty, and have full reservoir on standby to switch out with for recovery" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "liquidProbe", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1c5720bacb264e3da2b314e18b3591c5", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 2.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 342.38, + "y": 256.78, + "z": 33.4 + }, + "z_position": 0.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e0bbd11eb919a3804d1d23771f645a8d", + "notes": [], + "params": { + "flowRate": 716.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 900.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 342.38, + "y": 256.78, + "z": 5.55 + }, + "volume": 900.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b66c39dd7f7222e62b5c25ef63dc4eaa", + "notes": [], + "params": { + "flowRate": 716.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 900.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 342.38, + "y": 256.78, + "z": 5.55 + }, + "volume": 900.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1f47f37d8e4b3aea8bbea66e7014ab27", + "notes": [], + "params": { + "axes": [ + "leftPlunger", + "leftZ" + ] + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "waitForResume", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0f904e31fcd8dcc7ac6778e30cb61bb8", + "notes": [], + "params": { + "message": "Overpressure - While Dispensing" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f04ecdcd9f9b5219d1cf73c37e540d9f", + "notes": [], + "params": { + "flowRate": 716.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 900.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 19.999999999999993 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 64.39999999999999 + }, + "volume": 900.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "waitForResume", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "690df57327aeb3c16ca4ad85203d1ec5", + "notes": [], + "params": { + "message": "Swap with tip(s) that are hot glued shut (you will need to cut the tips for retry recovery options)" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "631e9e0a8230489d6abb8665f0f13463", + "notes": [], + "params": { + "flowRate": 716.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 900.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 19.999999999999993 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 64.39999999999999 + }, + "volume": 900.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0e801e389ac14f125f5ef5db2eae3d08", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 434.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "waitForResume", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "20b6b0a1dd75709308db2b292ec03992", + "notes": [], + "params": { + "message": "You will have to manually remove tips if you're using a modified pipette" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d7fecbae31209f6f04a2ee350e584c46", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 434.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c4e9dc65f4db718d38cf627ad786ac83", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "waitForResume", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "65bf172b33169e051174a2d2c6ff08f9", + "notes": [], + "params": { + "message": "This tests Tip Pick Up Failure (General Error for now)" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "waitForResume", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "eddba592c53196f06dd465abd040ab57", + "notes": [], + "params": { + "message": "Please remove tip rack from deck. When you're testing recovery, add tiprack back as necessary." + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d3fb46eb1e9183a7897d150cc1ef5898", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 178.38, + "y": 288.38, + "z": 99.0 + }, + "tipDiameter": 5.58, + "tipLength": 47.81, + "tipVolume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "waitForResume", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5019b8a5d55914c4a86174b01c40d297", + "notes": [], + "params": { + "message": "Overpressure - While Aspirating" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7aafe07a40a3c427dee717cc84c6e303", + "notes": [], + "params": { + "axes": [ + "rightPlunger", + "rightZ" + ] + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "waitForResume", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2630be2e9b808711cf5ff3c5d69815df", + "notes": [], + "params": { + "message": "Use p50UL tips - Swap with tip(s) that are hot glued shut (you will need to swap the tips for retry recovery options)" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2492d664f9c55efed5652b1cbcf9fdde", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 50.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b2d6eb28bc88f476044b1e7e4d6b4107", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 50.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "737fbfd381fa1576044bb4666a4c9483", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 50.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e45f68ed478fc9f9825f00ff31fcde46", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 50.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9dead7e7447f7a0dbdb9b2145d28c692", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 50.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f154f5a1679179fabd7a55e8e26d0992", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 50.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e20d2093cb882e562bdf5bc427646443", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 50.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b0a14d30a958196db673fa5ac8eae550", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 50.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dcba87cf3be1f8600a2dea25b0a83274", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 50.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c9c41ee06959a54f1aab7a8c5119912b", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 50.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e4c179da374f4f5ba047d341a2aa629e", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 50.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd6698a069e856a66de54a83992d695f", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 50.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6d4f1b88b6955d6574e48e31084aeac4", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 50.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "147d5fc4adfbe0a46301abaa465df262", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 50.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b660287ab347393357863827d926402d", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 50.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "afaecd2d3f12f463dc0c1596fbec73d8", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 50.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "18a206fcf40b85ef77d65a95eb69b977", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 50.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a66f9c581041537d7c9a0b5b83b2a3bb", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 50.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ff3ce00c290b4f3a025b51cc08e87e7f", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 50.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0c2b7f9b5117e811de2ca8c708719a4f", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 50.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "volume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "waitForResume", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "16b3eb79760f3264be5d1d29a9405940", + "notes": [], + "params": { + "message": "This tests Liquid Presence Detection - PLEASE MAKE SURE YOU'RE USING 1000UL TIPS OR YOU WILL BREAK THE PIPETTE" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "waitForResume", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "448d8d14a4ba598c39cedae64f1a7d1d", + "notes": [], + "params": { + "message": "Make sure reservoir is empty, and have full reservoir on standby to switch out with for recovery" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "liquidProbe", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "de2087c49b77fe03a83649111113c157", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 2.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 342.38, + "y": 256.78, + "z": 33.4 + }, + "z_position": 0.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bcb050e4952ef2d7f7c42dd6838c3c24", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 50.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 342.38, + "y": 256.78, + "z": 5.55 + }, + "volume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "48dbf180376bece74dd403b1407f9db6", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 50.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 342.38, + "y": 256.78, + "z": 5.55 + }, + "volume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "431a83945a647ae1699424f1b19555d4", + "notes": [], + "params": { + "axes": [ + "rightPlunger", + "rightZ" + ] + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "waitForResume", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d291fec87c615fe4446dd14989ec6503", + "notes": [], + "params": { + "message": "Overpressure - While Dispensing" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "29849adcc3a3cc1c478077d9336f1037", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 50.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 19.999999999999993 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 64.39999999999999 + }, + "volume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "waitForResume", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5a2ff23afb6c9e0d8d201e674d3ce9f3", + "notes": [], + "params": { + "message": "Swap with tip(s) that are hot glued shut (you will need to cut the tips for retry recovery options)" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "25dff8ae10364bc6e427439df62fd75e", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 50.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 19.999999999999993 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 64.39999999999999 + }, + "volume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a3cd8b7881d952254804421be5e8229e", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 434.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "waitForResume", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "96228aa179a3137a865a4889db38242d", + "notes": [], + "params": { + "message": "You will have to manually remove tips if you're using a modified pipette" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c5ad2c9360fc17ec095d7bdc27b726d4", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 434.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f32667674c9e53f66e65233250b4e939", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [], + "files": [ + { + "name": "Flex_S_v2_20_P8X1000_P50_LLD.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_flex_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "A2" + } + }, + { + "definitionUri": "opentrons/opentrons_flex_96_tiprack_50ul/1", + "id": "UUID", + "loadName": "opentrons_flex_96_tiprack_50ul", + "location": { + "slotName": "B2" + } + }, + { + "definitionUri": "opentrons/armadillo_96_wellplate_200ul_pcr_full_skirt/2", + "id": "UUID", + "loadName": "armadillo_96_wellplate_200ul_pcr_full_skirt", + "location": { + "slotName": "C3" + } + }, + { + "definitionUri": "opentrons/nest_1_reservoir_290ml/1", + "id": "UUID", + "loadName": "nest_1_reservoir_290ml", + "location": { + "slotName": "D3" + } + }, + { + "definitionUri": "opentrons/nest_12_reservoir_15ml/1", + "id": "UUID", + "loadName": "nest_12_reservoir_15ml", + "location": { + "slotName": "B3" + } + } + ], + "liquids": [ + { + "description": "water for ER testing", + "displayColor": "#90e0ef", + "displayName": "Water", + "id": "UUID" + }, + { + "description": "Water for ER testing", + "displayColor": "#0077b6", + "displayName": "Water but more blue", + "id": "UUID" + } + ], + "metadata": { + "author": "Sara Kowalski", + "description": "Simple Protocol that user can use to Phase 1 Error Recovery options for single and multi channel pipettes. NOTE: YOU WILL NEED A MODIFIED PIPETTE (NO SHROUD), and changed order of operations to reduce impact of dispense ER failure", + "protocolName": "2.20 Error Recovery Testing Protocol - Modified" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_multi_flex" + }, + { + "id": "UUID", + "mount": "right", + "pipetteName": "p50_single_flex" + } + ], + "result": "ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[196ec488f7][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_west].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[196ec488f7][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_west].json new file mode 100644 index 00000000000..98709caf300 --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[196ec488f7][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_west].json @@ -0,0 +1,1500 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "C2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-1000ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 97.47 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_1000ul", + "tipLength": 88, + "tipOverlap": 7.95 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.24, + "z": 9.47 + }, + "A10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.24, + "z": 9.47 + }, + "A11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.24, + "z": 9.47 + }, + "A12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.24, + "z": 9.47 + }, + "A2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.24, + "z": 9.47 + }, + "A3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.24, + "z": 9.47 + }, + "A4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.24, + "z": 9.47 + }, + "A5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.24, + "z": 9.47 + }, + "A6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.24, + "z": 9.47 + }, + "A7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.24, + "z": 9.47 + }, + "A8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.24, + "z": 9.47 + }, + "A9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.24, + "z": 9.47 + }, + "B1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.24, + "z": 9.47 + }, + "B10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.24, + "z": 9.47 + }, + "B11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.24, + "z": 9.47 + }, + "B12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.24, + "z": 9.47 + }, + "B2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.24, + "z": 9.47 + }, + "B3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.24, + "z": 9.47 + }, + "B4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.24, + "z": 9.47 + }, + "B5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.24, + "z": 9.47 + }, + "B6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.24, + "z": 9.47 + }, + "B7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.24, + "z": 9.47 + }, + "B8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.24, + "z": 9.47 + }, + "B9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.24, + "z": 9.47 + }, + "C1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.24, + "z": 9.47 + }, + "C10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.24, + "z": 9.47 + }, + "C11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.24, + "z": 9.47 + }, + "C12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.24, + "z": 9.47 + }, + "C2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.24, + "z": 9.47 + }, + "C3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.24, + "z": 9.47 + }, + "C4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.24, + "z": 9.47 + }, + "C5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.24, + "z": 9.47 + }, + "C6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.24, + "z": 9.47 + }, + "C7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.24, + "z": 9.47 + }, + "C8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.24, + "z": 9.47 + }, + "C9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.24, + "z": 9.47 + }, + "D1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.24, + "z": 9.47 + }, + "D10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.24, + "z": 9.47 + }, + "D11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.24, + "z": 9.47 + }, + "D12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.24, + "z": 9.47 + }, + "D2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.24, + "z": 9.47 + }, + "D3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.24, + "z": 9.47 + }, + "D4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.24, + "z": 9.47 + }, + "D5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.24, + "z": 9.47 + }, + "D6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.24, + "z": 9.47 + }, + "D7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.24, + "z": 9.47 + }, + "D8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.24, + "z": 9.47 + }, + "D9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.24, + "z": 9.47 + }, + "E1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.24, + "z": 9.47 + }, + "E10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.24, + "z": 9.47 + }, + "E11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.24, + "z": 9.47 + }, + "E12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.24, + "z": 9.47 + }, + "E2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.24, + "z": 9.47 + }, + "E3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.24, + "z": 9.47 + }, + "E4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.24, + "z": 9.47 + }, + "E5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.24, + "z": 9.47 + }, + "E6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.24, + "z": 9.47 + }, + "E7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.24, + "z": 9.47 + }, + "E8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.24, + "z": 9.47 + }, + "E9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.24, + "z": 9.47 + }, + "F1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.24, + "z": 9.47 + }, + "F10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.24, + "z": 9.47 + }, + "F11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.24, + "z": 9.47 + }, + "F12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.24, + "z": 9.47 + }, + "F2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.24, + "z": 9.47 + }, + "F3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.24, + "z": 9.47 + }, + "F4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.24, + "z": 9.47 + }, + "F5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.24, + "z": 9.47 + }, + "F6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.24, + "z": 9.47 + }, + "F7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.24, + "z": 9.47 + }, + "F8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.24, + "z": 9.47 + }, + "F9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.24, + "z": 9.47 + }, + "G1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.24, + "z": 9.47 + }, + "G10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.24, + "z": 9.47 + }, + "G11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.24, + "z": 9.47 + }, + "G12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.24, + "z": 9.47 + }, + "G2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.24, + "z": 9.47 + }, + "G3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.24, + "z": 9.47 + }, + "G4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.24, + "z": 9.47 + }, + "G5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.24, + "z": 9.47 + }, + "G6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.24, + "z": 9.47 + }, + "G7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.24, + "z": 9.47 + }, + "G8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.24, + "z": 9.47 + }, + "G9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.24, + "z": 9.47 + }, + "H1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.24, + "z": 9.47 + }, + "H10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.24, + "z": 9.47 + }, + "H11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.24, + "z": 9.47 + }, + "H12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.24, + "z": 9.47 + }, + "H2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.24, + "z": 9.47 + }, + "H3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.24, + "z": 9.47 + }, + "H4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.24, + "z": 9.47 + }, + "H5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.24, + "z": 9.47 + }, + "H6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.24, + "z": 9.47 + }, + "H7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.24, + "z": 9.47 + }, + "H8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.24, + "z": 9.47 + }, + "H9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.24, + "z": 9.47 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "H12", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "691afd54dfa7982fb89e5f77c763bfd4", + "notes": [], + "params": { + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "C1" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 124.35 + }, + "gripperOffsets": {}, + "groups": [ + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352095", + "352096", + "352097", + "352099", + "352196" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 6x15 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A2", + "B1", + "B2", + "C1", + "C2" + ] + }, + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352070", + "352098" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 4x50 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A3", + "A4", + "B3", + "B4" + ] + } + ], + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Opentrons 10 Tube Rack with Falcon 4x50 mL, 6x15 mL Conical", + "displayVolumeUnits": "mL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1" + ], + [ + "A2", + "B2", + "C2" + ], + [ + "A3", + "B3" + ], + [ + "A4", + "B4" + ] + ], + "parameters": { + "format": "irregular", + "isMagneticModuleCompatible": false, + "isTiprack": false, + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical" + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 67.75, + "z": 6.85 + }, + "A2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 67.75, + "z": 6.85 + }, + "A3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 60.25, + "z": 7.3 + }, + "A4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 60.25, + "z": 7.3 + }, + "B1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 42.75, + "z": 6.85 + }, + "B2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 42.75, + "z": 6.85 + }, + "B3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 25.25, + "z": 7.3 + }, + "B4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 25.25, + "z": 7.3 + }, + "C1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 17.75, + "z": 6.85 + }, + "C2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 17.75, + "z": 6.85 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "PartialTipMovementNotAllowedError [line 479]: Error 2004 MOTION_PLANNING_FAILURE (PartialTipMovementNotAllowedError): Moving to Opentrons OT-2 96 Tip Rack 1000 µL in slot C2 with H12 nozzle partial configuration will result in collision with items in deck slot C1.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "Moving to Opentrons OT-2 96 Tip Rack 1000 µL in slot C2 with H12 nozzle partial configuration will result in collision with items in deck slot C1.", + "errorCode": "2004", + "errorInfo": {}, + "errorType": "PartialTipMovementNotAllowedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_west.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "C2" + } + }, + { + "definitionUri": "opentrons/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/1", + "id": "UUID", + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "C1" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Too tall labware on pickup tip" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_96" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[255d014c70][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_mix_collision].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[255d014c70][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_mix_collision].json new file mode 100644 index 00000000000..5e649815988 --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[255d014c70][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_mix_collision].json @@ -0,0 +1,2746 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "B2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-1000ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 97.47 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_1000ul", + "tipLength": 88, + "tipOverlap": 7.95 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.24, + "z": 9.47 + }, + "A10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.24, + "z": 9.47 + }, + "A11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.24, + "z": 9.47 + }, + "A12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.24, + "z": 9.47 + }, + "A2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.24, + "z": 9.47 + }, + "A3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.24, + "z": 9.47 + }, + "A4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.24, + "z": 9.47 + }, + "A5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.24, + "z": 9.47 + }, + "A6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.24, + "z": 9.47 + }, + "A7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.24, + "z": 9.47 + }, + "A8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.24, + "z": 9.47 + }, + "A9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.24, + "z": 9.47 + }, + "B1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.24, + "z": 9.47 + }, + "B10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.24, + "z": 9.47 + }, + "B11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.24, + "z": 9.47 + }, + "B12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.24, + "z": 9.47 + }, + "B2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.24, + "z": 9.47 + }, + "B3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.24, + "z": 9.47 + }, + "B4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.24, + "z": 9.47 + }, + "B5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.24, + "z": 9.47 + }, + "B6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.24, + "z": 9.47 + }, + "B7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.24, + "z": 9.47 + }, + "B8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.24, + "z": 9.47 + }, + "B9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.24, + "z": 9.47 + }, + "C1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.24, + "z": 9.47 + }, + "C10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.24, + "z": 9.47 + }, + "C11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.24, + "z": 9.47 + }, + "C12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.24, + "z": 9.47 + }, + "C2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.24, + "z": 9.47 + }, + "C3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.24, + "z": 9.47 + }, + "C4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.24, + "z": 9.47 + }, + "C5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.24, + "z": 9.47 + }, + "C6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.24, + "z": 9.47 + }, + "C7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.24, + "z": 9.47 + }, + "C8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.24, + "z": 9.47 + }, + "C9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.24, + "z": 9.47 + }, + "D1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.24, + "z": 9.47 + }, + "D10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.24, + "z": 9.47 + }, + "D11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.24, + "z": 9.47 + }, + "D12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.24, + "z": 9.47 + }, + "D2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.24, + "z": 9.47 + }, + "D3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.24, + "z": 9.47 + }, + "D4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.24, + "z": 9.47 + }, + "D5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.24, + "z": 9.47 + }, + "D6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.24, + "z": 9.47 + }, + "D7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.24, + "z": 9.47 + }, + "D8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.24, + "z": 9.47 + }, + "D9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.24, + "z": 9.47 + }, + "E1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.24, + "z": 9.47 + }, + "E10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.24, + "z": 9.47 + }, + "E11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.24, + "z": 9.47 + }, + "E12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.24, + "z": 9.47 + }, + "E2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.24, + "z": 9.47 + }, + "E3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.24, + "z": 9.47 + }, + "E4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.24, + "z": 9.47 + }, + "E5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.24, + "z": 9.47 + }, + "E6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.24, + "z": 9.47 + }, + "E7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.24, + "z": 9.47 + }, + "E8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.24, + "z": 9.47 + }, + "E9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.24, + "z": 9.47 + }, + "F1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.24, + "z": 9.47 + }, + "F10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.24, + "z": 9.47 + }, + "F11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.24, + "z": 9.47 + }, + "F12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.24, + "z": 9.47 + }, + "F2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.24, + "z": 9.47 + }, + "F3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.24, + "z": 9.47 + }, + "F4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.24, + "z": 9.47 + }, + "F5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.24, + "z": 9.47 + }, + "F6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.24, + "z": 9.47 + }, + "F7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.24, + "z": 9.47 + }, + "F8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.24, + "z": 9.47 + }, + "F9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.24, + "z": 9.47 + }, + "G1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.24, + "z": 9.47 + }, + "G10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.24, + "z": 9.47 + }, + "G11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.24, + "z": 9.47 + }, + "G12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.24, + "z": 9.47 + }, + "G2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.24, + "z": 9.47 + }, + "G3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.24, + "z": 9.47 + }, + "G4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.24, + "z": 9.47 + }, + "G5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.24, + "z": 9.47 + }, + "G6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.24, + "z": 9.47 + }, + "G7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.24, + "z": 9.47 + }, + "G8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.24, + "z": 9.47 + }, + "G9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.24, + "z": 9.47 + }, + "H1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.24, + "z": 9.47 + }, + "H10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.24, + "z": 9.47 + }, + "H11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.24, + "z": 9.47 + }, + "H12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.24, + "z": 9.47 + }, + "H2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.24, + "z": 9.47 + }, + "H3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.24, + "z": 9.47 + }, + "H4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.24, + "z": 9.47 + }, + "H5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.24, + "z": 9.47 + }, + "H6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.24, + "z": 9.47 + }, + "H7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.24, + "z": 9.47 + }, + "H8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.24, + "z": 9.47 + }, + "H9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.24, + "z": 9.47 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "H12", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "691afd54dfa7982fb89e5f77c763bfd4", + "notes": [], + "params": { + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "C1" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 124.35 + }, + "gripperOffsets": {}, + "groups": [ + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352095", + "352096", + "352097", + "352099", + "352196" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 6x15 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A2", + "B1", + "B2", + "C1", + "C2" + ] + }, + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352070", + "352098" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 4x50 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A3", + "A4", + "B3", + "B4" + ] + } + ], + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Opentrons 10 Tube Rack with Falcon 4x50 mL, 6x15 mL Conical", + "displayVolumeUnits": "mL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1" + ], + [ + "A2", + "B2", + "C2" + ], + [ + "A3", + "B3" + ], + [ + "A4", + "B4" + ] + ], + "parameters": { + "format": "irregular", + "isMagneticModuleCompatible": false, + "isTiprack": false, + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical" + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 67.75, + "z": 6.85 + }, + "A2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 67.75, + "z": 6.85 + }, + "A3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 60.25, + "z": 7.3 + }, + "A4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 60.25, + "z": 7.3 + }, + "B1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 42.75, + "z": 6.85 + }, + "B2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 42.75, + "z": 6.85 + }, + "B3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 25.25, + "z": 7.3 + }, + "B4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 25.25, + "z": 7.3 + }, + "C1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 17.75, + "z": 6.85 + }, + "C2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 17.75, + "z": 6.85 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c910be62291bb94458a59cb4185c5180", + "notes": [], + "params": { + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "D2" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2f59e0552969594ba6ab06f03af324e1", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 178.38, + "y": 288.24, + "z": 97.47 + }, + "tipDiameter": 7.23, + "tipLength": 77.5, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bfcdfd6bf5f0c7ee8d6b79c1df782899", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 178.38, + "y": 74.24, + "z": 2.92 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "PartialTipMovementNotAllowedError [line 488]: Error 2004 MOTION_PLANNING_FAILURE (PartialTipMovementNotAllowedError): Moving to NEST 96 Well Plate 100 µL PCR Full Skirt in slot D2 with H12 nozzle partial configuration will result in collision with items in deck slot C1.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "Moving to NEST 96 Well Plate 100 µL PCR Full Skirt in slot D2 with H12 nozzle partial configuration will result in collision with items in deck slot C1.", + "errorCode": "2004", + "errorInfo": {}, + "errorType": "PartialTipMovementNotAllowedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_mix_collision.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "B2" + } + }, + { + "definitionUri": "opentrons/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/1", + "id": "UUID", + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "C1" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "D2" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Too tall labware on pickup tip" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_96" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[29e143f047][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_distribute_destination_collision].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[29e143f047][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_distribute_destination_collision].json new file mode 100644 index 00000000000..14c346ea683 --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[29e143f047][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_distribute_destination_collision].json @@ -0,0 +1,3930 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "B2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-1000ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 97.47 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_1000ul", + "tipLength": 88, + "tipOverlap": 7.95 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.24, + "z": 9.47 + }, + "A10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.24, + "z": 9.47 + }, + "A11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.24, + "z": 9.47 + }, + "A12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.24, + "z": 9.47 + }, + "A2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.24, + "z": 9.47 + }, + "A3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.24, + "z": 9.47 + }, + "A4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.24, + "z": 9.47 + }, + "A5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.24, + "z": 9.47 + }, + "A6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.24, + "z": 9.47 + }, + "A7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.24, + "z": 9.47 + }, + "A8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.24, + "z": 9.47 + }, + "A9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.24, + "z": 9.47 + }, + "B1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.24, + "z": 9.47 + }, + "B10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.24, + "z": 9.47 + }, + "B11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.24, + "z": 9.47 + }, + "B12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.24, + "z": 9.47 + }, + "B2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.24, + "z": 9.47 + }, + "B3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.24, + "z": 9.47 + }, + "B4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.24, + "z": 9.47 + }, + "B5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.24, + "z": 9.47 + }, + "B6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.24, + "z": 9.47 + }, + "B7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.24, + "z": 9.47 + }, + "B8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.24, + "z": 9.47 + }, + "B9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.24, + "z": 9.47 + }, + "C1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.24, + "z": 9.47 + }, + "C10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.24, + "z": 9.47 + }, + "C11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.24, + "z": 9.47 + }, + "C12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.24, + "z": 9.47 + }, + "C2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.24, + "z": 9.47 + }, + "C3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.24, + "z": 9.47 + }, + "C4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.24, + "z": 9.47 + }, + "C5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.24, + "z": 9.47 + }, + "C6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.24, + "z": 9.47 + }, + "C7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.24, + "z": 9.47 + }, + "C8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.24, + "z": 9.47 + }, + "C9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.24, + "z": 9.47 + }, + "D1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.24, + "z": 9.47 + }, + "D10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.24, + "z": 9.47 + }, + "D11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.24, + "z": 9.47 + }, + "D12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.24, + "z": 9.47 + }, + "D2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.24, + "z": 9.47 + }, + "D3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.24, + "z": 9.47 + }, + "D4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.24, + "z": 9.47 + }, + "D5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.24, + "z": 9.47 + }, + "D6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.24, + "z": 9.47 + }, + "D7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.24, + "z": 9.47 + }, + "D8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.24, + "z": 9.47 + }, + "D9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.24, + "z": 9.47 + }, + "E1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.24, + "z": 9.47 + }, + "E10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.24, + "z": 9.47 + }, + "E11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.24, + "z": 9.47 + }, + "E12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.24, + "z": 9.47 + }, + "E2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.24, + "z": 9.47 + }, + "E3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.24, + "z": 9.47 + }, + "E4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.24, + "z": 9.47 + }, + "E5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.24, + "z": 9.47 + }, + "E6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.24, + "z": 9.47 + }, + "E7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.24, + "z": 9.47 + }, + "E8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.24, + "z": 9.47 + }, + "E9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.24, + "z": 9.47 + }, + "F1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.24, + "z": 9.47 + }, + "F10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.24, + "z": 9.47 + }, + "F11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.24, + "z": 9.47 + }, + "F12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.24, + "z": 9.47 + }, + "F2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.24, + "z": 9.47 + }, + "F3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.24, + "z": 9.47 + }, + "F4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.24, + "z": 9.47 + }, + "F5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.24, + "z": 9.47 + }, + "F6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.24, + "z": 9.47 + }, + "F7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.24, + "z": 9.47 + }, + "F8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.24, + "z": 9.47 + }, + "F9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.24, + "z": 9.47 + }, + "G1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.24, + "z": 9.47 + }, + "G10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.24, + "z": 9.47 + }, + "G11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.24, + "z": 9.47 + }, + "G12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.24, + "z": 9.47 + }, + "G2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.24, + "z": 9.47 + }, + "G3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.24, + "z": 9.47 + }, + "G4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.24, + "z": 9.47 + }, + "G5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.24, + "z": 9.47 + }, + "G6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.24, + "z": 9.47 + }, + "G7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.24, + "z": 9.47 + }, + "G8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.24, + "z": 9.47 + }, + "G9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.24, + "z": 9.47 + }, + "H1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.24, + "z": 9.47 + }, + "H10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.24, + "z": 9.47 + }, + "H11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.24, + "z": 9.47 + }, + "H12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.24, + "z": 9.47 + }, + "H2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.24, + "z": 9.47 + }, + "H3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.24, + "z": 9.47 + }, + "H4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.24, + "z": 9.47 + }, + "H5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.24, + "z": 9.47 + }, + "H6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.24, + "z": 9.47 + }, + "H7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.24, + "z": 9.47 + }, + "H8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.24, + "z": 9.47 + }, + "H9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.24, + "z": 9.47 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "H12", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "691afd54dfa7982fb89e5f77c763bfd4", + "notes": [], + "params": { + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "C3" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 124.35 + }, + "gripperOffsets": {}, + "groups": [ + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352095", + "352096", + "352097", + "352099", + "352196" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 6x15 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A2", + "B1", + "B2", + "C1", + "C2" + ] + }, + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352070", + "352098" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 4x50 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A3", + "A4", + "B3", + "B4" + ] + } + ], + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Opentrons 10 Tube Rack with Falcon 4x50 mL, 6x15 mL Conical", + "displayVolumeUnits": "mL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1" + ], + [ + "A2", + "B2", + "C2" + ], + [ + "A3", + "B3" + ], + [ + "A4", + "B4" + ] + ], + "parameters": { + "format": "irregular", + "isMagneticModuleCompatible": false, + "isTiprack": false, + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical" + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 67.75, + "z": 6.85 + }, + "A2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 67.75, + "z": 6.85 + }, + "A3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 60.25, + "z": 7.3 + }, + "A4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 60.25, + "z": 7.3 + }, + "B1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 42.75, + "z": 6.85 + }, + "B2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 42.75, + "z": 6.85 + }, + "B3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 25.25, + "z": 7.3 + }, + "B4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 25.25, + "z": 7.3 + }, + "C1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 17.75, + "z": 6.85 + }, + "C2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 17.75, + "z": 6.85 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c910be62291bb94458a59cb4185c5180", + "notes": [], + "params": { + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "D2" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d75e38152238e9ad0c18e291fe97e483", + "notes": [], + "params": { + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "D3" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8de5f9595204f05bd1016cce23cd32b9", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 178.38, + "y": 288.24, + "z": 97.47 + }, + "tipDiameter": 7.23, + "tipLength": 77.5, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d770b3dd007307016fd235b6e50d1e5d", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 45.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 178.38, + "y": 74.24, + "z": 1.92 + }, + "volume": 45.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "PartialTipMovementNotAllowedError [line 501]: Error 2004 MOTION_PLANNING_FAILURE (PartialTipMovementNotAllowedError): Moving to NEST 96 Well Plate 100 µL PCR Full Skirt in slot D3 with H12 nozzle partial configuration will result in collision with items in deck slot C3.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "Moving to NEST 96 Well Plate 100 µL PCR Full Skirt in slot D3 with H12 nozzle partial configuration will result in collision with items in deck slot C3.", + "errorCode": "2004", + "errorInfo": {}, + "errorType": "PartialTipMovementNotAllowedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_distribute_destination_collision.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "B2" + } + }, + { + "definitionUri": "opentrons/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/1", + "id": "UUID", + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "C3" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "D2" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "D3" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Too tall labware on pickup tip" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_96" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[29eec5a85a][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_transfer_source_collision].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[29eec5a85a][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_transfer_source_collision].json new file mode 100644 index 00000000000..c2e9933537c --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[29eec5a85a][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_transfer_source_collision].json @@ -0,0 +1,3897 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "B2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-1000ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 97.47 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_1000ul", + "tipLength": 88, + "tipOverlap": 7.95 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.24, + "z": 9.47 + }, + "A10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.24, + "z": 9.47 + }, + "A11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.24, + "z": 9.47 + }, + "A12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.24, + "z": 9.47 + }, + "A2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.24, + "z": 9.47 + }, + "A3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.24, + "z": 9.47 + }, + "A4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.24, + "z": 9.47 + }, + "A5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.24, + "z": 9.47 + }, + "A6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.24, + "z": 9.47 + }, + "A7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.24, + "z": 9.47 + }, + "A8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.24, + "z": 9.47 + }, + "A9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.24, + "z": 9.47 + }, + "B1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.24, + "z": 9.47 + }, + "B10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.24, + "z": 9.47 + }, + "B11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.24, + "z": 9.47 + }, + "B12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.24, + "z": 9.47 + }, + "B2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.24, + "z": 9.47 + }, + "B3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.24, + "z": 9.47 + }, + "B4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.24, + "z": 9.47 + }, + "B5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.24, + "z": 9.47 + }, + "B6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.24, + "z": 9.47 + }, + "B7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.24, + "z": 9.47 + }, + "B8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.24, + "z": 9.47 + }, + "B9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.24, + "z": 9.47 + }, + "C1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.24, + "z": 9.47 + }, + "C10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.24, + "z": 9.47 + }, + "C11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.24, + "z": 9.47 + }, + "C12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.24, + "z": 9.47 + }, + "C2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.24, + "z": 9.47 + }, + "C3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.24, + "z": 9.47 + }, + "C4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.24, + "z": 9.47 + }, + "C5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.24, + "z": 9.47 + }, + "C6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.24, + "z": 9.47 + }, + "C7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.24, + "z": 9.47 + }, + "C8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.24, + "z": 9.47 + }, + "C9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.24, + "z": 9.47 + }, + "D1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.24, + "z": 9.47 + }, + "D10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.24, + "z": 9.47 + }, + "D11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.24, + "z": 9.47 + }, + "D12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.24, + "z": 9.47 + }, + "D2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.24, + "z": 9.47 + }, + "D3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.24, + "z": 9.47 + }, + "D4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.24, + "z": 9.47 + }, + "D5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.24, + "z": 9.47 + }, + "D6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.24, + "z": 9.47 + }, + "D7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.24, + "z": 9.47 + }, + "D8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.24, + "z": 9.47 + }, + "D9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.24, + "z": 9.47 + }, + "E1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.24, + "z": 9.47 + }, + "E10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.24, + "z": 9.47 + }, + "E11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.24, + "z": 9.47 + }, + "E12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.24, + "z": 9.47 + }, + "E2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.24, + "z": 9.47 + }, + "E3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.24, + "z": 9.47 + }, + "E4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.24, + "z": 9.47 + }, + "E5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.24, + "z": 9.47 + }, + "E6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.24, + "z": 9.47 + }, + "E7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.24, + "z": 9.47 + }, + "E8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.24, + "z": 9.47 + }, + "E9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.24, + "z": 9.47 + }, + "F1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.24, + "z": 9.47 + }, + "F10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.24, + "z": 9.47 + }, + "F11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.24, + "z": 9.47 + }, + "F12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.24, + "z": 9.47 + }, + "F2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.24, + "z": 9.47 + }, + "F3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.24, + "z": 9.47 + }, + "F4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.24, + "z": 9.47 + }, + "F5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.24, + "z": 9.47 + }, + "F6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.24, + "z": 9.47 + }, + "F7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.24, + "z": 9.47 + }, + "F8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.24, + "z": 9.47 + }, + "F9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.24, + "z": 9.47 + }, + "G1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.24, + "z": 9.47 + }, + "G10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.24, + "z": 9.47 + }, + "G11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.24, + "z": 9.47 + }, + "G12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.24, + "z": 9.47 + }, + "G2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.24, + "z": 9.47 + }, + "G3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.24, + "z": 9.47 + }, + "G4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.24, + "z": 9.47 + }, + "G5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.24, + "z": 9.47 + }, + "G6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.24, + "z": 9.47 + }, + "G7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.24, + "z": 9.47 + }, + "G8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.24, + "z": 9.47 + }, + "G9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.24, + "z": 9.47 + }, + "H1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.24, + "z": 9.47 + }, + "H10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.24, + "z": 9.47 + }, + "H11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.24, + "z": 9.47 + }, + "H12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.24, + "z": 9.47 + }, + "H2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.24, + "z": 9.47 + }, + "H3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.24, + "z": 9.47 + }, + "H4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.24, + "z": 9.47 + }, + "H5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.24, + "z": 9.47 + }, + "H6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.24, + "z": 9.47 + }, + "H7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.24, + "z": 9.47 + }, + "H8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.24, + "z": 9.47 + }, + "H9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.24, + "z": 9.47 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "H12", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "691afd54dfa7982fb89e5f77c763bfd4", + "notes": [], + "params": { + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "C1" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 124.35 + }, + "gripperOffsets": {}, + "groups": [ + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352095", + "352096", + "352097", + "352099", + "352196" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 6x15 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A2", + "B1", + "B2", + "C1", + "C2" + ] + }, + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352070", + "352098" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 4x50 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A3", + "A4", + "B3", + "B4" + ] + } + ], + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Opentrons 10 Tube Rack with Falcon 4x50 mL, 6x15 mL Conical", + "displayVolumeUnits": "mL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1" + ], + [ + "A2", + "B2", + "C2" + ], + [ + "A3", + "B3" + ], + [ + "A4", + "B4" + ] + ], + "parameters": { + "format": "irregular", + "isMagneticModuleCompatible": false, + "isTiprack": false, + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical" + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 67.75, + "z": 6.85 + }, + "A2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 67.75, + "z": 6.85 + }, + "A3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 60.25, + "z": 7.3 + }, + "A4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 60.25, + "z": 7.3 + }, + "B1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 42.75, + "z": 6.85 + }, + "B2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 42.75, + "z": 6.85 + }, + "B3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 25.25, + "z": 7.3 + }, + "B4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 25.25, + "z": 7.3 + }, + "C1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 17.75, + "z": 6.85 + }, + "C2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 17.75, + "z": 6.85 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c910be62291bb94458a59cb4185c5180", + "notes": [], + "params": { + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "D2" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d75e38152238e9ad0c18e291fe97e483", + "notes": [], + "params": { + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "D3" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8de5f9595204f05bd1016cce23cd32b9", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 178.38, + "y": 288.24, + "z": 97.47 + }, + "tipDiameter": 7.23, + "tipLength": 77.5, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "PartialTipMovementNotAllowedError [line 482]: Error 2004 MOTION_PLANNING_FAILURE (PartialTipMovementNotAllowedError): Moving to NEST 96 Well Plate 100 µL PCR Full Skirt in slot D2 with H12 nozzle partial configuration will result in collision with items in deck slot C1.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "Moving to NEST 96 Well Plate 100 µL PCR Full Skirt in slot D2 with H12 nozzle partial configuration will result in collision with items in deck slot C1.", + "errorCode": "2004", + "errorInfo": {}, + "errorType": "PartialTipMovementNotAllowedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_transfer_source_collision.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "B2" + } + }, + { + "definitionUri": "opentrons/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/1", + "id": "UUID", + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "C1" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "D2" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "D3" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Too tall labware on pickup tip" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_96" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[2cc8efae68][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_east_column].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[2cc8efae68][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_east_column].json new file mode 100644 index 00000000000..c8f724b2161 --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[2cc8efae68][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_east_column].json @@ -0,0 +1,1500 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "C2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-1000ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 97.47 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_1000ul", + "tipLength": 88, + "tipOverlap": 7.95 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.24, + "z": 9.47 + }, + "A10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.24, + "z": 9.47 + }, + "A11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.24, + "z": 9.47 + }, + "A12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.24, + "z": 9.47 + }, + "A2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.24, + "z": 9.47 + }, + "A3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.24, + "z": 9.47 + }, + "A4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.24, + "z": 9.47 + }, + "A5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.24, + "z": 9.47 + }, + "A6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.24, + "z": 9.47 + }, + "A7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.24, + "z": 9.47 + }, + "A8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.24, + "z": 9.47 + }, + "A9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.24, + "z": 9.47 + }, + "B1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.24, + "z": 9.47 + }, + "B10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.24, + "z": 9.47 + }, + "B11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.24, + "z": 9.47 + }, + "B12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.24, + "z": 9.47 + }, + "B2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.24, + "z": 9.47 + }, + "B3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.24, + "z": 9.47 + }, + "B4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.24, + "z": 9.47 + }, + "B5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.24, + "z": 9.47 + }, + "B6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.24, + "z": 9.47 + }, + "B7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.24, + "z": 9.47 + }, + "B8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.24, + "z": 9.47 + }, + "B9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.24, + "z": 9.47 + }, + "C1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.24, + "z": 9.47 + }, + "C10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.24, + "z": 9.47 + }, + "C11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.24, + "z": 9.47 + }, + "C12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.24, + "z": 9.47 + }, + "C2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.24, + "z": 9.47 + }, + "C3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.24, + "z": 9.47 + }, + "C4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.24, + "z": 9.47 + }, + "C5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.24, + "z": 9.47 + }, + "C6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.24, + "z": 9.47 + }, + "C7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.24, + "z": 9.47 + }, + "C8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.24, + "z": 9.47 + }, + "C9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.24, + "z": 9.47 + }, + "D1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.24, + "z": 9.47 + }, + "D10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.24, + "z": 9.47 + }, + "D11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.24, + "z": 9.47 + }, + "D12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.24, + "z": 9.47 + }, + "D2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.24, + "z": 9.47 + }, + "D3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.24, + "z": 9.47 + }, + "D4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.24, + "z": 9.47 + }, + "D5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.24, + "z": 9.47 + }, + "D6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.24, + "z": 9.47 + }, + "D7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.24, + "z": 9.47 + }, + "D8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.24, + "z": 9.47 + }, + "D9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.24, + "z": 9.47 + }, + "E1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.24, + "z": 9.47 + }, + "E10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.24, + "z": 9.47 + }, + "E11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.24, + "z": 9.47 + }, + "E12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.24, + "z": 9.47 + }, + "E2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.24, + "z": 9.47 + }, + "E3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.24, + "z": 9.47 + }, + "E4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.24, + "z": 9.47 + }, + "E5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.24, + "z": 9.47 + }, + "E6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.24, + "z": 9.47 + }, + "E7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.24, + "z": 9.47 + }, + "E8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.24, + "z": 9.47 + }, + "E9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.24, + "z": 9.47 + }, + "F1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.24, + "z": 9.47 + }, + "F10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.24, + "z": 9.47 + }, + "F11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.24, + "z": 9.47 + }, + "F12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.24, + "z": 9.47 + }, + "F2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.24, + "z": 9.47 + }, + "F3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.24, + "z": 9.47 + }, + "F4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.24, + "z": 9.47 + }, + "F5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.24, + "z": 9.47 + }, + "F6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.24, + "z": 9.47 + }, + "F7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.24, + "z": 9.47 + }, + "F8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.24, + "z": 9.47 + }, + "F9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.24, + "z": 9.47 + }, + "G1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.24, + "z": 9.47 + }, + "G10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.24, + "z": 9.47 + }, + "G11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.24, + "z": 9.47 + }, + "G12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.24, + "z": 9.47 + }, + "G2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.24, + "z": 9.47 + }, + "G3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.24, + "z": 9.47 + }, + "G4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.24, + "z": 9.47 + }, + "G5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.24, + "z": 9.47 + }, + "G6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.24, + "z": 9.47 + }, + "G7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.24, + "z": 9.47 + }, + "G8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.24, + "z": 9.47 + }, + "G9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.24, + "z": 9.47 + }, + "H1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.24, + "z": 9.47 + }, + "H10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.24, + "z": 9.47 + }, + "H11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.24, + "z": 9.47 + }, + "H12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.24, + "z": 9.47 + }, + "H2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.24, + "z": 9.47 + }, + "H3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.24, + "z": 9.47 + }, + "H4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.24, + "z": 9.47 + }, + "H5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.24, + "z": 9.47 + }, + "H6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.24, + "z": 9.47 + }, + "H7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.24, + "z": 9.47 + }, + "H8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.24, + "z": 9.47 + }, + "H9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.24, + "z": 9.47 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A12", + "style": "COLUMN" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "691afd54dfa7982fb89e5f77c763bfd4", + "notes": [], + "params": { + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "C1" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 124.35 + }, + "gripperOffsets": {}, + "groups": [ + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352095", + "352096", + "352097", + "352099", + "352196" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 6x15 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A2", + "B1", + "B2", + "C1", + "C2" + ] + }, + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352070", + "352098" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 4x50 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A3", + "A4", + "B3", + "B4" + ] + } + ], + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Opentrons 10 Tube Rack with Falcon 4x50 mL, 6x15 mL Conical", + "displayVolumeUnits": "mL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1" + ], + [ + "A2", + "B2", + "C2" + ], + [ + "A3", + "B3" + ], + [ + "A4", + "B4" + ] + ], + "parameters": { + "format": "irregular", + "isMagneticModuleCompatible": false, + "isTiprack": false, + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical" + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 67.75, + "z": 6.85 + }, + "A2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 67.75, + "z": 6.85 + }, + "A3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 60.25, + "z": 7.3 + }, + "A4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 60.25, + "z": 7.3 + }, + "B1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 42.75, + "z": 6.85 + }, + "B2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 42.75, + "z": 6.85 + }, + "B3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 25.25, + "z": 7.3 + }, + "B4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 25.25, + "z": 7.3 + }, + "C1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 17.75, + "z": 6.85 + }, + "C2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 17.75, + "z": 6.85 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "PartialTipMovementNotAllowedError [line 479]: Error 2004 MOTION_PLANNING_FAILURE (PartialTipMovementNotAllowedError): Moving to Opentrons OT-2 96 Tip Rack 1000 µL in slot C2 with A12 nozzle partial configuration will result in collision with items in deck slot C1.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "Moving to Opentrons OT-2 96 Tip Rack 1000 µL in slot C2 with A12 nozzle partial configuration will result in collision with items in deck slot C1.", + "errorCode": "2004", + "errorInfo": {}, + "errorType": "PartialTipMovementNotAllowedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_east_column.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "C2" + } + }, + { + "definitionUri": "opentrons/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/1", + "id": "UUID", + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "C1" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Too tall labware on pickup tip" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_96" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[30c05024e8][Flex_S_v2_20_96_None_SINGLE_4Corners50ul].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[30c05024e8][Flex_S_v2_20_96_None_SINGLE_4Corners50ul].json new file mode 100644 index 00000000000..213344204e5 --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[30c05024e8][Flex_S_v2_20_96_None_SINGLE_4Corners50ul].json @@ -0,0 +1,3036 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "displayName": "Partial Tip Rack", + "loadName": "opentrons_flex_96_tiprack_50ul", + "location": { + "slotName": "C2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.75, + "zDimension": 99 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 23.9, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons Flex 96 Tip Rack 50 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_flex_96_tiprack_50ul", + "quirks": [], + "tipLength": 57.9, + "tipOverlap": 10.5 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 121 + } + }, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 74.38, + "z": 1.5 + }, + "A10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 74.38, + "z": 1.5 + }, + "A11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 74.38, + "z": 1.5 + }, + "A12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 74.38, + "z": 1.5 + }, + "A2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 74.38, + "z": 1.5 + }, + "A3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 74.38, + "z": 1.5 + }, + "A4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 74.38, + "z": 1.5 + }, + "A5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 74.38, + "z": 1.5 + }, + "A6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 74.38, + "z": 1.5 + }, + "A7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 74.38, + "z": 1.5 + }, + "A8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 74.38, + "z": 1.5 + }, + "A9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 74.38, + "z": 1.5 + }, + "B1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 65.38, + "z": 1.5 + }, + "B10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 65.38, + "z": 1.5 + }, + "B11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 65.38, + "z": 1.5 + }, + "B12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 65.38, + "z": 1.5 + }, + "B2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 65.38, + "z": 1.5 + }, + "B3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 65.38, + "z": 1.5 + }, + "B4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 65.38, + "z": 1.5 + }, + "B5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 65.38, + "z": 1.5 + }, + "B6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 65.38, + "z": 1.5 + }, + "B7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 65.38, + "z": 1.5 + }, + "B8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 65.38, + "z": 1.5 + }, + "B9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 65.38, + "z": 1.5 + }, + "C1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 56.38, + "z": 1.5 + }, + "C10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 56.38, + "z": 1.5 + }, + "C11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 56.38, + "z": 1.5 + }, + "C12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 56.38, + "z": 1.5 + }, + "C2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 56.38, + "z": 1.5 + }, + "C3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 56.38, + "z": 1.5 + }, + "C4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 56.38, + "z": 1.5 + }, + "C5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 56.38, + "z": 1.5 + }, + "C6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 56.38, + "z": 1.5 + }, + "C7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 56.38, + "z": 1.5 + }, + "C8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 56.38, + "z": 1.5 + }, + "C9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 56.38, + "z": 1.5 + }, + "D1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 47.38, + "z": 1.5 + }, + "D10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 47.38, + "z": 1.5 + }, + "D11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 47.38, + "z": 1.5 + }, + "D12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 47.38, + "z": 1.5 + }, + "D2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 47.38, + "z": 1.5 + }, + "D3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 47.38, + "z": 1.5 + }, + "D4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 47.38, + "z": 1.5 + }, + "D5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 47.38, + "z": 1.5 + }, + "D6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 47.38, + "z": 1.5 + }, + "D7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 47.38, + "z": 1.5 + }, + "D8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 47.38, + "z": 1.5 + }, + "D9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 47.38, + "z": 1.5 + }, + "E1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 38.38, + "z": 1.5 + }, + "E10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 38.38, + "z": 1.5 + }, + "E11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 38.38, + "z": 1.5 + }, + "E12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 38.38, + "z": 1.5 + }, + "E2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 38.38, + "z": 1.5 + }, + "E3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 38.38, + "z": 1.5 + }, + "E4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 38.38, + "z": 1.5 + }, + "E5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 38.38, + "z": 1.5 + }, + "E6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 38.38, + "z": 1.5 + }, + "E7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 38.38, + "z": 1.5 + }, + "E8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 38.38, + "z": 1.5 + }, + "E9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 38.38, + "z": 1.5 + }, + "F1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 29.38, + "z": 1.5 + }, + "F10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 29.38, + "z": 1.5 + }, + "F11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 29.38, + "z": 1.5 + }, + "F12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 29.38, + "z": 1.5 + }, + "F2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 29.38, + "z": 1.5 + }, + "F3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 29.38, + "z": 1.5 + }, + "F4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 29.38, + "z": 1.5 + }, + "F5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 29.38, + "z": 1.5 + }, + "F6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 29.38, + "z": 1.5 + }, + "F7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 29.38, + "z": 1.5 + }, + "F8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 29.38, + "z": 1.5 + }, + "F9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 29.38, + "z": 1.5 + }, + "G1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 20.38, + "z": 1.5 + }, + "G10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 20.38, + "z": 1.5 + }, + "G11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 20.38, + "z": 1.5 + }, + "G12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 20.38, + "z": 1.5 + }, + "G2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 20.38, + "z": 1.5 + }, + "G3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 20.38, + "z": 1.5 + }, + "G4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 20.38, + "z": 1.5 + }, + "G5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 20.38, + "z": 1.5 + }, + "G6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 20.38, + "z": 1.5 + }, + "G7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 20.38, + "z": 1.5 + }, + "G8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 20.38, + "z": 1.5 + }, + "G9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 20.38, + "z": 1.5 + }, + "H1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 11.38, + "z": 1.5 + }, + "H10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 11.38, + "z": 1.5 + }, + "H11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 11.38, + "z": 1.5 + }, + "H12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 11.38, + "z": 1.5 + }, + "H2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 11.38, + "z": 1.5 + }, + "H3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 11.38, + "z": 1.5 + }, + "H4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 11.38, + "z": 1.5 + }, + "H5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 11.38, + "z": 1.5 + }, + "H6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 11.38, + "z": 1.5 + }, + "H7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 11.38, + "z": 1.5 + }, + "H8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 11.38, + "z": 1.5 + }, + "H9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 11.38, + "z": 1.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A1", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5004162d048e1cc084a75b87850217a3", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H12" + }, + "result": { + "position": { + "x": 277.38, + "y": 118.38, + "z": 99.0 + }, + "tipDiameter": 5.58, + "tipLength": 47.4, + "tipVolume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9fc4c9944b197642c13d249062ca5979", + "notes": [], + "params": { + "message": "Tip rack in C2" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a6ffca005d40b5a10794c2fdabb52108", + "notes": [], + "params": { + "message": "A: A1 🟢 A2 🟢 A3 🟢 A4 🟢 A5 🟢 A6 🟢 A7 🟢 A8 🟢 A9 🟢 A10 🟢 A11 🟢 A12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dfab6c9318cbf3663895698e14365582", + "notes": [], + "params": { + "message": "B: B1 🟢 B2 🟢 B3 🟢 B4 🟢 B5 🟢 B6 🟢 B7 🟢 B8 🟢 B9 🟢 B10 🟢 B11 🟢 B12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bf4cafdf2e1ef7ee3f65c575c2cfeff9", + "notes": [], + "params": { + "message": "C: C1 🟢 C2 🟢 C3 🟢 C4 🟢 C5 🟢 C6 🟢 C7 🟢 C8 🟢 C9 🟢 C10 🟢 C11 🟢 C12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2a3270bda2ade196171484b198d427a6", + "notes": [], + "params": { + "message": "D: D1 🟢 D2 🟢 D3 🟢 D4 🟢 D5 🟢 D6 🟢 D7 🟢 D8 🟢 D9 🟢 D10 🟢 D11 🟢 D12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "010ca51ab88e06fa5895fa1c49d918f0", + "notes": [], + "params": { + "message": "E: E1 🟢 E2 🟢 E3 🟢 E4 🟢 E5 🟢 E6 🟢 E7 🟢 E8 🟢 E9 🟢 E10 🟢 E11 🟢 E12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a8f7708560dfc4d6aa3d51181e46ba7a", + "notes": [], + "params": { + "message": "F: F1 🟢 F2 🟢 F3 🟢 F4 🟢 F5 🟢 F6 🟢 F7 🟢 F8 🟢 F9 🟢 F10 🟢 F11 🟢 F12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0ceaaa482eb16e9d121e3fd897ff81d4", + "notes": [], + "params": { + "message": "G: G1 🟢 G2 🟢 G3 🟢 G4 🟢 G5 🟢 G6 🟢 G7 🟢 G8 🟢 G9 🟢 G10 🟢 G11 🟢 G12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c2b08bb2435f6c7a32eec54446508d3", + "notes": [], + "params": { + "message": "H: H1 🟢 H2 🟢 H3 🟢 H4 🟢 H5 🟢 H6 🟢 H7 🟢 H8 🟢 H9 🟢 H10 🟢 H11 🟢 H12 ❌ " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "waitForResume", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fd7e80febf2f61e42c57cd370d1d7066", + "notes": [], + "params": { + "message": "How was the pickup of first tip?" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c791613d10ad485c1bc13c6835ae8420", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dbf86704f69aa819c2924aab5dc0d65f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f50c5f0c7f13871a9c2d9e83442caca8", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G12" + }, + "result": { + "position": { + "x": 277.38, + "y": 127.38, + "z": 99.0 + }, + "tipDiameter": 5.58, + "tipLength": 47.4, + "tipVolume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4a2de6c8e9b444a1216c6ace932ade40", + "notes": [], + "params": { + "message": "Tip rack in C2" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "94c16af28b0ab6bbb740b25b939dab76", + "notes": [], + "params": { + "message": "A: A1 🟢 A2 🟢 A3 🟢 A4 🟢 A5 🟢 A6 🟢 A7 🟢 A8 🟢 A9 🟢 A10 🟢 A11 🟢 A12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "131dfb328e7b4ff1491bbac20e93f66a", + "notes": [], + "params": { + "message": "B: B1 🟢 B2 🟢 B3 🟢 B4 🟢 B5 🟢 B6 🟢 B7 🟢 B8 🟢 B9 🟢 B10 🟢 B11 🟢 B12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "38185054c14a8bb90a0747c922f6f729", + "notes": [], + "params": { + "message": "C: C1 🟢 C2 🟢 C3 🟢 C4 🟢 C5 🟢 C6 🟢 C7 🟢 C8 🟢 C9 🟢 C10 🟢 C11 🟢 C12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bc53785b7d0ebcda5af6c9536c2793f6", + "notes": [], + "params": { + "message": "D: D1 🟢 D2 🟢 D3 🟢 D4 🟢 D5 🟢 D6 🟢 D7 🟢 D8 🟢 D9 🟢 D10 🟢 D11 🟢 D12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b92cd9129eb6c8b26454528f2f2f8d48", + "notes": [], + "params": { + "message": "E: E1 🟢 E2 🟢 E3 🟢 E4 🟢 E5 🟢 E6 🟢 E7 🟢 E8 🟢 E9 🟢 E10 🟢 E11 🟢 E12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8c28b8123d8bb0502cfa282f8578336d", + "notes": [], + "params": { + "message": "F: F1 🟢 F2 🟢 F3 🟢 F4 🟢 F5 🟢 F6 🟢 F7 🟢 F8 🟢 F9 🟢 F10 🟢 F11 🟢 F12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bfe92dc01d8ac2866e8b26c71491a38e", + "notes": [], + "params": { + "message": "G: G1 🟢 G2 🟢 G3 🟢 G4 🟢 G5 🟢 G6 🟢 G7 🟢 G8 🟢 G9 🟢 G10 🟢 G11 🟢 G12 ❌ " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7f7b97535cb1281376bce6751b27e199", + "notes": [], + "params": { + "message": "H: H1 🟢 H2 🟢 H3 🟢 H4 🟢 H5 🟢 H6 🟢 H7 🟢 H8 🟢 H9 🟢 H10 🟢 H11 🟢 H12 ❌ " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "waitForResume", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8ad452640dfdd3dec226f2f2584a5241", + "notes": [], + "params": { + "message": "How was the pickup of second tip?" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b666f0e497ca1739a0c2dc88524d61ae", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d63a9e89abf89d43c469036b9fcb7780", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4be5c184815438d4e445cb0604d3f73d", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A12", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "07e987e7981167d01af748c7205daae3", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H1" + }, + "result": { + "position": { + "x": 178.38, + "y": 118.38, + "z": 99.0 + }, + "tipDiameter": 5.58, + "tipLength": 47.4, + "tipVolume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "647ed047d62ffea3ac07ec09f3b99aad", + "notes": [], + "params": { + "message": "Tip rack in C2" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "aec729059ae187594ef5ee2fe04ad494", + "notes": [], + "params": { + "message": "A: A1 🟢 A2 🟢 A3 🟢 A4 🟢 A5 🟢 A6 🟢 A7 🟢 A8 🟢 A9 🟢 A10 🟢 A11 🟢 A12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9f1942670724bd284f0ac3dc91049cd0", + "notes": [], + "params": { + "message": "B: B1 🟢 B2 🟢 B3 🟢 B4 🟢 B5 🟢 B6 🟢 B7 🟢 B8 🟢 B9 🟢 B10 🟢 B11 🟢 B12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "efb371e7e29b0e5dfbcd981f97fd0d7d", + "notes": [], + "params": { + "message": "C: C1 🟢 C2 🟢 C3 🟢 C4 🟢 C5 🟢 C6 🟢 C7 🟢 C8 🟢 C9 🟢 C10 🟢 C11 🟢 C12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a3adddba4c64935bfe3da7e668db93e1", + "notes": [], + "params": { + "message": "D: D1 🟢 D2 🟢 D3 🟢 D4 🟢 D5 🟢 D6 🟢 D7 🟢 D8 🟢 D9 🟢 D10 🟢 D11 🟢 D12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cbd39523c831c305f6e0069931b47242", + "notes": [], + "params": { + "message": "E: E1 🟢 E2 🟢 E3 🟢 E4 🟢 E5 🟢 E6 🟢 E7 🟢 E8 🟢 E9 🟢 E10 🟢 E11 🟢 E12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "057c96943ac0b7ce5354ccc0d8f4ce45", + "notes": [], + "params": { + "message": "F: F1 🟢 F2 🟢 F3 🟢 F4 🟢 F5 🟢 F6 🟢 F7 🟢 F8 🟢 F9 🟢 F10 🟢 F11 🟢 F12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5cbb2782d57281b118615e70b4a621c5", + "notes": [], + "params": { + "message": "G: G1 🟢 G2 🟢 G3 🟢 G4 🟢 G5 🟢 G6 🟢 G7 🟢 G8 🟢 G9 🟢 G10 🟢 G11 🟢 G12 ❌ " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8ed048de249e3846ed1ff9f9dde9e958", + "notes": [], + "params": { + "message": "H: H1 ❌ H2 🟢 H3 🟢 H4 🟢 H5 🟢 H6 🟢 H7 🟢 H8 🟢 H9 🟢 H10 🟢 H11 🟢 H12 ❌ " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "waitForResume", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "088fc5669755ca9feda62067aad18bb6", + "notes": [], + "params": { + "message": "How was the pickup of first tip?" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "420d4d12bba5d32163ffccb372149d6d", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c7e588a2d068d26512751a524a673dd5", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "35f00006858a8224a48ed2b4658eb31d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 178.38, + "y": 127.38, + "z": 99.0 + }, + "tipDiameter": 5.58, + "tipLength": 47.4, + "tipVolume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b9095eaf1cec85439a30507e970c5ec8", + "notes": [], + "params": { + "message": "Tip rack in C2" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "26d5394915048a3b06e3c8db3835e403", + "notes": [], + "params": { + "message": "A: A1 🟢 A2 🟢 A3 🟢 A4 🟢 A5 🟢 A6 🟢 A7 🟢 A8 🟢 A9 🟢 A10 🟢 A11 🟢 A12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2a42306216276031ddfbb8c037d69762", + "notes": [], + "params": { + "message": "B: B1 🟢 B2 🟢 B3 🟢 B4 🟢 B5 🟢 B6 🟢 B7 🟢 B8 🟢 B9 🟢 B10 🟢 B11 🟢 B12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a93de6ba19974caebb98dc855fecaa2c", + "notes": [], + "params": { + "message": "C: C1 🟢 C2 🟢 C3 🟢 C4 🟢 C5 🟢 C6 🟢 C7 🟢 C8 🟢 C9 🟢 C10 🟢 C11 🟢 C12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d2201d99961e2ddf7f858f2b07e349a2", + "notes": [], + "params": { + "message": "D: D1 🟢 D2 🟢 D3 🟢 D4 🟢 D5 🟢 D6 🟢 D7 🟢 D8 🟢 D9 🟢 D10 🟢 D11 🟢 D12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5978947a6e4feb2ca63e4bb41deb026a", + "notes": [], + "params": { + "message": "E: E1 🟢 E2 🟢 E3 🟢 E4 🟢 E5 🟢 E6 🟢 E7 🟢 E8 🟢 E9 🟢 E10 🟢 E11 🟢 E12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "54c2f016d243e3701cc85475d0f551ca", + "notes": [], + "params": { + "message": "F: F1 🟢 F2 🟢 F3 🟢 F4 🟢 F5 🟢 F6 🟢 F7 🟢 F8 🟢 F9 🟢 F10 🟢 F11 🟢 F12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "adddb6d5d8e1b893cbc966607ffcee8e", + "notes": [], + "params": { + "message": "G: G1 ❌ G2 🟢 G3 🟢 G4 🟢 G5 🟢 G6 🟢 G7 🟢 G8 🟢 G9 🟢 G10 🟢 G11 🟢 G12 ❌ " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "eafd8cc150933ced28ebe9704242e9f2", + "notes": [], + "params": { + "message": "H: H1 ❌ H2 🟢 H3 🟢 H4 🟢 H5 🟢 H6 🟢 H7 🟢 H8 🟢 H9 🟢 H10 🟢 H11 🟢 H12 ❌ " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "waitForResume", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "955b215bf9943422b14459eeb214394e", + "notes": [], + "params": { + "message": "How was the pickup of second tip?" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3b7baa90531229fcbbbb66600fd9e5ff", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ba40f38807c65e6d2a594596b93752de", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e4e50e837bb760932ffe81967a020e57", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "H1", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8146a5669f32a337d2f055d88cf93990", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A12" + }, + "result": { + "position": { + "x": 277.38, + "y": 181.38, + "z": 99.0 + }, + "tipDiameter": 5.58, + "tipLength": 47.4, + "tipVolume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "47260134446d37223f07a6526c0c51b7", + "notes": [], + "params": { + "message": "Tip rack in C2" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b5c7d13b59576454c9f9c0330d46d3d0", + "notes": [], + "params": { + "message": "A: A1 🟢 A2 🟢 A3 🟢 A4 🟢 A5 🟢 A6 🟢 A7 🟢 A8 🟢 A9 🟢 A10 🟢 A11 🟢 A12 ❌ " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "452d83610ef5a88948a9f1421146a12e", + "notes": [], + "params": { + "message": "B: B1 🟢 B2 🟢 B3 🟢 B4 🟢 B5 🟢 B6 🟢 B7 🟢 B8 🟢 B9 🟢 B10 🟢 B11 🟢 B12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7cda495949f04758c9b2eb6ffb7789ac", + "notes": [], + "params": { + "message": "C: C1 🟢 C2 🟢 C3 🟢 C4 🟢 C5 🟢 C6 🟢 C7 🟢 C8 🟢 C9 🟢 C10 🟢 C11 🟢 C12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2ac3af6f86c891bfe48c2302b6b145dd", + "notes": [], + "params": { + "message": "D: D1 🟢 D2 🟢 D3 🟢 D4 🟢 D5 🟢 D6 🟢 D7 🟢 D8 🟢 D9 🟢 D10 🟢 D11 🟢 D12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "69baf96e06ebeb336b497dd77f70e516", + "notes": [], + "params": { + "message": "E: E1 🟢 E2 🟢 E3 🟢 E4 🟢 E5 🟢 E6 🟢 E7 🟢 E8 🟢 E9 🟢 E10 🟢 E11 🟢 E12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e72d50738b553791e7b687acf79a3737", + "notes": [], + "params": { + "message": "F: F1 🟢 F2 🟢 F3 🟢 F4 🟢 F5 🟢 F6 🟢 F7 🟢 F8 🟢 F9 🟢 F10 🟢 F11 🟢 F12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f7e4d98241adac5a61b9505ed22ecfd5", + "notes": [], + "params": { + "message": "G: G1 ❌ G2 🟢 G3 🟢 G4 🟢 G5 🟢 G6 🟢 G7 🟢 G8 🟢 G9 🟢 G10 🟢 G11 🟢 G12 ❌ " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2955f8a9f87e8924613ee9a912b073eb", + "notes": [], + "params": { + "message": "H: H1 ❌ H2 🟢 H3 🟢 H4 🟢 H5 🟢 H6 🟢 H7 🟢 H8 🟢 H9 🟢 H10 🟢 H11 🟢 H12 ❌ " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "waitForResume", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e3d92abb0c0caaffc28b6a11c60eaf17", + "notes": [], + "params": { + "message": "How was the pickup of first tip?" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3ce4c9c7192047016e8b0746d2f1322e", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b539abdb1c9d2dc53d121e1c962bfe67", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2af175b6498ba6680a02b11dda3bfa4d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B12" + }, + "result": { + "position": { + "x": 277.38, + "y": 172.38, + "z": 99.0 + }, + "tipDiameter": 5.58, + "tipLength": 47.4, + "tipVolume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1245c9671b60ca4f1f1e777f08251551", + "notes": [], + "params": { + "message": "Tip rack in C2" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e0db1665721e9acf28e990a4ac3c5ad2", + "notes": [], + "params": { + "message": "A: A1 🟢 A2 🟢 A3 🟢 A4 🟢 A5 🟢 A6 🟢 A7 🟢 A8 🟢 A9 🟢 A10 🟢 A11 🟢 A12 ❌ " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "494daeb134a1ad3f18274a28cfa9e603", + "notes": [], + "params": { + "message": "B: B1 🟢 B2 🟢 B3 🟢 B4 🟢 B5 🟢 B6 🟢 B7 🟢 B8 🟢 B9 🟢 B10 🟢 B11 🟢 B12 ❌ " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f7aeb5bf8931dd1f8c8510ec9841029e", + "notes": [], + "params": { + "message": "C: C1 🟢 C2 🟢 C3 🟢 C4 🟢 C5 🟢 C6 🟢 C7 🟢 C8 🟢 C9 🟢 C10 🟢 C11 🟢 C12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6e92e3c228c340bc887ebe00f54c97bb", + "notes": [], + "params": { + "message": "D: D1 🟢 D2 🟢 D3 🟢 D4 🟢 D5 🟢 D6 🟢 D7 🟢 D8 🟢 D9 🟢 D10 🟢 D11 🟢 D12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bc7254b7d9ee662539a347220b2cfad2", + "notes": [], + "params": { + "message": "E: E1 🟢 E2 🟢 E3 🟢 E4 🟢 E5 🟢 E6 🟢 E7 🟢 E8 🟢 E9 🟢 E10 🟢 E11 🟢 E12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1d23a5de6fe0ceb9c8f587df3b95c4b4", + "notes": [], + "params": { + "message": "F: F1 🟢 F2 🟢 F3 🟢 F4 🟢 F5 🟢 F6 🟢 F7 🟢 F8 🟢 F9 🟢 F10 🟢 F11 🟢 F12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3745aa86b134f77617935475e6c80233", + "notes": [], + "params": { + "message": "G: G1 ❌ G2 🟢 G3 🟢 G4 🟢 G5 🟢 G6 🟢 G7 🟢 G8 🟢 G9 🟢 G10 🟢 G11 🟢 G12 ❌ " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e2e750ff48384221169e390a0702336b", + "notes": [], + "params": { + "message": "H: H1 ❌ H2 🟢 H3 🟢 H4 🟢 H5 🟢 H6 🟢 H7 🟢 H8 🟢 H9 🟢 H10 🟢 H11 🟢 H12 ❌ " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "waitForResume", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6576254c746c4b37f925e21136e80d66", + "notes": [], + "params": { + "message": "How was the pickup of second tip?" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3320c7bbc09a2db56056072a8a798222", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ddfc7464522cdf2a38108bf34424b24e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "39ec099a8923888b7871ad6019cb21e5", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "H12", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "58f8109f80ebb45883ec594256cfaab7", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 178.38, + "y": 181.38, + "z": 99.0 + }, + "tipDiameter": 5.58, + "tipLength": 47.4, + "tipVolume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "aca3d4366a03a9b30c948084a1dc83c6", + "notes": [], + "params": { + "message": "Tip rack in C2" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2d0328802bcc36ff9f2557453f58f3cc", + "notes": [], + "params": { + "message": "A: A1 ❌ A2 🟢 A3 🟢 A4 🟢 A5 🟢 A6 🟢 A7 🟢 A8 🟢 A9 🟢 A10 🟢 A11 🟢 A12 ❌ " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "888901bffca0415d644a7036b0e720a7", + "notes": [], + "params": { + "message": "B: B1 🟢 B2 🟢 B3 🟢 B4 🟢 B5 🟢 B6 🟢 B7 🟢 B8 🟢 B9 🟢 B10 🟢 B11 🟢 B12 ❌ " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6c823b5aef8fc8eb5b7049a451d7b1c2", + "notes": [], + "params": { + "message": "C: C1 🟢 C2 🟢 C3 🟢 C4 🟢 C5 🟢 C6 🟢 C7 🟢 C8 🟢 C9 🟢 C10 🟢 C11 🟢 C12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "eaeb0bf5aa918cd4d96f93ca6400a8fa", + "notes": [], + "params": { + "message": "D: D1 🟢 D2 🟢 D3 🟢 D4 🟢 D5 🟢 D6 🟢 D7 🟢 D8 🟢 D9 🟢 D10 🟢 D11 🟢 D12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "94a770a2b92f11dba0d84afce8c3602f", + "notes": [], + "params": { + "message": "E: E1 🟢 E2 🟢 E3 🟢 E4 🟢 E5 🟢 E6 🟢 E7 🟢 E8 🟢 E9 🟢 E10 🟢 E11 🟢 E12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e9e038409a1fb4a96271ecd2c6618fcd", + "notes": [], + "params": { + "message": "F: F1 🟢 F2 🟢 F3 🟢 F4 🟢 F5 🟢 F6 🟢 F7 🟢 F8 🟢 F9 🟢 F10 🟢 F11 🟢 F12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3a1aac2fea7e7b9bdf2d7e84b7f21da4", + "notes": [], + "params": { + "message": "G: G1 ❌ G2 🟢 G3 🟢 G4 🟢 G5 🟢 G6 🟢 G7 🟢 G8 🟢 G9 🟢 G10 🟢 G11 🟢 G12 ❌ " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "91ce7f5d52090cc10d0e2e408d00ed4e", + "notes": [], + "params": { + "message": "H: H1 ❌ H2 🟢 H3 🟢 H4 🟢 H5 🟢 H6 🟢 H7 🟢 H8 🟢 H9 🟢 H10 🟢 H11 🟢 H12 ❌ " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "waitForResume", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "753c2a13c45947dace595307c8ea26ba", + "notes": [], + "params": { + "message": "How was the pickup of first tip?" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d3ae7f2314841b95ca8d3cf230bf9b21", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7c837909b8d1552c14cef715260f917f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0565d26cc002454d430a61f4e5eed7d5", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B1" + }, + "result": { + "position": { + "x": 178.38, + "y": 172.38, + "z": 99.0 + }, + "tipDiameter": 5.58, + "tipLength": 47.4, + "tipVolume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5fa7e910997fd1cac987e0b04c00da65", + "notes": [], + "params": { + "message": "Tip rack in C2" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "152c49aafb865e40fb4f15761f50398f", + "notes": [], + "params": { + "message": "A: A1 ❌ A2 🟢 A3 🟢 A4 🟢 A5 🟢 A6 🟢 A7 🟢 A8 🟢 A9 🟢 A10 🟢 A11 🟢 A12 ❌ " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1594fe6c20d551ef93ee1bf1feaee836", + "notes": [], + "params": { + "message": "B: B1 ❌ B2 🟢 B3 🟢 B4 🟢 B5 🟢 B6 🟢 B7 🟢 B8 🟢 B9 🟢 B10 🟢 B11 🟢 B12 ❌ " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "86e47d92270a0cabf1e3c697f57ed316", + "notes": [], + "params": { + "message": "C: C1 🟢 C2 🟢 C3 🟢 C4 🟢 C5 🟢 C6 🟢 C7 🟢 C8 🟢 C9 🟢 C10 🟢 C11 🟢 C12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2ee1065ee2102df00b147cfa2808d70c", + "notes": [], + "params": { + "message": "D: D1 🟢 D2 🟢 D3 🟢 D4 🟢 D5 🟢 D6 🟢 D7 🟢 D8 🟢 D9 🟢 D10 🟢 D11 🟢 D12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "99209bbb3a02c522ce8c527107f68260", + "notes": [], + "params": { + "message": "E: E1 🟢 E2 🟢 E3 🟢 E4 🟢 E5 🟢 E6 🟢 E7 🟢 E8 🟢 E9 🟢 E10 🟢 E11 🟢 E12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2b1cc8d326be53cd99b3f66a72ebcb41", + "notes": [], + "params": { + "message": "F: F1 🟢 F2 🟢 F3 🟢 F4 🟢 F5 🟢 F6 🟢 F7 🟢 F8 🟢 F9 🟢 F10 🟢 F11 🟢 F12 🟢 " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "baeccd755cbd60b4b599785aae367cdf", + "notes": [], + "params": { + "message": "G: G1 ❌ G2 🟢 G3 🟢 G4 🟢 G5 🟢 G6 🟢 G7 🟢 G8 🟢 G9 🟢 G10 🟢 G11 🟢 G12 ❌ " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cfce1cc227da66b2a97d39a809c8d214", + "notes": [], + "params": { + "message": "H: H1 ❌ H2 🟢 H3 🟢 H4 🟢 H5 🟢 H6 🟢 H7 🟢 H8 🟢 H9 🟢 H10 🟢 H11 🟢 H12 ❌ " + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "waitForResume", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "60827a1c0612f57a09e2fc451994bfb8", + "notes": [], + "params": { + "message": "How was the pickup of second tip?" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9dc4d2143f1fbaf0fbb2490637e897d1", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "aeb6bc7180eb824eaebf6a9ee96d222e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [], + "files": [ + { + "name": "Flex_S_v2_20_96_None_SINGLE_4Corners50ul.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_flex_96_tiprack_50ul/1", + "displayName": "Partial Tip Rack", + "id": "UUID", + "loadName": "opentrons_flex_96_tiprack_50ul", + "location": { + "slotName": "C2" + } + } + ], + "liquids": [], + "metadata": { + "description": "96 2 tips picked up on all 4 corners of the tip rack", + "protocolName": "96Channel SINGLE Pickup on all 4 corners 2 pickups" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_96" + } + ], + "result": "ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[31d1aec819][Flex_S_v2_20_96_None_SINGLE_HappyPathNorthSide].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[31d1aec819][Flex_S_v2_20_96_None_SINGLE_HappyPathNorthSide].json new file mode 100644 index 00000000000..25475c98b9a --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[31d1aec819][Flex_S_v2_20_96_None_SINGLE_HappyPathNorthSide].json @@ -0,0 +1,9380 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "displayName": "Partial Tip Rack", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "D2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.75, + "zDimension": 99 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 23.9, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons Flex 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_flex_96_tiprack_1000ul", + "quirks": [], + "tipLength": 95.6, + "tipOverlap": 10.5 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 121 + } + }, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.38, + "z": 1.5 + }, + "A10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.38, + "z": 1.5 + }, + "A11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.38, + "z": 1.5 + }, + "A12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.38, + "z": 1.5 + }, + "A2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.38, + "z": 1.5 + }, + "A3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.38, + "z": 1.5 + }, + "A4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.38, + "z": 1.5 + }, + "A5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.38, + "z": 1.5 + }, + "A6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.38, + "z": 1.5 + }, + "A7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.38, + "z": 1.5 + }, + "A8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.38, + "z": 1.5 + }, + "A9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.38, + "z": 1.5 + }, + "B1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.38, + "z": 1.5 + }, + "B10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.38, + "z": 1.5 + }, + "B11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.38, + "z": 1.5 + }, + "B12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.38, + "z": 1.5 + }, + "B2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.38, + "z": 1.5 + }, + "B3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.38, + "z": 1.5 + }, + "B4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.38, + "z": 1.5 + }, + "B5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.38, + "z": 1.5 + }, + "B6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.38, + "z": 1.5 + }, + "B7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.38, + "z": 1.5 + }, + "B8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.38, + "z": 1.5 + }, + "B9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.38, + "z": 1.5 + }, + "C1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.38, + "z": 1.5 + }, + "C10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.38, + "z": 1.5 + }, + "C11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.38, + "z": 1.5 + }, + "C12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.38, + "z": 1.5 + }, + "C2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.38, + "z": 1.5 + }, + "C3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.38, + "z": 1.5 + }, + "C4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.38, + "z": 1.5 + }, + "C5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.38, + "z": 1.5 + }, + "C6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.38, + "z": 1.5 + }, + "C7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.38, + "z": 1.5 + }, + "C8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.38, + "z": 1.5 + }, + "C9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.38, + "z": 1.5 + }, + "D1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.38, + "z": 1.5 + }, + "D10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.38, + "z": 1.5 + }, + "D11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.38, + "z": 1.5 + }, + "D12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.38, + "z": 1.5 + }, + "D2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.38, + "z": 1.5 + }, + "D3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.38, + "z": 1.5 + }, + "D4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.38, + "z": 1.5 + }, + "D5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.38, + "z": 1.5 + }, + "D6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.38, + "z": 1.5 + }, + "D7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.38, + "z": 1.5 + }, + "D8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.38, + "z": 1.5 + }, + "D9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.38, + "z": 1.5 + }, + "E1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.38, + "z": 1.5 + }, + "E10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.38, + "z": 1.5 + }, + "E11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.38, + "z": 1.5 + }, + "E12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.38, + "z": 1.5 + }, + "E2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.38, + "z": 1.5 + }, + "E3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.38, + "z": 1.5 + }, + "E4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.38, + "z": 1.5 + }, + "E5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.38, + "z": 1.5 + }, + "E6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.38, + "z": 1.5 + }, + "E7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.38, + "z": 1.5 + }, + "E8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.38, + "z": 1.5 + }, + "E9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.38, + "z": 1.5 + }, + "F1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.38, + "z": 1.5 + }, + "F10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.38, + "z": 1.5 + }, + "F11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.38, + "z": 1.5 + }, + "F12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.38, + "z": 1.5 + }, + "F2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.38, + "z": 1.5 + }, + "F3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.38, + "z": 1.5 + }, + "F4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.38, + "z": 1.5 + }, + "F5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.38, + "z": 1.5 + }, + "F6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.38, + "z": 1.5 + }, + "F7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.38, + "z": 1.5 + }, + "F8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.38, + "z": 1.5 + }, + "F9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.38, + "z": 1.5 + }, + "G1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.38, + "z": 1.5 + }, + "G10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.38, + "z": 1.5 + }, + "G11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.38, + "z": 1.5 + }, + "G12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.38, + "z": 1.5 + }, + "G2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.38, + "z": 1.5 + }, + "G3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.38, + "z": 1.5 + }, + "G4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.38, + "z": 1.5 + }, + "G5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.38, + "z": 1.5 + }, + "G6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.38, + "z": 1.5 + }, + "G7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.38, + "z": 1.5 + }, + "G8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.38, + "z": 1.5 + }, + "G9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.38, + "z": 1.5 + }, + "H1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.38, + "z": 1.5 + }, + "H10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.38, + "z": 1.5 + }, + "H11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.38, + "z": 1.5 + }, + "H12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.38, + "z": 1.5 + }, + "H2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.38, + "z": 1.5 + }, + "H3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.38, + "z": 1.5 + }, + "H4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.38, + "z": 1.5 + }, + "H5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.38, + "z": 1.5 + }, + "H6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.38, + "z": 1.5 + }, + "H7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.38, + "z": 1.5 + }, + "H8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.38, + "z": 1.5 + }, + "H9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.38, + "z": 1.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "H1", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "691afd54dfa7982fb89e5f77c763bfd4", + "notes": [], + "params": { + "displayName": "Liquid Transfer - Source Labware", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "C1" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c910be62291bb94458a59cb4185c5180", + "notes": [], + "params": { + "displayName": "Liquid Transfer - Destination Labware", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "C2" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2f59e0552969594ba6ab06f03af324e1", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A12" + }, + "result": { + "position": { + "x": 277.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6b0053809cc5ea894449b20181bda1d6", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 32.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9d2ba7d37a294b62afe4d91153783e8d", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A4" + }, + "result": { + "position": { + "x": 41.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e8ce83939641089264883e922565169e", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 20.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 20.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bc7a3401208e1ebbf2ef653b39f7ec05", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "71264e0d8f121750fadffa4de419d934", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "957785aca5143d6556af5c2cb3c59297", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B12" + }, + "result": { + "position": { + "x": 277.38, + "y": 65.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4d87d61c6915c64c29bf9601dce504d6", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 59.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a6b3ab33bb429b17ddfcfa80e4795882", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 59.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ad078a7983560bdf409c3fafb76a20df", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dc80dca10e7a8e4eb0148afda35d9f7f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "47e2a6e4e082a3edcd417887da1391ea", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C12" + }, + "result": { + "position": { + "x": 277.38, + "y": 56.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8fcfb95fb44994648ec969a5fcc049df", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 15.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 15.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d5419055b04d30ef91ae9ad466be6814", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 5.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 232.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 5.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "beb80898b59a1324e0cab2e514684044", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 5.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A8" + }, + "result": { + "position": { + "x": 241.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 5.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b189af8f175fc84c04677212be3713cd", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 434.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowOutInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "70fbf1f310a94ff9a76abbf78aed0f5d", + "notes": [], + "params": { + "flowRate": 80.0, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "98e8fdad613e2394706e4ed69bcacd5a", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "02ddfbbad3a85f2dea9649b185df31c0", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d4b54bd1cc3ea0b0f00c771f6d069552", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D12" + }, + "result": { + "position": { + "x": 277.38, + "y": 47.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "touchTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8d44ea65bcbbc368be1bc486199c5c36", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "radius": 1.0, + "speed": 60.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -1.0 + }, + "origin": "top" + }, + "wellName": "B1" + }, + "result": { + "position": { + "x": 14.38, + "y": 172.24, + "z": 14.7 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ff637cfa2197a46f886f9a8f430cba99", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "05e32557ff805e84d62ca868c9d3ffb9", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "09a9af20ba5025d9b73f1e8abb0ae921", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E12" + }, + "result": { + "position": { + "x": 277.38, + "y": 38.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "886acb0a83206c4beffe85c574403c8c", + "notes": [], + "params": { + "axes": [ + "leftPlunger", + "leftZ" + ] + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0be564f428e87599bd9ad2c95132690f", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0d0b65bd3564dcbd484a27851516a8d8", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bc1207d443da2a4be8c29c638ed95832", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F12" + }, + "result": { + "position": { + "x": 277.38, + "y": 29.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "800a566578fc2c77b3ba63a8740bc11d", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7cdd48fe814ff91d04f2541b5bda803f", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b73df6c1dc10a15fccad64146a9253e3", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "303e819bc213e27cd87898f84a0849d8", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "05d169be70745d1a65829f1a968b95f6", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "76cef1507e46661cad77313a0ed3727d", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "77bfe511646e7418f20da0817e3b96e9", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6c13cf87265353a92dc843600b9d9203", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ade2d2d2074263c9dd505940d90c2dfb", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cccc3a958942894e8046f7b40e5ca74f", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e9c371bfd5e628a170bfbecb5db3a9fd", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7de6a6935a0a885c8bbcaf24d799c23a", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "663261a619fb3978db881c0b49ee5757", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "23b170d0f6b4310456e22bff31768726", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ca000faa3e0a7c16d820dba7f034ea17", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "358e3d9564fef6580430c29ec1abc8be", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5ae5e07479909c02ab7c3380f3d6831c", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "aba2f3c1667e265516ba1b2f7a70bd9b", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e4401c648a31e63d991b887e1e967edf", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8653a8d80a26e9ae5e402cbbf005314c", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "79f12967defc4069a8c9957178510267", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d42541fb8e9dad7fd6df764276d97e85", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 5.0000000000000036 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 20.700000000000003 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a5fe690c7ee2e46760c78e76c1799e32", + "notes": [], + "params": { + "flowRate": 80.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 5.0000000000000036 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 20.700000000000003 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "prepareToAspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "147f19190dec5bb7e8082142106cdba8", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b0f86fda12faff8a53661cffc418a681", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "27b170cfd7791ee5264cd8360381fc14", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c580bea6ba31532addf5ce76c8b0aa63", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3a50114af65ad0ce2b5e517279c3a5b6", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d370233cdd09b4925594d9f78744c355", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "492f10d86634ba52387d3434a2c96163", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "H12", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b485fe600db6f864ef8a02a863d2f2df", + "notes": [], + "params": { + "displayName": "C3 Source Labware", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "C3" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5c2612f6a457dd5a9cd1fcbef90d7202", + "notes": [], + "params": { + "displayName": "B2 Destination Labware", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "B2" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2581590044c8560d58362d124bc9bdb6", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 178.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3650650eea34d6d4e66c10e0fa1ebdb5", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 360.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3ef9c7f672bd43cde576c6d73613126d", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A4" + }, + "result": { + "position": { + "x": 369.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6fb55db7ac1b49dbe9156eaeba8194bd", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 20.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 288.24, + "z": 1.92 + }, + "volume": 20.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2339acb2db069cef24c9c100f428e0db", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f6a019bfa57d0a606735ea72303528d9", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a174b97232ef172d0e27137664a19397", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B1" + }, + "result": { + "position": { + "x": 178.38, + "y": 65.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3158782be2a54e06cdb5d21858c543c4", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 387.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fcae01b8b4e0c415dbc27208278875f8", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 223.38, + "y": 288.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d42746a0d3d7fb860d731f37e437c15c", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f6c3f602d9098ce4dc436d13f9dcb273", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2e3de388c00c39ef2dee24cae75e6c1d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C1" + }, + "result": { + "position": { + "x": 178.38, + "y": 56.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7884a44cb06e8548433d28f491cceea5", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 15.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 396.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 15.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bce465ed11bd648962c1f17925d1cbdf", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 5.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 232.38, + "y": 288.24, + "z": 1.92 + }, + "volume": 5.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "91ffbc1925155dae952866f06b74a980", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 5.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A8" + }, + "result": { + "position": { + "x": 241.38, + "y": 288.24, + "z": 1.92 + }, + "volume": 5.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "91dc16ab2f2dce621da90df5bd45e3e0", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 434.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowOutInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3161ab53aabd77d0bcadd85d2da313bf", + "notes": [], + "params": { + "flowRate": 80.0, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bb1be49b3dd7eae3db1b99859cf9b5c2", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "42068e979dd4b9cb2b97462903a1f0f5", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ec3e5a07d61f225fcde1a1a0c823380a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 47.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "touchTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "58eee9576ecb10dfe0a4498f62a9bc16", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "radius": 1.0, + "speed": 60.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -1.0 + }, + "origin": "top" + }, + "wellName": "B1" + }, + "result": { + "position": { + "x": 342.38, + "y": 172.24, + "z": 14.7 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b7d3af3327dcf5a4b2b9aeb4d25c4268", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dccfc99f4dbd996fd6f1dbfff503f5b8", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "846e5dece4834bfca01905e3bea4601c", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E1" + }, + "result": { + "position": { + "x": 178.38, + "y": 38.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "77e5462d5ef2d7d0f9d5f2ffa0f8fdb2", + "notes": [], + "params": { + "axes": [ + "leftPlunger", + "leftZ" + ] + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ea7c3fda775d7684b13ce5580091718a", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "aebb1c492347ac603b682596f730d963", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "91e93ec228e98c0289636c2864eb6c46", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F1" + }, + "result": { + "position": { + "x": 178.38, + "y": 29.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "eeb7edd79823036cfb229eb4e791f0f6", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 342.38, + "y": 154.24, + "z": 2.92 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "05fcbdb33a96b07db3ddad355c7f72c0", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 342.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "97c9e4f009511a98fce5dc76c4fe7fea", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 342.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2029dc5b30bcc4739da6fa852631a0d1", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 342.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4b708488472fbd0408b853c5346d264a", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 342.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9b2f886d5e9b192599b03520c766e1b0", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 342.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0475379c541e2ba86ffd71ad80bf0d95", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 342.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b991098c1256775c13375f2224cb3542", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 342.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7cef453d8ca1bce5e791d827488663fe", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 342.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a45727f65ed4eabbe3798d52c8426276", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 342.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c4dc466e0287dbe35ebc9c262c574b33", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 342.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e87a0a206eb43db4615755f179a768eb", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 342.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e11f0e411cde7118fc4b744156bfd609", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 342.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c1293f9799131c8772b1bf34ec155389", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 342.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7f65fbc1e61f69ec9f742e92aad0eaae", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 342.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "20ffbf6cb800a7b2d1ee50f32d7ee374", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 342.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8cc590a6565142be07c064e9df1f31c9", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 342.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a0de49c2ca6e1dca96256af101f616be", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 342.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "09dd576331ee4d9e7756516b38fb093d", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 342.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d7dfe39e2bfef7a3d3a6a4e846896112", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 342.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dfd1754741a559fbd431586a396c01cf", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 342.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1dc658dff0124e0091b1ab4391609568", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 5.0000000000000036 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 342.38, + "y": 154.24, + "z": 20.700000000000003 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f42637d6cb96d258b40ee87c94f2a662", + "notes": [], + "params": { + "flowRate": 80.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 5.0000000000000036 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 342.38, + "y": 154.24, + "z": 20.700000000000003 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "prepareToAspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4fadad19c8f235c7a5fc76f6e1049aa9", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a8dd5c8b8f316ef5c65697d84512317d", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 342.38, + "y": 154.24, + "z": 2.92 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0019e1328404f6f7bc5108407dbe942b", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 342.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ec30fc82f7f081a7abe12d2da1be7259", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 342.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f83d0dd289ab00c4ff75f6e4b95f827b", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "234fc0121d41506c465aad9fe3fac238", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [], + "files": [ + { + "name": "Flex_S_v2_20_96_None_SINGLE_HappyPathNorthSide.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_flex_96_tiprack_1000ul/1", + "displayName": "Partial Tip Rack", + "id": "UUID", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "D2" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "displayName": "Liquid Transfer - Source Labware", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "C1" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "displayName": "Liquid Transfer - Destination Labware", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "C2" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "displayName": "C3 Source Labware", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "C3" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "displayName": "B2 Destination Labware", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "B2" + } + } + ], + "liquids": [], + "metadata": { + "description": "Tip Rack North Clearance for the 96 channel pipette and a SINGLE partial tip configuration.", + "protocolName": "96Channel SINGLE Happy Path H1 or H12" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_96" + } + ], + "result": "ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[376765183a0][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_bottom_left_edge].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[376765183a0][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_bottom_left_edge].json new file mode 100644 index 00000000000..8d21b8fe17d --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[376765183a0][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_bottom_left_edge].json @@ -0,0 +1,1268 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "D1" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-1000ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 97.47 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_1000ul", + "tipLength": 88, + "tipOverlap": 7.95 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.24, + "z": 9.47 + }, + "A10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.24, + "z": 9.47 + }, + "A11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.24, + "z": 9.47 + }, + "A12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.24, + "z": 9.47 + }, + "A2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.24, + "z": 9.47 + }, + "A3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.24, + "z": 9.47 + }, + "A4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.24, + "z": 9.47 + }, + "A5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.24, + "z": 9.47 + }, + "A6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.24, + "z": 9.47 + }, + "A7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.24, + "z": 9.47 + }, + "A8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.24, + "z": 9.47 + }, + "A9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.24, + "z": 9.47 + }, + "B1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.24, + "z": 9.47 + }, + "B10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.24, + "z": 9.47 + }, + "B11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.24, + "z": 9.47 + }, + "B12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.24, + "z": 9.47 + }, + "B2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.24, + "z": 9.47 + }, + "B3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.24, + "z": 9.47 + }, + "B4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.24, + "z": 9.47 + }, + "B5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.24, + "z": 9.47 + }, + "B6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.24, + "z": 9.47 + }, + "B7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.24, + "z": 9.47 + }, + "B8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.24, + "z": 9.47 + }, + "B9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.24, + "z": 9.47 + }, + "C1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.24, + "z": 9.47 + }, + "C10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.24, + "z": 9.47 + }, + "C11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.24, + "z": 9.47 + }, + "C12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.24, + "z": 9.47 + }, + "C2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.24, + "z": 9.47 + }, + "C3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.24, + "z": 9.47 + }, + "C4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.24, + "z": 9.47 + }, + "C5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.24, + "z": 9.47 + }, + "C6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.24, + "z": 9.47 + }, + "C7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.24, + "z": 9.47 + }, + "C8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.24, + "z": 9.47 + }, + "C9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.24, + "z": 9.47 + }, + "D1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.24, + "z": 9.47 + }, + "D10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.24, + "z": 9.47 + }, + "D11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.24, + "z": 9.47 + }, + "D12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.24, + "z": 9.47 + }, + "D2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.24, + "z": 9.47 + }, + "D3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.24, + "z": 9.47 + }, + "D4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.24, + "z": 9.47 + }, + "D5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.24, + "z": 9.47 + }, + "D6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.24, + "z": 9.47 + }, + "D7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.24, + "z": 9.47 + }, + "D8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.24, + "z": 9.47 + }, + "D9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.24, + "z": 9.47 + }, + "E1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.24, + "z": 9.47 + }, + "E10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.24, + "z": 9.47 + }, + "E11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.24, + "z": 9.47 + }, + "E12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.24, + "z": 9.47 + }, + "E2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.24, + "z": 9.47 + }, + "E3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.24, + "z": 9.47 + }, + "E4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.24, + "z": 9.47 + }, + "E5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.24, + "z": 9.47 + }, + "E6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.24, + "z": 9.47 + }, + "E7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.24, + "z": 9.47 + }, + "E8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.24, + "z": 9.47 + }, + "E9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.24, + "z": 9.47 + }, + "F1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.24, + "z": 9.47 + }, + "F10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.24, + "z": 9.47 + }, + "F11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.24, + "z": 9.47 + }, + "F12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.24, + "z": 9.47 + }, + "F2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.24, + "z": 9.47 + }, + "F3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.24, + "z": 9.47 + }, + "F4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.24, + "z": 9.47 + }, + "F5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.24, + "z": 9.47 + }, + "F6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.24, + "z": 9.47 + }, + "F7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.24, + "z": 9.47 + }, + "F8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.24, + "z": 9.47 + }, + "F9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.24, + "z": 9.47 + }, + "G1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.24, + "z": 9.47 + }, + "G10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.24, + "z": 9.47 + }, + "G11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.24, + "z": 9.47 + }, + "G12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.24, + "z": 9.47 + }, + "G2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.24, + "z": 9.47 + }, + "G3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.24, + "z": 9.47 + }, + "G4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.24, + "z": 9.47 + }, + "G5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.24, + "z": 9.47 + }, + "G6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.24, + "z": 9.47 + }, + "G7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.24, + "z": 9.47 + }, + "G8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.24, + "z": 9.47 + }, + "G9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.24, + "z": 9.47 + }, + "H1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.24, + "z": 9.47 + }, + "H10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.24, + "z": 9.47 + }, + "H11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.24, + "z": 9.47 + }, + "H12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.24, + "z": 9.47 + }, + "H2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.24, + "z": 9.47 + }, + "H3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.24, + "z": 9.47 + }, + "H4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.24, + "z": 9.47 + }, + "H5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.24, + "z": 9.47 + }, + "H6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.24, + "z": 9.47 + }, + "H7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.24, + "z": 9.47 + }, + "H8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.24, + "z": 9.47 + }, + "H9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.24, + "z": 9.47 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A12", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "PartialTipMovementNotAllowedError [line 479]: Error 2004 MOTION_PLANNING_FAILURE (PartialTipMovementNotAllowedError): Requested motion with the A12 nozzle partial configuration is outside of robot bounds for the pipette.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "Requested motion with the A12 nozzle partial configuration is outside of robot bounds for the pipette.", + "errorCode": "2004", + "errorInfo": {}, + "errorType": "PartialTipMovementNotAllowedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_bottom_left_edge.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "D1" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Too tall labware on pickup tip" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_96" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[376765183a1][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_bottom_left_edge].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[376765183a1][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_bottom_left_edge].json new file mode 100644 index 00000000000..8d21b8fe17d --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[376765183a1][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_bottom_left_edge].json @@ -0,0 +1,1268 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "D1" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-1000ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 97.47 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_1000ul", + "tipLength": 88, + "tipOverlap": 7.95 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.24, + "z": 9.47 + }, + "A10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.24, + "z": 9.47 + }, + "A11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.24, + "z": 9.47 + }, + "A12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.24, + "z": 9.47 + }, + "A2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.24, + "z": 9.47 + }, + "A3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.24, + "z": 9.47 + }, + "A4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.24, + "z": 9.47 + }, + "A5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.24, + "z": 9.47 + }, + "A6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.24, + "z": 9.47 + }, + "A7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.24, + "z": 9.47 + }, + "A8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.24, + "z": 9.47 + }, + "A9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.24, + "z": 9.47 + }, + "B1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.24, + "z": 9.47 + }, + "B10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.24, + "z": 9.47 + }, + "B11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.24, + "z": 9.47 + }, + "B12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.24, + "z": 9.47 + }, + "B2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.24, + "z": 9.47 + }, + "B3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.24, + "z": 9.47 + }, + "B4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.24, + "z": 9.47 + }, + "B5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.24, + "z": 9.47 + }, + "B6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.24, + "z": 9.47 + }, + "B7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.24, + "z": 9.47 + }, + "B8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.24, + "z": 9.47 + }, + "B9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.24, + "z": 9.47 + }, + "C1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.24, + "z": 9.47 + }, + "C10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.24, + "z": 9.47 + }, + "C11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.24, + "z": 9.47 + }, + "C12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.24, + "z": 9.47 + }, + "C2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.24, + "z": 9.47 + }, + "C3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.24, + "z": 9.47 + }, + "C4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.24, + "z": 9.47 + }, + "C5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.24, + "z": 9.47 + }, + "C6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.24, + "z": 9.47 + }, + "C7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.24, + "z": 9.47 + }, + "C8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.24, + "z": 9.47 + }, + "C9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.24, + "z": 9.47 + }, + "D1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.24, + "z": 9.47 + }, + "D10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.24, + "z": 9.47 + }, + "D11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.24, + "z": 9.47 + }, + "D12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.24, + "z": 9.47 + }, + "D2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.24, + "z": 9.47 + }, + "D3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.24, + "z": 9.47 + }, + "D4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.24, + "z": 9.47 + }, + "D5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.24, + "z": 9.47 + }, + "D6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.24, + "z": 9.47 + }, + "D7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.24, + "z": 9.47 + }, + "D8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.24, + "z": 9.47 + }, + "D9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.24, + "z": 9.47 + }, + "E1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.24, + "z": 9.47 + }, + "E10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.24, + "z": 9.47 + }, + "E11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.24, + "z": 9.47 + }, + "E12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.24, + "z": 9.47 + }, + "E2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.24, + "z": 9.47 + }, + "E3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.24, + "z": 9.47 + }, + "E4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.24, + "z": 9.47 + }, + "E5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.24, + "z": 9.47 + }, + "E6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.24, + "z": 9.47 + }, + "E7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.24, + "z": 9.47 + }, + "E8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.24, + "z": 9.47 + }, + "E9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.24, + "z": 9.47 + }, + "F1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.24, + "z": 9.47 + }, + "F10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.24, + "z": 9.47 + }, + "F11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.24, + "z": 9.47 + }, + "F12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.24, + "z": 9.47 + }, + "F2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.24, + "z": 9.47 + }, + "F3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.24, + "z": 9.47 + }, + "F4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.24, + "z": 9.47 + }, + "F5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.24, + "z": 9.47 + }, + "F6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.24, + "z": 9.47 + }, + "F7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.24, + "z": 9.47 + }, + "F8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.24, + "z": 9.47 + }, + "F9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.24, + "z": 9.47 + }, + "G1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.24, + "z": 9.47 + }, + "G10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.24, + "z": 9.47 + }, + "G11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.24, + "z": 9.47 + }, + "G12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.24, + "z": 9.47 + }, + "G2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.24, + "z": 9.47 + }, + "G3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.24, + "z": 9.47 + }, + "G4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.24, + "z": 9.47 + }, + "G5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.24, + "z": 9.47 + }, + "G6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.24, + "z": 9.47 + }, + "G7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.24, + "z": 9.47 + }, + "G8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.24, + "z": 9.47 + }, + "G9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.24, + "z": 9.47 + }, + "H1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.24, + "z": 9.47 + }, + "H10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.24, + "z": 9.47 + }, + "H11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.24, + "z": 9.47 + }, + "H12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.24, + "z": 9.47 + }, + "H2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.24, + "z": 9.47 + }, + "H3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.24, + "z": 9.47 + }, + "H4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.24, + "z": 9.47 + }, + "H5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.24, + "z": 9.47 + }, + "H6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.24, + "z": 9.47 + }, + "H7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.24, + "z": 9.47 + }, + "H8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.24, + "z": 9.47 + }, + "H9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.24, + "z": 9.47 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A12", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "PartialTipMovementNotAllowedError [line 479]: Error 2004 MOTION_PLANNING_FAILURE (PartialTipMovementNotAllowedError): Requested motion with the A12 nozzle partial configuration is outside of robot bounds for the pipette.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "Requested motion with the A12 nozzle partial configuration is outside of robot bounds for the pipette.", + "errorCode": "2004", + "errorInfo": {}, + "errorType": "PartialTipMovementNotAllowedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_bottom_left_edge.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "D1" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Too tall labware on pickup tip" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_96" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[39191e3573][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_south_row].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[39191e3573][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_south_row].json new file mode 100644 index 00000000000..c7427cbfe8f --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[39191e3573][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_south_row].json @@ -0,0 +1,1500 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "C2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-1000ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 97.47 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_1000ul", + "tipLength": 88, + "tipOverlap": 7.95 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.24, + "z": 9.47 + }, + "A10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.24, + "z": 9.47 + }, + "A11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.24, + "z": 9.47 + }, + "A12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.24, + "z": 9.47 + }, + "A2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.24, + "z": 9.47 + }, + "A3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.24, + "z": 9.47 + }, + "A4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.24, + "z": 9.47 + }, + "A5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.24, + "z": 9.47 + }, + "A6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.24, + "z": 9.47 + }, + "A7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.24, + "z": 9.47 + }, + "A8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.24, + "z": 9.47 + }, + "A9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.24, + "z": 9.47 + }, + "B1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.24, + "z": 9.47 + }, + "B10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.24, + "z": 9.47 + }, + "B11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.24, + "z": 9.47 + }, + "B12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.24, + "z": 9.47 + }, + "B2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.24, + "z": 9.47 + }, + "B3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.24, + "z": 9.47 + }, + "B4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.24, + "z": 9.47 + }, + "B5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.24, + "z": 9.47 + }, + "B6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.24, + "z": 9.47 + }, + "B7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.24, + "z": 9.47 + }, + "B8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.24, + "z": 9.47 + }, + "B9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.24, + "z": 9.47 + }, + "C1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.24, + "z": 9.47 + }, + "C10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.24, + "z": 9.47 + }, + "C11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.24, + "z": 9.47 + }, + "C12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.24, + "z": 9.47 + }, + "C2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.24, + "z": 9.47 + }, + "C3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.24, + "z": 9.47 + }, + "C4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.24, + "z": 9.47 + }, + "C5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.24, + "z": 9.47 + }, + "C6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.24, + "z": 9.47 + }, + "C7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.24, + "z": 9.47 + }, + "C8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.24, + "z": 9.47 + }, + "C9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.24, + "z": 9.47 + }, + "D1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.24, + "z": 9.47 + }, + "D10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.24, + "z": 9.47 + }, + "D11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.24, + "z": 9.47 + }, + "D12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.24, + "z": 9.47 + }, + "D2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.24, + "z": 9.47 + }, + "D3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.24, + "z": 9.47 + }, + "D4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.24, + "z": 9.47 + }, + "D5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.24, + "z": 9.47 + }, + "D6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.24, + "z": 9.47 + }, + "D7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.24, + "z": 9.47 + }, + "D8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.24, + "z": 9.47 + }, + "D9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.24, + "z": 9.47 + }, + "E1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.24, + "z": 9.47 + }, + "E10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.24, + "z": 9.47 + }, + "E11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.24, + "z": 9.47 + }, + "E12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.24, + "z": 9.47 + }, + "E2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.24, + "z": 9.47 + }, + "E3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.24, + "z": 9.47 + }, + "E4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.24, + "z": 9.47 + }, + "E5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.24, + "z": 9.47 + }, + "E6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.24, + "z": 9.47 + }, + "E7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.24, + "z": 9.47 + }, + "E8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.24, + "z": 9.47 + }, + "E9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.24, + "z": 9.47 + }, + "F1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.24, + "z": 9.47 + }, + "F10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.24, + "z": 9.47 + }, + "F11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.24, + "z": 9.47 + }, + "F12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.24, + "z": 9.47 + }, + "F2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.24, + "z": 9.47 + }, + "F3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.24, + "z": 9.47 + }, + "F4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.24, + "z": 9.47 + }, + "F5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.24, + "z": 9.47 + }, + "F6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.24, + "z": 9.47 + }, + "F7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.24, + "z": 9.47 + }, + "F8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.24, + "z": 9.47 + }, + "F9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.24, + "z": 9.47 + }, + "G1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.24, + "z": 9.47 + }, + "G10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.24, + "z": 9.47 + }, + "G11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.24, + "z": 9.47 + }, + "G12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.24, + "z": 9.47 + }, + "G2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.24, + "z": 9.47 + }, + "G3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.24, + "z": 9.47 + }, + "G4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.24, + "z": 9.47 + }, + "G5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.24, + "z": 9.47 + }, + "G6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.24, + "z": 9.47 + }, + "G7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.24, + "z": 9.47 + }, + "G8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.24, + "z": 9.47 + }, + "G9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.24, + "z": 9.47 + }, + "H1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.24, + "z": 9.47 + }, + "H10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.24, + "z": 9.47 + }, + "H11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.24, + "z": 9.47 + }, + "H12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.24, + "z": 9.47 + }, + "H2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.24, + "z": 9.47 + }, + "H3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.24, + "z": 9.47 + }, + "H4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.24, + "z": 9.47 + }, + "H5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.24, + "z": 9.47 + }, + "H6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.24, + "z": 9.47 + }, + "H7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.24, + "z": 9.47 + }, + "H8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.24, + "z": 9.47 + }, + "H9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.24, + "z": 9.47 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A1", + "style": "ROW" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "691afd54dfa7982fb89e5f77c763bfd4", + "notes": [], + "params": { + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "D2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 124.35 + }, + "gripperOffsets": {}, + "groups": [ + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352095", + "352096", + "352097", + "352099", + "352196" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 6x15 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A2", + "B1", + "B2", + "C1", + "C2" + ] + }, + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352070", + "352098" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 4x50 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A3", + "A4", + "B3", + "B4" + ] + } + ], + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Opentrons 10 Tube Rack with Falcon 4x50 mL, 6x15 mL Conical", + "displayVolumeUnits": "mL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1" + ], + [ + "A2", + "B2", + "C2" + ], + [ + "A3", + "B3" + ], + [ + "A4", + "B4" + ] + ], + "parameters": { + "format": "irregular", + "isMagneticModuleCompatible": false, + "isTiprack": false, + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical" + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 67.75, + "z": 6.85 + }, + "A2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 67.75, + "z": 6.85 + }, + "A3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 60.25, + "z": 7.3 + }, + "A4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 60.25, + "z": 7.3 + }, + "B1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 42.75, + "z": 6.85 + }, + "B2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 42.75, + "z": 6.85 + }, + "B3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 25.25, + "z": 7.3 + }, + "B4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 25.25, + "z": 7.3 + }, + "C1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 17.75, + "z": 6.85 + }, + "C2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 17.75, + "z": 6.85 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "PartialTipMovementNotAllowedError [line 479]: Error 2004 MOTION_PLANNING_FAILURE (PartialTipMovementNotAllowedError): Moving to Opentrons OT-2 96 Tip Rack 1000 µL in slot C2 with A1 nozzle partial configuration will result in collision with items in deck slot D2.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "Moving to Opentrons OT-2 96 Tip Rack 1000 µL in slot C2 with A1 nozzle partial configuration will result in collision with items in deck slot D2.", + "errorCode": "2004", + "errorInfo": {}, + "errorType": "PartialTipMovementNotAllowedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_south_row.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "C2" + } + }, + { + "definitionUri": "opentrons/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/1", + "id": "UUID", + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "D2" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Too tall labware on pickup tip" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_96" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[4389e3ab18][OT2_X_v6_P20S_None_SimpleTransfer].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[4389e3ab18][OT2_X_v6_P20S_None_SimpleTransfer].json index 5339ccdcc00..579a4670bcc 100644 --- a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[4389e3ab18][OT2_X_v6_P20S_None_SimpleTransfer].json +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[4389e3ab18][OT2_X_v6_P20S_None_SimpleTransfer].json @@ -1757,13 +1757,13 @@ "createdAt": "TIMESTAMP", "error": { "createdAt": "TIMESTAMP", - "detail": "Cannot aspirate 21.0 µL when only 20.0 is available.", + "detail": "Cannot aspirate 21.0 µL when only 20 is available.", "errorCode": "4000", "errorInfo": { "attempted_aspirate_volume": 21.0, - "available_volume": 20.0, + "available_volume": 20, "max_pipette_volume": 20, - "max_tip_volume": 20.0 + "max_tip_volume": 20 }, "errorType": "InvalidAspirateVolumeError", "id": "UUID", @@ -1800,13 +1800,13 @@ "errors": [ { "createdAt": "TIMESTAMP", - "detail": "Cannot aspirate 21.0 µL when only 20.0 is available.", + "detail": "Cannot aspirate 21.0 µL when only 20 is available.", "errorCode": "4000", "errorInfo": { "attempted_aspirate_volume": 21.0, - "available_volume": 20.0, + "available_volume": 20, "max_pipette_volume": 20, - "max_tip_volume": 20.0 + "max_tip_volume": 20 }, "errorType": "InvalidAspirateVolumeError", "id": "UUID", diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[4b9e0f93d9][OT2_S_v2_20_8_None_PARTIAL_COLUMN_HappyPathMixedTipRacks].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[4b9e0f93d9][OT2_S_v2_20_8_None_PARTIAL_COLUMN_HappyPathMixedTipRacks].json new file mode 100644 index 00000000000..0437f568f1f --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[4b9e0f93d9][OT2_S_v2_20_8_None_PARTIAL_COLUMN_HappyPathMixedTipRacks].json @@ -0,0 +1,19487 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_300ul", + "location": { + "slotName": "7" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-300ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 64.49 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 300 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_300ul", + "tipLength": 59.3, + "tipOverlap": 7.47 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 74.24, + "z": 5.39 + }, + "A10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 74.24, + "z": 5.39 + }, + "A11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 74.24, + "z": 5.39 + }, + "A12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 74.24, + "z": 5.39 + }, + "A2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 74.24, + "z": 5.39 + }, + "A3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 74.24, + "z": 5.39 + }, + "A4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 74.24, + "z": 5.39 + }, + "A5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 74.24, + "z": 5.39 + }, + "A6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 74.24, + "z": 5.39 + }, + "A7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 74.24, + "z": 5.39 + }, + "A8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 74.24, + "z": 5.39 + }, + "A9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 74.24, + "z": 5.39 + }, + "B1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 65.24, + "z": 5.39 + }, + "B10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 65.24, + "z": 5.39 + }, + "B11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 65.24, + "z": 5.39 + }, + "B12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 65.24, + "z": 5.39 + }, + "B2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 65.24, + "z": 5.39 + }, + "B3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 65.24, + "z": 5.39 + }, + "B4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 65.24, + "z": 5.39 + }, + "B5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 65.24, + "z": 5.39 + }, + "B6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 65.24, + "z": 5.39 + }, + "B7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 65.24, + "z": 5.39 + }, + "B8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 65.24, + "z": 5.39 + }, + "B9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 65.24, + "z": 5.39 + }, + "C1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 56.24, + "z": 5.39 + }, + "C10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 56.24, + "z": 5.39 + }, + "C11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 56.24, + "z": 5.39 + }, + "C12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 56.24, + "z": 5.39 + }, + "C2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 56.24, + "z": 5.39 + }, + "C3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 56.24, + "z": 5.39 + }, + "C4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 56.24, + "z": 5.39 + }, + "C5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 56.24, + "z": 5.39 + }, + "C6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 56.24, + "z": 5.39 + }, + "C7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 56.24, + "z": 5.39 + }, + "C8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 56.24, + "z": 5.39 + }, + "C9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 56.24, + "z": 5.39 + }, + "D1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 47.24, + "z": 5.39 + }, + "D10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 47.24, + "z": 5.39 + }, + "D11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 47.24, + "z": 5.39 + }, + "D12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 47.24, + "z": 5.39 + }, + "D2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 47.24, + "z": 5.39 + }, + "D3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 47.24, + "z": 5.39 + }, + "D4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 47.24, + "z": 5.39 + }, + "D5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 47.24, + "z": 5.39 + }, + "D6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 47.24, + "z": 5.39 + }, + "D7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 47.24, + "z": 5.39 + }, + "D8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 47.24, + "z": 5.39 + }, + "D9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 47.24, + "z": 5.39 + }, + "E1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 38.24, + "z": 5.39 + }, + "E10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 38.24, + "z": 5.39 + }, + "E11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 38.24, + "z": 5.39 + }, + "E12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 38.24, + "z": 5.39 + }, + "E2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 38.24, + "z": 5.39 + }, + "E3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 38.24, + "z": 5.39 + }, + "E4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 38.24, + "z": 5.39 + }, + "E5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 38.24, + "z": 5.39 + }, + "E6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 38.24, + "z": 5.39 + }, + "E7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 38.24, + "z": 5.39 + }, + "E8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 38.24, + "z": 5.39 + }, + "E9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 38.24, + "z": 5.39 + }, + "F1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 29.24, + "z": 5.39 + }, + "F10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 29.24, + "z": 5.39 + }, + "F11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 29.24, + "z": 5.39 + }, + "F12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 29.24, + "z": 5.39 + }, + "F2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 29.24, + "z": 5.39 + }, + "F3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 29.24, + "z": 5.39 + }, + "F4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 29.24, + "z": 5.39 + }, + "F5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 29.24, + "z": 5.39 + }, + "F6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 29.24, + "z": 5.39 + }, + "F7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 29.24, + "z": 5.39 + }, + "F8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 29.24, + "z": 5.39 + }, + "F9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 29.24, + "z": 5.39 + }, + "G1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 20.24, + "z": 5.39 + }, + "G10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 20.24, + "z": 5.39 + }, + "G11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 20.24, + "z": 5.39 + }, + "G12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 20.24, + "z": 5.39 + }, + "G2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 20.24, + "z": 5.39 + }, + "G3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 20.24, + "z": 5.39 + }, + "G4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 20.24, + "z": 5.39 + }, + "G5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 20.24, + "z": 5.39 + }, + "G6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 20.24, + "z": 5.39 + }, + "G7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 20.24, + "z": 5.39 + }, + "G8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 20.24, + "z": 5.39 + }, + "G9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 20.24, + "z": 5.39 + }, + "H1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 11.24, + "z": 5.39 + }, + "H10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 11.24, + "z": 5.39 + }, + "H11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 11.24, + "z": 5.39 + }, + "H12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 11.24, + "z": 5.39 + }, + "H2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 11.24, + "z": 5.39 + }, + "H3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 11.24, + "z": 5.39 + }, + "H4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 11.24, + "z": 5.39 + }, + "H5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 11.24, + "z": 5.39 + }, + "H6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 11.24, + "z": 5.39 + }, + "H7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 11.24, + "z": 5.39 + }, + "H8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 11.24, + "z": 5.39 + }, + "H9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 11.24, + "z": 5.39 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50de88d471ad3910c29207fb6df4502e", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_300ul", + "location": { + "slotName": "8" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-300ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 64.49 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 300 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_300ul", + "tipLength": 59.3, + "tipOverlap": 7.47 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 74.24, + "z": 5.39 + }, + "A10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 74.24, + "z": 5.39 + }, + "A11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 74.24, + "z": 5.39 + }, + "A12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 74.24, + "z": 5.39 + }, + "A2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 74.24, + "z": 5.39 + }, + "A3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 74.24, + "z": 5.39 + }, + "A4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 74.24, + "z": 5.39 + }, + "A5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 74.24, + "z": 5.39 + }, + "A6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 74.24, + "z": 5.39 + }, + "A7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 74.24, + "z": 5.39 + }, + "A8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 74.24, + "z": 5.39 + }, + "A9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 74.24, + "z": 5.39 + }, + "B1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 65.24, + "z": 5.39 + }, + "B10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 65.24, + "z": 5.39 + }, + "B11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 65.24, + "z": 5.39 + }, + "B12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 65.24, + "z": 5.39 + }, + "B2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 65.24, + "z": 5.39 + }, + "B3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 65.24, + "z": 5.39 + }, + "B4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 65.24, + "z": 5.39 + }, + "B5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 65.24, + "z": 5.39 + }, + "B6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 65.24, + "z": 5.39 + }, + "B7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 65.24, + "z": 5.39 + }, + "B8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 65.24, + "z": 5.39 + }, + "B9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 65.24, + "z": 5.39 + }, + "C1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 56.24, + "z": 5.39 + }, + "C10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 56.24, + "z": 5.39 + }, + "C11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 56.24, + "z": 5.39 + }, + "C12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 56.24, + "z": 5.39 + }, + "C2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 56.24, + "z": 5.39 + }, + "C3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 56.24, + "z": 5.39 + }, + "C4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 56.24, + "z": 5.39 + }, + "C5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 56.24, + "z": 5.39 + }, + "C6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 56.24, + "z": 5.39 + }, + "C7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 56.24, + "z": 5.39 + }, + "C8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 56.24, + "z": 5.39 + }, + "C9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 56.24, + "z": 5.39 + }, + "D1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 47.24, + "z": 5.39 + }, + "D10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 47.24, + "z": 5.39 + }, + "D11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 47.24, + "z": 5.39 + }, + "D12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 47.24, + "z": 5.39 + }, + "D2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 47.24, + "z": 5.39 + }, + "D3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 47.24, + "z": 5.39 + }, + "D4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 47.24, + "z": 5.39 + }, + "D5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 47.24, + "z": 5.39 + }, + "D6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 47.24, + "z": 5.39 + }, + "D7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 47.24, + "z": 5.39 + }, + "D8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 47.24, + "z": 5.39 + }, + "D9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 47.24, + "z": 5.39 + }, + "E1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 38.24, + "z": 5.39 + }, + "E10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 38.24, + "z": 5.39 + }, + "E11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 38.24, + "z": 5.39 + }, + "E12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 38.24, + "z": 5.39 + }, + "E2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 38.24, + "z": 5.39 + }, + "E3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 38.24, + "z": 5.39 + }, + "E4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 38.24, + "z": 5.39 + }, + "E5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 38.24, + "z": 5.39 + }, + "E6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 38.24, + "z": 5.39 + }, + "E7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 38.24, + "z": 5.39 + }, + "E8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 38.24, + "z": 5.39 + }, + "E9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 38.24, + "z": 5.39 + }, + "F1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 29.24, + "z": 5.39 + }, + "F10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 29.24, + "z": 5.39 + }, + "F11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 29.24, + "z": 5.39 + }, + "F12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 29.24, + "z": 5.39 + }, + "F2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 29.24, + "z": 5.39 + }, + "F3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 29.24, + "z": 5.39 + }, + "F4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 29.24, + "z": 5.39 + }, + "F5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 29.24, + "z": 5.39 + }, + "F6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 29.24, + "z": 5.39 + }, + "F7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 29.24, + "z": 5.39 + }, + "F8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 29.24, + "z": 5.39 + }, + "F9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 29.24, + "z": 5.39 + }, + "G1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 20.24, + "z": 5.39 + }, + "G10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 20.24, + "z": 5.39 + }, + "G11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 20.24, + "z": 5.39 + }, + "G12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 20.24, + "z": 5.39 + }, + "G2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 20.24, + "z": 5.39 + }, + "G3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 20.24, + "z": 5.39 + }, + "G4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 20.24, + "z": 5.39 + }, + "G5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 20.24, + "z": 5.39 + }, + "G6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 20.24, + "z": 5.39 + }, + "G7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 20.24, + "z": 5.39 + }, + "G8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 20.24, + "z": 5.39 + }, + "G9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 20.24, + "z": 5.39 + }, + "H1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 11.24, + "z": 5.39 + }, + "H10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 11.24, + "z": 5.39 + }, + "H11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 11.24, + "z": 5.39 + }, + "H12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 11.24, + "z": 5.39 + }, + "H2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 11.24, + "z": 5.39 + }, + "H3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 11.24, + "z": 5.39 + }, + "H4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 11.24, + "z": 5.39 + }, + "H5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 11.24, + "z": 5.39 + }, + "H6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 11.24, + "z": 5.39 + }, + "H7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 11.24, + "z": 5.39 + }, + "H8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 11.24, + "z": 5.39 + }, + "H9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 11.24, + "z": 5.39 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a83392f86baf8cd5b4f0157c89d31dbd", + "notes": [], + "params": { + "loadName": "opentrons_96_wellplate_200ul_pcr_full_skirt", + "location": { + "slotName": "2" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [ + "991-00076" + ], + "links": [ + "https://shop.opentrons.com/tough-0.2-ml-96-well-pcr-plate-full-skirt/" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 16.0 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.0, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "Opentrons Tough 96 Well Plate 200 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "opentrons_96_wellplate_200ul_pcr_full_skirt" + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.95 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 11.91 + } + }, + "stackingOffsetWithModule": { + "magneticBlockV1": { + "x": 0, + "y": 0, + "z": 3.54 + }, + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.7 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.38, + "y": 74.24, + "z": 1.05 + }, + "A10": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.38, + "y": 74.24, + "z": 1.05 + }, + "A11": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.38, + "y": 74.24, + "z": 1.05 + }, + "A12": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.38, + "y": 74.24, + "z": 1.05 + }, + "A2": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.38, + "y": 74.24, + "z": 1.05 + }, + "A3": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.38, + "y": 74.24, + "z": 1.05 + }, + "A4": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.38, + "y": 74.24, + "z": 1.05 + }, + "A5": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.38, + "y": 74.24, + "z": 1.05 + }, + "A6": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.38, + "y": 74.24, + "z": 1.05 + }, + "A7": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.38, + "y": 74.24, + "z": 1.05 + }, + "A8": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.38, + "y": 74.24, + "z": 1.05 + }, + "A9": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.38, + "y": 74.24, + "z": 1.05 + }, + "B1": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.38, + "y": 65.24, + "z": 1.05 + }, + "B10": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.38, + "y": 65.24, + "z": 1.05 + }, + "B11": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.38, + "y": 65.24, + "z": 1.05 + }, + "B12": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.38, + "y": 65.24, + "z": 1.05 + }, + "B2": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.38, + "y": 65.24, + "z": 1.05 + }, + "B3": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.38, + "y": 65.24, + "z": 1.05 + }, + "B4": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.38, + "y": 65.24, + "z": 1.05 + }, + "B5": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.38, + "y": 65.24, + "z": 1.05 + }, + "B6": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.38, + "y": 65.24, + "z": 1.05 + }, + "B7": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.38, + "y": 65.24, + "z": 1.05 + }, + "B8": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.38, + "y": 65.24, + "z": 1.05 + }, + "B9": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.38, + "y": 65.24, + "z": 1.05 + }, + "C1": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.38, + "y": 56.24, + "z": 1.05 + }, + "C10": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.38, + "y": 56.24, + "z": 1.05 + }, + "C11": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.38, + "y": 56.24, + "z": 1.05 + }, + "C12": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.38, + "y": 56.24, + "z": 1.05 + }, + "C2": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.38, + "y": 56.24, + "z": 1.05 + }, + "C3": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.38, + "y": 56.24, + "z": 1.05 + }, + "C4": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.38, + "y": 56.24, + "z": 1.05 + }, + "C5": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.38, + "y": 56.24, + "z": 1.05 + }, + "C6": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.38, + "y": 56.24, + "z": 1.05 + }, + "C7": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.38, + "y": 56.24, + "z": 1.05 + }, + "C8": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.38, + "y": 56.24, + "z": 1.05 + }, + "C9": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.38, + "y": 56.24, + "z": 1.05 + }, + "D1": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.38, + "y": 47.24, + "z": 1.05 + }, + "D10": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.38, + "y": 47.24, + "z": 1.05 + }, + "D11": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.38, + "y": 47.24, + "z": 1.05 + }, + "D12": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.38, + "y": 47.24, + "z": 1.05 + }, + "D2": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.38, + "y": 47.24, + "z": 1.05 + }, + "D3": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.38, + "y": 47.24, + "z": 1.05 + }, + "D4": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.38, + "y": 47.24, + "z": 1.05 + }, + "D5": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.38, + "y": 47.24, + "z": 1.05 + }, + "D6": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.38, + "y": 47.24, + "z": 1.05 + }, + "D7": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.38, + "y": 47.24, + "z": 1.05 + }, + "D8": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.38, + "y": 47.24, + "z": 1.05 + }, + "D9": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.38, + "y": 47.24, + "z": 1.05 + }, + "E1": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.38, + "y": 38.24, + "z": 1.05 + }, + "E10": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.38, + "y": 38.24, + "z": 1.05 + }, + "E11": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.38, + "y": 38.24, + "z": 1.05 + }, + "E12": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.38, + "y": 38.24, + "z": 1.05 + }, + "E2": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.38, + "y": 38.24, + "z": 1.05 + }, + "E3": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.38, + "y": 38.24, + "z": 1.05 + }, + "E4": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.38, + "y": 38.24, + "z": 1.05 + }, + "E5": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.38, + "y": 38.24, + "z": 1.05 + }, + "E6": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.38, + "y": 38.24, + "z": 1.05 + }, + "E7": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.38, + "y": 38.24, + "z": 1.05 + }, + "E8": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.38, + "y": 38.24, + "z": 1.05 + }, + "E9": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.38, + "y": 38.24, + "z": 1.05 + }, + "F1": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.38, + "y": 29.24, + "z": 1.05 + }, + "F10": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.38, + "y": 29.24, + "z": 1.05 + }, + "F11": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.38, + "y": 29.24, + "z": 1.05 + }, + "F12": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.38, + "y": 29.24, + "z": 1.05 + }, + "F2": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.38, + "y": 29.24, + "z": 1.05 + }, + "F3": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.38, + "y": 29.24, + "z": 1.05 + }, + "F4": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.38, + "y": 29.24, + "z": 1.05 + }, + "F5": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.38, + "y": 29.24, + "z": 1.05 + }, + "F6": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.38, + "y": 29.24, + "z": 1.05 + }, + "F7": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.38, + "y": 29.24, + "z": 1.05 + }, + "F8": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.38, + "y": 29.24, + "z": 1.05 + }, + "F9": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.38, + "y": 29.24, + "z": 1.05 + }, + "G1": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.38, + "y": 20.24, + "z": 1.05 + }, + "G10": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.38, + "y": 20.24, + "z": 1.05 + }, + "G11": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.38, + "y": 20.24, + "z": 1.05 + }, + "G12": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.38, + "y": 20.24, + "z": 1.05 + }, + "G2": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.38, + "y": 20.24, + "z": 1.05 + }, + "G3": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.38, + "y": 20.24, + "z": 1.05 + }, + "G4": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.38, + "y": 20.24, + "z": 1.05 + }, + "G5": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.38, + "y": 20.24, + "z": 1.05 + }, + "G6": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.38, + "y": 20.24, + "z": 1.05 + }, + "G7": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.38, + "y": 20.24, + "z": 1.05 + }, + "G8": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.38, + "y": 20.24, + "z": 1.05 + }, + "G9": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.38, + "y": 20.24, + "z": 1.05 + }, + "H1": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.38, + "y": 11.24, + "z": 1.05 + }, + "H10": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.38, + "y": 11.24, + "z": 1.05 + }, + "H11": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.38, + "y": 11.24, + "z": 1.05 + }, + "H12": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.38, + "y": 11.24, + "z": 1.05 + }, + "H2": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.38, + "y": 11.24, + "z": 1.05 + }, + "H3": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.38, + "y": 11.24, + "z": 1.05 + }, + "H4": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.38, + "y": 11.24, + "z": 1.05 + }, + "H5": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.38, + "y": 11.24, + "z": 1.05 + }, + "H6": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.38, + "y": 11.24, + "z": 1.05 + }, + "H7": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.38, + "y": 11.24, + "z": 1.05 + }, + "H8": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.38, + "y": 11.24, + "z": 1.05 + }, + "H9": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.38, + "y": 11.24, + "z": 1.05 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "596b975cce05f1835b73fd3e2e9c04b0", + "notes": [], + "params": { + "loadName": "nest_12_reservoir_15ml", + "location": { + "slotName": "1" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "360102" + ], + "links": [ + "https://www.nest-biotech.com/reagent-reserviors/59178414.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 31.4 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9" + ] + } + ], + "metadata": { + "displayCategory": "reservoir", + "displayName": "NEST 12 Well Reservoir 15 mL", + "displayVolumeUnits": "mL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1" + ], + [ + "A10" + ], + [ + "A11" + ], + [ + "A12" + ], + [ + "A2" + ], + [ + "A3" + ], + [ + "A4" + ], + [ + "A5" + ], + [ + "A6" + ], + [ + "A7" + ], + [ + "A8" + ], + [ + "A9" + ] + ], + "parameters": { + "format": "trough", + "isMagneticModuleCompatible": false, + "isTiprack": false, + "loadName": "nest_12_reservoir_15ml", + "quirks": [ + "centerMultichannelOnWells", + "touchTipDisabled" + ] + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 14.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + }, + "A10": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 95.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + }, + "A11": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 104.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + }, + "A12": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 113.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + }, + "A2": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 23.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + }, + "A3": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 32.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + }, + "A4": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 41.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + }, + "A5": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 50.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + }, + "A6": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 59.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + }, + "A7": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 68.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + }, + "A8": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 77.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + }, + "A9": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 86.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "43c0dcf1828d77562caa82b5e8a8c91e", + "notes": [], + "params": { + "loadName": "nest_1_reservoir_290ml", + "location": { + "slotName": "3" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "360206", + "360266" + ], + "links": [ + "https://www.nest-biotech.com/reagent-reserviors" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.47, + "zDimension": 44.4 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1" + ] + } + ], + "metadata": { + "displayCategory": "reservoir", + "displayName": "NEST 1 Well Reservoir 290 mL", + "displayVolumeUnits": "mL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1" + ] + ], + "parameters": { + "format": "trough", + "isMagneticModuleCompatible": false, + "isTiprack": false, + "loadName": "nest_1_reservoir_290ml", + "quirks": [ + "centerMultichannelOnWells", + "touchTipDisabled" + ] + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 39.55, + "shape": "rectangular", + "totalLiquidVolume": 290000, + "x": 63.88, + "xDimension": 106.8, + "y": 42.74, + "yDimension": 71.2, + "z": 4.85 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d9a687a9d473851aee5fac3b50b03e2e", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p300_multi_gen2", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9ae9b45b175fa09926415c9d7230b2e0", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "right", + "pipetteName": "p300_single_gen2", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2b195e6d68e009f85baa60afdbc418ea", + "notes": [], + "params": { + "configurationParams": { + "backLeftNozzle": "D1", + "frontRightNozzle": "H1", + "primaryNozzle": "H1", + "style": "QUADRANT" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b4e86544c2cab9a0f2c471eb91806985", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E1" + }, + "result": { + "position": { + "x": 14.38, + "y": 219.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "be62f97ba6fcad3f3cc33d23f8b1bf7b", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 75.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "E1" + }, + "result": { + "position": { + "x": 146.88, + "y": 38.24, + "z": 2.05 + }, + "volume": 75.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f894fe6b4f28774dc813d4855574d848", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 75.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "E1" + }, + "result": { + "position": { + "x": 146.88, + "y": 38.24, + "z": 2.05 + }, + "volume": 75.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a75573002c04007cdb36510bf254c7fc", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 75.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "E1" + }, + "result": { + "position": { + "x": 146.88, + "y": 38.24, + "z": 2.05 + }, + "volume": 75.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bcea200f78463aaca135898d28e85696", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 75.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "E1" + }, + "result": { + "position": { + "x": 146.88, + "y": 38.24, + "z": 2.05 + }, + "volume": 75.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "953242d49e74810f9e3a43e473d1f796", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 75.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "E1" + }, + "result": { + "position": { + "x": 146.88, + "y": 38.24, + "z": 2.05 + }, + "volume": 75.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2f0f7a41410e74ca014d56532a363e18", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 75.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "E1" + }, + "result": { + "position": { + "x": 146.88, + "y": 38.24, + "z": 2.05 + }, + "volume": 75.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ebde3acc0ee301b2c6bc607cf6be1616", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 200.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 14.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 200.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ca42ee43cff534275009e0f5767235f6", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 200.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 14.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 200.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1c6e5435d7b4281f6a0bb586698ba833", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 200.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 14.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 200.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b7b8cdb13fa839890abed88aaa9c5e8d", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 200.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 14.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 200.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "26b8a507e7a464c2fa86e3245a624283", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 200.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 14.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 200.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1760ed35842f0aa393677d771f50eaeb", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 200.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 14.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 200.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "388ecd2e412cee6a4dbf1d2629fd87a6", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 200.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -38.55 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 328.88, + "y": 42.74, + "z": 5.85 + }, + "volume": 200.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f563bd46dc381d6dd8dc79a428aa51c2", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 200.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -38.55 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 328.88, + "y": 42.74, + "z": 5.85 + }, + "volume": 200.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b03ff7f85185b8a18e1e035439b5c7ad", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 200.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -38.55 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 328.88, + "y": 42.74, + "z": 5.85 + }, + "volume": 200.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c8d15c07d0c70a218e4d7ccd28aa311a", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 200.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -38.55 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 328.88, + "y": 42.74, + "z": 5.85 + }, + "volume": 200.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8152746351e6e9fa2dc57a75b05feab2", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 200.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -38.55 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 328.88, + "y": 42.74, + "z": 5.85 + }, + "volume": 200.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e02d107d393459ad0fccbcf6b01ac453", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 200.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -38.55 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 328.88, + "y": 42.74, + "z": 5.85 + }, + "volume": 200.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7dab8b9c412991f023852d0befdc2b6e", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d06356c1b5e5ca94ed43562a63f0007f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5a1d2cb3fd6580bdb9cf2fb168904934", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E2" + }, + "result": { + "position": { + "x": 23.38, + "y": 219.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b6347fe0756fa94418cd7704311b9808", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 150.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "E1" + }, + "result": { + "position": { + "x": 146.88, + "y": 38.24, + "z": 2.05 + }, + "volume": 150.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d2b44c1803554c41efb9642c87c4a4a6", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 150.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "E12" + }, + "result": { + "position": { + "x": 245.88, + "y": 38.24, + "z": 2.05 + }, + "volume": 150.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "da6fbc1f7088efe1e12fb900fa8f3c1b", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9e81fbc22f962b4c85df452b37b6c728", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "135c48f1aa8e9529ee42f54e14ac427a", + "notes": [], + "params": { + "configurationParams": { + "backLeftNozzle": "E1", + "frontRightNozzle": "H1", + "primaryNozzle": "H1", + "style": "QUADRANT" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6c6743c6dfad685d95926475654a0aa9", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D3" + }, + "result": { + "position": { + "x": 32.38, + "y": 228.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "58772178d187cbca5aad1f7f4679d785", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 170.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A12" + }, + "result": { + "position": { + "x": 113.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 170.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "33b1396fa8c42666452738704960a486", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 150.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A11" + }, + "result": { + "position": { + "x": 104.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 150.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "19a8fdc55ad00c9b7ca4d0272c9dcc28", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 347.84000000000003, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowOutInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e3a244bf269a9ae5a867010c2c363fd1", + "notes": [], + "params": { + "flowRate": 94.0, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d208bf48e3890febcd78e5e0e61f2ec7", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 170.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A12" + }, + "result": { + "position": { + "x": 113.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 170.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f13e4df8ad03a8deeec315e606ceac1e", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 150.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A11" + }, + "result": { + "position": { + "x": 104.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 150.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9aa922599e627b37fe09737f63a8987c", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 347.84000000000003, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowOutInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5fabd636c0b162a265811d3e149f498f", + "notes": [], + "params": { + "flowRate": 94.0, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "102e15a19abb6d22fdc650263155b341", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 170.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A12" + }, + "result": { + "position": { + "x": 113.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 170.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3916e4d32b0496e23491e41ed5a4e926", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 150.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A10" + }, + "result": { + "position": { + "x": 95.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 150.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d97b0ce95e6df38113b3cd26168dff3d", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 347.84000000000003, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowOutInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9aa5cabc76e8c083fb1f43a82dc14d34", + "notes": [], + "params": { + "flowRate": 94.0, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "28d5b25358d19abb36eea296030308df", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 170.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A12" + }, + "result": { + "position": { + "x": 113.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 170.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "61803ae78a7bf64f1cb816d6f872b69f", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 150.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A10" + }, + "result": { + "position": { + "x": 95.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 150.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "af1d76729b63e4d55e9b94fbafa98fad", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 347.84000000000003, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowOutInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a8edae33870dc0ac5d17a431ef81f2cf", + "notes": [], + "params": { + "flowRate": 94.0, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1ae50a790eea08310509a29a31410402", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 170.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A12" + }, + "result": { + "position": { + "x": 113.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 170.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "075127c691ffae2657115b4d51878c62", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 150.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A9" + }, + "result": { + "position": { + "x": 86.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 150.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "56e07b010b997a75fea718014c885999", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 347.84000000000003, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowOutInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fd109acb1a66d0178013ea50dd13462e", + "notes": [], + "params": { + "flowRate": 94.0, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "54a1d1e63c850d8f0425ca1d4b15dacd", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 170.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A12" + }, + "result": { + "position": { + "x": 113.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 170.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "27bfc1a5dd3effd6f8f29e27220fbb06", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 150.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A9" + }, + "result": { + "position": { + "x": 86.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 150.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "12f30369d38fb26f81d76c1639065f5e", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 347.84000000000003, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowOutInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c1fc304514bf11e6bd05e4eea586aabb", + "notes": [], + "params": { + "flowRate": 94.0, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cb245020b31ea2969938401bec3ae715", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 170.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A12" + }, + "result": { + "position": { + "x": 113.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 170.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "018ed8392645a185927343d212ee668e", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 150.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A8" + }, + "result": { + "position": { + "x": 77.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 150.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "632e431a53a65c618ea9b012a59206b8", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 347.84000000000003, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowOutInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a710ba1f24a52969d21a6a8a56194169", + "notes": [], + "params": { + "flowRate": 94.0, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d712dddbae269e0d0f2573b526551250", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 170.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A12" + }, + "result": { + "position": { + "x": 113.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 170.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "661f8ada9071bc83acd81b7930202d5c", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 150.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A8" + }, + "result": { + "position": { + "x": 77.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 150.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2e5adf80c80a57ec93a4de4381d31408", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 347.84000000000003, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowOutInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6cb63d4aa257c9c204d7878aca8612aa", + "notes": [], + "params": { + "flowRate": 94.0, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a18bf0b251be17ddd6ba57c3a0d94677", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 170.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A12" + }, + "result": { + "position": { + "x": 113.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 170.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a6dd6f764dfb49e73d9860f1943cac15", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 150.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 150.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5b269d82a7ff688610c91be3aa3d0b3b", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 347.84000000000003, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowOutInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e1e83f38a67446e232be929676a65638", + "notes": [], + "params": { + "flowRate": 94.0, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9326e0397319a1ab0a97d06c43c162d1", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 170.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A12" + }, + "result": { + "position": { + "x": 113.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 170.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3b51058e2a4e0e632f99226a6f11c91d", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 150.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 150.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0629615e4f48c9b6cbcff1dce8c68f72", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 347.84000000000003, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowOutInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4a3c31f07e620ffb0963aa41491a0191", + "notes": [], + "params": { + "flowRate": 94.0, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5336ca8b10ec85ac7b212fab66364130", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 170.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A12" + }, + "result": { + "position": { + "x": 113.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 170.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d52cd0ed6e925fcb1025746925cc7b22", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 150.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 59.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 150.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6441ecc6d372590495359859d4c1113a", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 347.84000000000003, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowOutInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a2812327ad3dc701b06522033960f8d9", + "notes": [], + "params": { + "flowRate": 94.0, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a38bf772b0232b8c989b924f8c05fb46", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 170.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A12" + }, + "result": { + "position": { + "x": 113.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 170.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d7c430dedf0e498ef88406466a0e18f1", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 150.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 59.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 150.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "abc9f1189f74df82e76862f4bac2b792", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 347.84000000000003, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowOutInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a6b4c6946ab2b022b600a3066f5759a8", + "notes": [], + "params": { + "flowRate": 94.0, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "94310e3ca4e4c96828994277f7cc3561", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "df49f22d83da74838de3324a5ca3e78a", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fc41029b61861f556c9ca510628ff7dc", + "notes": [], + "params": { + "configurationParams": { + "backLeftNozzle": "F1", + "frontRightNozzle": "H1", + "primaryNozzle": "H1", + "style": "QUADRANT" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "152cff6dd6e1fb534fe712b339a4748f", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H1" + }, + "result": { + "position": { + "x": 14.38, + "y": 192.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5a6a3110f9971eee39748d6f842d1498", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 25.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 14.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 25.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "522b4ee6be332a6a0b7363963cc2f5d6", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 25.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A2" + }, + "result": { + "position": { + "x": 23.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 25.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "93375a78b433f8535c4c890dd1e47d5f", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 25.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 32.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 25.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "19b6370936b337de8b77cb7a9d334cae", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 25.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A4" + }, + "result": { + "position": { + "x": 41.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 25.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2652fa09e30689a8e309e9f2bb838b24", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 25.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A5" + }, + "result": { + "position": { + "x": 50.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 25.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f1eb5a3980e0ad113e9e8e4d9f618e50", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 25.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 59.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 25.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6da3375894027a04222aaf2aa81dd32c", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 150.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -38.55 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 328.88, + "y": 42.74, + "z": 5.85 + }, + "volume": 150.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8ec8209083ee6f80c790f47da28cf40d", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "78d9a0219687a3a442fda9924ba46a98", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9f4016c9478ee19ed973f92b8ea03762", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H2" + }, + "result": { + "position": { + "x": 23.38, + "y": 192.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "605af3c5e4caee00e5d3534921d86862", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ad451a470f3156a09eb8d0844eb34c9e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9ea8729fc2245c565c726e8ea5dd4e70", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G3" + }, + "result": { + "position": { + "x": 32.38, + "y": 201.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "83992dfbf5a02dc6346ac308c5123f0c", + "notes": [], + "params": { + "axes": [ + "leftPlunger", + "leftZ" + ] + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4449f3502fbe760b0d5b9eb9d9b7f97d", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "366b2038db497aa9b511ac169259507e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7c045850504687390e733bf2184ac236", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C4" + }, + "result": { + "position": { + "x": 41.38, + "y": 237.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7eab01ac8fef01e7c0245a196905ffde", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -24.85 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 42.78, + "z": 6.55 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2326e018304c8a2f236cd77001f2c046", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -24.85 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 42.78, + "z": 6.55 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "15cb21bb391a925f6839dc8a9668e886", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -24.85 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 42.78, + "z": 6.55 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b6f219a0c84c9eaf481b7283a96a9842", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -24.85 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 42.78, + "z": 6.55 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7001d9217e822e47a02d328a0ff75c43", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -24.85 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 42.78, + "z": 6.55 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "89570f8d0cab2abaf2a8d06a1b9370af", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -24.85 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 42.78, + "z": 6.55 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "21e4f8336f34523e9c0a6905f17966ac", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -24.85 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 42.78, + "z": 6.55 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3fe10d165d6fb1a2e459d3bf7f65d0ba", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -24.85 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 42.78, + "z": 6.55 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "afed7ca3146b89b1c4f1524feeefb54f", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -24.85 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 42.78, + "z": 6.55 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ac1ba0be5fcdd3e2fcabead0c1326099", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -24.85 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 42.78, + "z": 6.55 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "364674bcb6da27d9fd87de0092479d02", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -24.85 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 42.78, + "z": 6.55 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ef9e1305ec261ded62d2d99cff31077e", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -24.85 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 42.78, + "z": 6.55 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cbe60207cd9291ad271afd34f3ad14b4", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -24.85 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 42.78, + "z": 6.55 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "82216e10f28ac0bd102e30cb04248626", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -24.85 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 42.78, + "z": 6.55 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "71546b5885a9332a2869b840ef832c19", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -24.85 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 42.78, + "z": 6.55 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f7797ea8d7d4ceaa0af2cd3bb05abbde", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -24.85 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 42.78, + "z": 6.55 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "174cdd838aa2bd7070dd5fb21e394106", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -24.85 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 42.78, + "z": 6.55 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "770e4156eaa63dc0d18e83fdc82d83c6", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -24.85 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 42.78, + "z": 6.55 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "763574cc074c9b075866b00331a2ff14", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -24.85 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 42.78, + "z": 6.55 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "74398706543d6e3ab776836f0be7c827", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -24.85 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 42.78, + "z": 6.55 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "51db0a032476d5d56ba26217d6a0ff5d", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -24.85 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 42.78, + "z": 6.55 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "402161510f2c125bb58f50e6d58f9c21", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 4.9999999999999964 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 42.78, + "z": 36.4 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6968b346f47723e0bfa20d32dbe18a6a", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 4.9999999999999964 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 42.78, + "z": 36.4 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "prepareToAspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e1f15165a05555f26e2f73510f7ea1ab", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "39e624991f0b9dfe4ee4799b8c619736", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -24.85 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 42.78, + "z": 6.55 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a349f8b6f68c6860c36c51c51a0acd9b", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -24.85 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 42.78, + "z": 6.55 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c71443127ae322a1f577e9dfe892cda8", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -24.85 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 42.78, + "z": 6.55 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1527dce7a7053c38dd04c65d6f6e28bd", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "32555a392b1698a6746ec1a8039f3d90", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "10733b93463e7348b72a1120e4a006f1", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 146.88, + "y": 255.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bc1bbc67fc48a8e1f4a9d1983ea6df8d", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 25.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 146.88, + "y": 74.24, + "z": 2.05 + }, + "volume": 25.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "19ac6118093011e8ad409dc0573ba677", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 25.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "A12" + }, + "result": { + "position": { + "x": 245.88, + "y": 74.24, + "z": 2.05 + }, + "volume": 25.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "222ef2c3585d7d89896ca03000365e60", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "18cbbca7496587ba8d79cd0766fdeb6c", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cde3b666ccdf93283909895c5fe20446", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B1" + }, + "result": { + "position": { + "x": 146.88, + "y": 246.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "362d17afb1a98e76d2b7fcfaa57b3511", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 170.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 14.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 170.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dbdb70f55a54fc45914489a042e34268", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 150.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A2" + }, + "result": { + "position": { + "x": 23.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 150.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a9a980872b31047a731a843697442186", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 347.84000000000003, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowOutInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "21512038e8dda579028dba1618f2378d", + "notes": [], + "params": { + "flowRate": 92.86, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "78feacf7c9ec742a8c2f6d7a1b6dc0c2", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 170.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 14.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 170.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "43acf269afef496a3c53fdf87b16b02a", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 150.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A2" + }, + "result": { + "position": { + "x": 23.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 150.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e10b219b7b3831326926715df857020c", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 347.84000000000003, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowOutInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "984b8bc88393de41f66bf9fe5bba5899", + "notes": [], + "params": { + "flowRate": 92.86, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "89a130f04d737df6a7a527504ee26a16", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 170.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 14.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 170.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "20f91d0aef5f0563821506266234c4b7", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 150.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 32.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 150.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5aa1698157210be40ea0b796a7717c31", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 347.84000000000003, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowOutInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2b79d553bbec25001738f5fa36879298", + "notes": [], + "params": { + "flowRate": 92.86, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "781283e9e0351598120735f9e994b190", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 170.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 14.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 170.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6b7500a04dbfb9de7058e4ff1c5b0ca7", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 150.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 32.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 150.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2e2e2bd80735464507e610efa3492160", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 347.84000000000003, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowOutInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "77410e6e603a344eb7077cafba22905c", + "notes": [], + "params": { + "flowRate": 92.86, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c0b3df7862b967ece7270a5d6bfde097", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 170.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 14.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 170.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e549d41897227e9ca7f796f062e6da6d", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 150.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A4" + }, + "result": { + "position": { + "x": 41.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 150.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "78b71cbcdd28b71f94823e2ac5a97e15", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 347.84000000000003, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowOutInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "52b013f1a6da6df62a3c4fdf59fa61c9", + "notes": [], + "params": { + "flowRate": 92.86, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7a44bfc36a53c95aecaf59ce1a81166e", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 170.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 14.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 170.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "514a41687cc2a0bb34dc4d3f95db7d44", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 150.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A4" + }, + "result": { + "position": { + "x": 41.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 150.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9ae4b4d8dc5df1084a5f7faf33c1f20a", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 347.84000000000003, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowOutInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "38ca6b948c01bf029c8741a48549bed4", + "notes": [], + "params": { + "flowRate": 92.86, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6784743115590dcbc40af418951923e1", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 170.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 14.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 170.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "de1881b1f7c4e26c8c03bce2ba0a58d8", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 150.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A5" + }, + "result": { + "position": { + "x": 50.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 150.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6a301b41e80501cee5a8f47be4943b2b", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 347.84000000000003, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowOutInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "170e99e8e6e8f011160bdde7e887aa5b", + "notes": [], + "params": { + "flowRate": 92.86, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "028dcfd6461dc742dd7b327e49903849", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 170.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 14.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 170.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f30c255690b0c4a9ff3f84a6d72c2320", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 150.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A5" + }, + "result": { + "position": { + "x": 50.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 150.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4c3c60a9c2ab15edc381c527e93bf6d0", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 347.84000000000003, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowOutInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9759dda3637b5278c0b563bce0487a0c", + "notes": [], + "params": { + "flowRate": 92.86, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c404644b1e5c4ce90f7b44fc0e88a81a", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 170.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 14.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 170.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2fb6e0a2b6b13ec0bc07447ddf645dcb", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 150.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 59.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 150.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "636f883908ceb2aebb11d9459ce6e368", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 347.84000000000003, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowOutInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bdb38cf5875a07896b9a140cf64ff512", + "notes": [], + "params": { + "flowRate": 92.86, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9ac9b55c61ff27e8c5fbe39e99c512d2", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 170.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 14.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 170.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1c89c554822f6043d64ae7eb50f59651", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 150.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 59.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 150.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f590bbc9fae4401c3c0431a6c1d9ce50", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 347.84000000000003, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowOutInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f859b4ccad4459562b9acd962c4918d7", + "notes": [], + "params": { + "flowRate": 92.86, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e5882c371ae09159b4642cf0e176b772", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 170.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 14.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 170.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e781f18fc8542af8fa577c3db4266904", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 150.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 150.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "56965c4f549bce7854ffd4b4f1a0e2d7", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 347.84000000000003, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowOutInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "756b77b14f61686ae8481390e10f800d", + "notes": [], + "params": { + "flowRate": 92.86, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8b454b6b3038609680e9bfb9033405cb", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 170.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 14.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 170.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "14653ebc88fe702a8a122950d5ac9b1c", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 150.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 150.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "611b9cd86a3bc68e2a0367466643df59", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 347.84000000000003, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowOutInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f0cf8f8fafbbdd5d88d3faf4845ecd27", + "notes": [], + "params": { + "flowRate": 92.86, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b87a96d851ce0c0f2a362b26a351114a", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4605241b5ca2a9fb6b62395a67b60cbc", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c86352a3e497650ac0f63fe5b526fd25", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C1" + }, + "result": { + "position": { + "x": 146.88, + "y": 237.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0d42e232f72b0742eea8ea8ef018f04b", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 25.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 59.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 25.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4873218fc95625b728af694b0364fe6b", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 25.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 25.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c06cd01ff8949d0d29a6bc730c96fd2f", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 25.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A8" + }, + "result": { + "position": { + "x": 77.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 25.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e9f7063f507b68bd69657ab17e8a9abb", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 25.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A9" + }, + "result": { + "position": { + "x": 86.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 25.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d591e2a8290c4dafc2e8f2026bf496ce", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 25.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A10" + }, + "result": { + "position": { + "x": 95.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 25.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b6ba6931d13de965183210ccfc5a9de8", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 25.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A11" + }, + "result": { + "position": { + "x": 104.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 25.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "140005afcb3d539c56799bd2e1d1f3b2", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 25.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A12" + }, + "result": { + "position": { + "x": 113.38, + "y": 42.78, + "z": 5.55 + }, + "volume": 25.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9dab6da6ad95f179af59ae635de83b90", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 175.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -38.55 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 328.88, + "y": 42.74, + "z": 5.85 + }, + "volume": 175.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0cc0c61d4c14d5749a093d733da39e47", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1e8ebb9491440e5c9e516d2c2000a684", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "99601303847e1136854292a1e9f39d97", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H3" + }, + "result": { + "position": { + "x": 32.38, + "y": 192.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e592602159e378d87db29bd4b54946a3", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 146.88, + "y": 74.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7b81b70512d9629d9d88dbab1446a57e", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 146.88, + "y": 74.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5d8216651b7613ad8b1e744b45c50e02", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7aa3ae7ca401d664b924e573e154f601", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0f5c008b2b4b497614a09d0100798d48", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D4" + }, + "result": { + "position": { + "x": 41.38, + "y": 228.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "314e0aedd3e2171e4b74e4a5eaadad2d", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "B1" + }, + "result": { + "position": { + "x": 146.88, + "y": 65.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "af1c7291eeb1874e174f62b4670b258f", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "B1" + }, + "result": { + "position": { + "x": 146.88, + "y": 65.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1d9e9c40943ae39feef4d20a15756985", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "25a9e3e1af3d34cde82377e38fcbff35", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a3d37a8fa6d10fea316506816f19a0d3", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E4" + }, + "result": { + "position": { + "x": 41.38, + "y": 219.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ba7d80924676e03644782e34ae821b43", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "C1" + }, + "result": { + "position": { + "x": 146.88, + "y": 56.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b7f2a68cf81e06fa47c68aa24dbc1419", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "C1" + }, + "result": { + "position": { + "x": 146.88, + "y": 56.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a08f5c5ad45283ee1fe3583a64542cd4", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2258522ee0436de3a68c7469fbca44be", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bf7b3c17f1a257aa511965f44b1bd4fd", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F4" + }, + "result": { + "position": { + "x": 41.38, + "y": 210.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b3649b2d7e9fe0a9695a7ca9a6b0a329", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 146.88, + "y": 47.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b7d4ad7b47d7fa3548d289800a5e18a3", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 146.88, + "y": 47.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f60b409de5d18772ed2ca0649bc27476", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f8464fdb711870dfee5d693b3d2104c8", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ea1e2bef11fc087efb7a10cb10b53857", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G4" + }, + "result": { + "position": { + "x": 41.38, + "y": 201.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "aec57479efabdff8957c3bf6f25b7258", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "E1" + }, + "result": { + "position": { + "x": 146.88, + "y": 38.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "31dc7c5b41f407c1fe3536846ae6d678", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "E1" + }, + "result": { + "position": { + "x": 146.88, + "y": 38.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f95ae015dc1de71b050ff83bbe299626", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7bd0984704f19b2b34163285cafe042e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e8dcb53d139843fb4f52b4a2ba31f908", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H4" + }, + "result": { + "position": { + "x": 41.38, + "y": 192.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bbfcb7141c3f1a8b2883a95188adb33f", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "F1" + }, + "result": { + "position": { + "x": 146.88, + "y": 29.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f0a790c9246b8dbcdd4e51d4cd108971", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "F1" + }, + "result": { + "position": { + "x": 146.88, + "y": 29.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9fbe54908d39ede8ec52c277be0fd3c4", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0741bc342297f066f8ed17a5cc85b361", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5cfd2d19fa37ae428c9dce06c966043a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A5" + }, + "result": { + "position": { + "x": 50.38, + "y": 255.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "65913a2a6e242c8bfbdfbcba41bc7fb7", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 146.88, + "y": 20.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3542501659ea3a3c9e912ea2ff6a6727", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 146.88, + "y": 20.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "570dd0890122754d9411cd1c5d72b3f8", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dae168dfe966f200c582ff4175834672", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6b91d7abab00074fb0e7127131e92822", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B5" + }, + "result": { + "position": { + "x": 50.38, + "y": 246.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "247976438e4f4aff9c82749de264520a", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "H1" + }, + "result": { + "position": { + "x": 146.88, + "y": 11.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "20764e18a3baaec477aeb13bfb86e6cf", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "H1" + }, + "result": { + "position": { + "x": 146.88, + "y": 11.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "caeaf8374c3525ab1a338cbd52dd1dc4", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bb42568391064beb22adbfd5996a8a9b", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f4546e372c8b84cffe1e2b3ae0fa3137", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C5" + }, + "result": { + "position": { + "x": 50.38, + "y": 237.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "51b361c15855392c5229c90b05ee6308", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "A2" + }, + "result": { + "position": { + "x": 155.88, + "y": 74.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "84120f69104caf0cca5a0211dcdfe44b", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "A2" + }, + "result": { + "position": { + "x": 155.88, + "y": 74.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "046a4735ecb624dc6fcf37b346cb1935", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3763628f312a6729e1b88d5045976dd4", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "57b75c2a6e091f81b763b0e743795ec6", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D5" + }, + "result": { + "position": { + "x": 50.38, + "y": 228.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ba90cf278ac31e464e7095c5c906e10b", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "B2" + }, + "result": { + "position": { + "x": 155.88, + "y": 65.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ca567a69c8ca4b50ae7e6fba893ce681", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "B2" + }, + "result": { + "position": { + "x": 155.88, + "y": 65.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f1601b5fb5c1295de33735f9ab084796", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f080850cc6a90a7f9c0b4f231db3b1f8", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6d66b0573f483b646312c5c557119591", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E5" + }, + "result": { + "position": { + "x": 50.38, + "y": 219.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1f9913a9d8a4be1de0fe70f72b5b2963", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "C2" + }, + "result": { + "position": { + "x": 155.88, + "y": 56.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "45c9f7671d47b338c21c427df444df14", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "C2" + }, + "result": { + "position": { + "x": 155.88, + "y": 56.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4a29614606113a6249946fb008f0d400", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3ed754fae6a978e4e0da26794a955bd4", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bb703612756e04b1917f4d9b2ed3c48c", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F5" + }, + "result": { + "position": { + "x": 50.38, + "y": 210.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2e29d1b20d2bfb7c1cb1b449d4bda986", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "D2" + }, + "result": { + "position": { + "x": 155.88, + "y": 47.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e27f9ed41aeb16fa547eb3cb90dfc426", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "D2" + }, + "result": { + "position": { + "x": 155.88, + "y": 47.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3a84d9d91409f7cdc006c8c70dd20cf5", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4d333f6b38a6aeb550f5817bc45b4aec", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "02302bb1cfbfce48b664d378410b76d1", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G5" + }, + "result": { + "position": { + "x": 50.38, + "y": 201.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "48c83f6e3372acceda091ca5701fbd92", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "E2" + }, + "result": { + "position": { + "x": 155.88, + "y": 38.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "44b5f3d50cb7c1cba67cb6bee44356cb", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "E2" + }, + "result": { + "position": { + "x": 155.88, + "y": 38.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fea1efd852b457f4786e752b1d600c97", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1dfc706b582aafb5d75b2e5d22e87c6f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0c196309168697f57bb08ca48915f858", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H5" + }, + "result": { + "position": { + "x": 50.38, + "y": 192.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "67a5aaec54157b3c925cf78d844a22a5", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "F2" + }, + "result": { + "position": { + "x": 155.88, + "y": 29.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fb07fdbe2907cec56e92d82aa45273cc", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "F2" + }, + "result": { + "position": { + "x": 155.88, + "y": 29.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3ecddc2a953075d260a7ce8fdeec5dac", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9620527b7be9ed5f886a67f13b4d0d2b", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a182c96560e520c285a305ce1bbbca54", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 59.38, + "y": 255.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9bf46732cee7875cf0cc08a140b93cad", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "G2" + }, + "result": { + "position": { + "x": 155.88, + "y": 20.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "195bf388415a32342eaf7ca5de9eb0db", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "G2" + }, + "result": { + "position": { + "x": 155.88, + "y": 20.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "65dc99433a610e6b01e8160fa7b3c9cf", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a4d0c42aad6dd2be5a925a5065624f4a", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "837f1e4c8a93e452a88670e06d66b97d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B6" + }, + "result": { + "position": { + "x": 59.38, + "y": 246.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "027eb71a3fdec7ddd7b5b4973f20c748", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "H2" + }, + "result": { + "position": { + "x": 155.88, + "y": 11.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "082bdab9e2cff2116b2e07ce1cabd115", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "H2" + }, + "result": { + "position": { + "x": 155.88, + "y": 11.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0fa7c31ce90deb452c2bb4dda6404809", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1e4cf8df72fdb9e53ee7d2da93dd0499", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "66f1c1a515df2a2fa5a8c94e390669fa", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C6" + }, + "result": { + "position": { + "x": 59.38, + "y": 237.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "985d6b2e42587482de706f8224b6b2f9", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 164.88, + "y": 74.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0ba825d8db5827a5c223955318cf9e02", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 164.88, + "y": 74.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cc9136e05ba56b73a9edde8c0ec8a7f0", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "38cae5761f5b19f428f07fa44c7d270a", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "acbf4d5a5b613d97e0694414a04626ed", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D6" + }, + "result": { + "position": { + "x": 59.38, + "y": 228.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8bae8fd8c1d9187e495456403513d285", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "B3" + }, + "result": { + "position": { + "x": 164.88, + "y": 65.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "48cad3a14eec60b2e807cdb488a5cb13", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "B3" + }, + "result": { + "position": { + "x": 164.88, + "y": 65.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f6ccd935a261c98a0da22aabe57e5035", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6e7fa469d9a6bd19e5ed2a28c8cb1c24", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c1b33267b61eb0641439aa7c7deff668", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E6" + }, + "result": { + "position": { + "x": 59.38, + "y": 219.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "725e1aaafd81fb540fce22550c991d75", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "C3" + }, + "result": { + "position": { + "x": 164.88, + "y": 56.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "657547726373e39e73c1479496becd9b", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "C3" + }, + "result": { + "position": { + "x": 164.88, + "y": 56.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e022abe96abba9269b8d70c2e3d4bcf8", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "79d190f8b71f109cdf7f57beec2b5576", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f783ddb62d701c1dea318140cb2ab2d0", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F6" + }, + "result": { + "position": { + "x": 59.38, + "y": 210.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6a9f6f611ebed5ad042bdb9d8ce8cb5c", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "D3" + }, + "result": { + "position": { + "x": 164.88, + "y": 47.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "600712e5ad4b4836b8f5e6112b850f58", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "D3" + }, + "result": { + "position": { + "x": 164.88, + "y": 47.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3ef1f6e68815e8200fece97f14b2b526", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "12721cbfb05477deb06dd2dfc710a2e2", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "93790c69e94002d8535cdbb86fcc9fad", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G6" + }, + "result": { + "position": { + "x": 59.38, + "y": 201.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7553443b729dce980a1c2664be3ce166", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "E3" + }, + "result": { + "position": { + "x": 164.88, + "y": 38.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "80b1cbffa8f32f20cff6812da08e8414", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "E3" + }, + "result": { + "position": { + "x": 164.88, + "y": 38.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7edb74f8bbc0611064b6028626325231", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "00913c1b24aa068a54d6179db78202c0", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "20ab5b6079ae6c27d1689ac5be828441", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H6" + }, + "result": { + "position": { + "x": 59.38, + "y": 192.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d7ad7528c21a6d1be398780167d38a7c", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "F3" + }, + "result": { + "position": { + "x": 164.88, + "y": 29.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1de24b15e67f30b194a1b0106b57dd92", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "F3" + }, + "result": { + "position": { + "x": 164.88, + "y": 29.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "886e4b5c9d9b55d1f2c5f71a9d5b2046", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1d3dcb8ca6a4f61b1820552a39a500f5", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b753190564ba8e9df6152a56ee9324db", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 255.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a3fc626e539f5cc11325103eb58a1b50", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "G3" + }, + "result": { + "position": { + "x": 164.88, + "y": 20.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4be84624f82ab3044df87b948452a99d", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "G3" + }, + "result": { + "position": { + "x": 164.88, + "y": 20.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "67b74e12ba7012a8b394788a5cdff1a2", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3ceda73f3f8766ff9efeb02a87111454", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b5d2346bab7cb2d9d2744bb13f53e19a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B7" + }, + "result": { + "position": { + "x": 68.38, + "y": 246.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c71e2df61f5f9238d224623169abb1b3", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "H3" + }, + "result": { + "position": { + "x": 164.88, + "y": 11.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8658687e032a356c83e4429e31ca9cfd", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "H3" + }, + "result": { + "position": { + "x": 164.88, + "y": 11.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "15d6a8d217212d3e740de4d934cebe52", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1bab4438401030a8b09878c2b677e61b", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "021f61f3bb7401a3749f522298f9f734", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C7" + }, + "result": { + "position": { + "x": 68.38, + "y": 237.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c07fddae19028e0128ddc6b1aa8e3a4a", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "A4" + }, + "result": { + "position": { + "x": 173.88, + "y": 74.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "40f44e2e284aef59dd10966976a9e210", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "A4" + }, + "result": { + "position": { + "x": 173.88, + "y": 74.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1560430a0e74946b7993e47ae11cd183", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cace4563d6d5a17dee8001dca229029b", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b893c070fed862e6e3b4c7c7d9315e76", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D7" + }, + "result": { + "position": { + "x": 68.38, + "y": 228.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2917268e983fe5b4460b5215be834cb8", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "B4" + }, + "result": { + "position": { + "x": 173.88, + "y": 65.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5c0128223fa3d3e6b9d0a08ddc64e97d", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "B4" + }, + "result": { + "position": { + "x": 173.88, + "y": 65.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "55e95abc24637f5e80e8daa4839c47e2", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a41ca7ff90dad9ae11a60ea807a80330", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6ab834b6c158e2dfeaf3b2e78e58f5fd", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E7" + }, + "result": { + "position": { + "x": 68.38, + "y": 219.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d826c99016ce74abaf0ecf27e6016c99", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "C4" + }, + "result": { + "position": { + "x": 173.88, + "y": 56.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1fd697aabbe02bed334d8dd1bcf5bf4b", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "C4" + }, + "result": { + "position": { + "x": 173.88, + "y": 56.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2de38953d6a3219a6a29fec1bdc7a313", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f858fb0fd988e0d5169d941536076d91", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "af3d5f5d9ebbd04792c1ecf3daf28631", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F7" + }, + "result": { + "position": { + "x": 68.38, + "y": 210.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3b062fd2c1df0f4515793318b7119035", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "D4" + }, + "result": { + "position": { + "x": 173.88, + "y": 47.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "01ecfee7fb3122cacd5488d503473abd", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "D4" + }, + "result": { + "position": { + "x": 173.88, + "y": 47.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d80eb8b9527c675a82d2de9eb1955ab9", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a1f3cf4dd1f8f3fd8015d22d45ff1ed0", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "86b4ceada7e2713661c73726fdd040ce", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G7" + }, + "result": { + "position": { + "x": 68.38, + "y": 201.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "929114e66c66e7b14466e8d1b0a66bd9", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "E4" + }, + "result": { + "position": { + "x": 173.88, + "y": 38.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1efd0788945f3600716be938d448ca4d", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "E4" + }, + "result": { + "position": { + "x": 173.88, + "y": 38.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "402456aa65e6594c6b4178cb6426642b", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8bc2b907719b56da1c5744ef9fd3eab5", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cbf6fda6ddcb71f06cbf5805ecbe53e0", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H7" + }, + "result": { + "position": { + "x": 68.38, + "y": 192.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e55ad8e257dab828759538e661c97256", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "F4" + }, + "result": { + "position": { + "x": 173.88, + "y": 29.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3852482c04dd42e83d3ba08fc7a0a957", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "F4" + }, + "result": { + "position": { + "x": 173.88, + "y": 29.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd6ffa187f5bae0a3ae2becedc529139", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f57904306ee090a7b2b6495dfa198aab", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7f8c2bd8f074d9ab3394364c2db4d3b3", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A8" + }, + "result": { + "position": { + "x": 77.38, + "y": 255.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4f257652b6cea715adcd984f34d5e788", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "G4" + }, + "result": { + "position": { + "x": 173.88, + "y": 20.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c673440cdc9b1fc95f86275065de406c", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "G4" + }, + "result": { + "position": { + "x": 173.88, + "y": 20.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "65cc2bf126dc72e1570e4444b63246dc", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4c3d195d35df5191b574c3899e80fb7a", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8341e79abd64bb273d3d6ad7f95c86dc", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B8" + }, + "result": { + "position": { + "x": 77.38, + "y": 246.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "75e85ce021a4e0eb9ec5c25f8b5aaa99", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "H4" + }, + "result": { + "position": { + "x": 173.88, + "y": 11.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b8b67c721b4eaaa9ec414ca5f2c0c428", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "H4" + }, + "result": { + "position": { + "x": 173.88, + "y": 11.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "070439fa10543865a4654f1c2b26cba1", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "456db48b7a91c8b2af2ea11da73068a5", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f37db9bced0f87308d56d962e75e8a42", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C8" + }, + "result": { + "position": { + "x": 77.38, + "y": 237.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bf7d78d5eb95632c57232174fcb52d72", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "A5" + }, + "result": { + "position": { + "x": 182.88, + "y": 74.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6f93c73b62a4ad0a928d01232bc7528b", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "A5" + }, + "result": { + "position": { + "x": 182.88, + "y": 74.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a595966dea62045803867c6f46ac4696", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "22d3431e27a6e6e1afda3c553d47b2f4", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "22f1585717475277a03d0c8a2b982c7d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D8" + }, + "result": { + "position": { + "x": 77.38, + "y": 228.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b896c050069134ff0659931d49ee1782", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "B5" + }, + "result": { + "position": { + "x": 182.88, + "y": 65.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "efacce4b60dde4603b015e74f267bd18", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "B5" + }, + "result": { + "position": { + "x": 182.88, + "y": 65.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "36f200386274a7a69aa30443aeae3d40", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "887ec5579b15ceec42246b1ff61a4b27", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c76ca74dbf62887ac9251af8fa287a57", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E8" + }, + "result": { + "position": { + "x": 77.38, + "y": 219.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2eb1ac81f71c9805e8b8337297ce6f0b", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "C5" + }, + "result": { + "position": { + "x": 182.88, + "y": 56.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "28f10d3033dce99464666618ed5eb51b", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "C5" + }, + "result": { + "position": { + "x": 182.88, + "y": 56.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "09d17c00e04e8c4cff295a37fc42062c", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "48a0a0223599d6b6c631f43f5ffdf882", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "43cdfb54f2815eb061ad020d74c92810", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F8" + }, + "result": { + "position": { + "x": 77.38, + "y": 210.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "848bd213fbc3409175a288aa652ad090", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "D5" + }, + "result": { + "position": { + "x": 182.88, + "y": 47.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f08c7a6773edeab39722145211063da3", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "D5" + }, + "result": { + "position": { + "x": 182.88, + "y": 47.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0c126c7e5eba869cdcbe284f9a4f4751", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dc492570131e0a8a99607b3f6e351669", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "66385238818fee75fbd20ff9662b0476", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G8" + }, + "result": { + "position": { + "x": 77.38, + "y": 201.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1fcdaf259cb1572f0d5788f7def58c2e", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "E5" + }, + "result": { + "position": { + "x": 182.88, + "y": 38.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "abde7370718d6721d3be7b2fcefe91f4", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "E5" + }, + "result": { + "position": { + "x": 182.88, + "y": 38.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "36d4f7888fc7e4aced19eb063bf71757", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e02e1ed9de1133f5a576978667f77380", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f7eb8840ff5b668b48f2ae35da5f6572", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H8" + }, + "result": { + "position": { + "x": 77.38, + "y": 192.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5353282f66c23218cb5c55f3fa86149c", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "F5" + }, + "result": { + "position": { + "x": 182.88, + "y": 29.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "aa3eaa0f27ea60942304c1fef17c6b59", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "F5" + }, + "result": { + "position": { + "x": 182.88, + "y": 29.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3de1ad9f978ca07f52e93c4cd4ffc789", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5102ce3d98ddb4855a418871df206d3e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9e31f5660481cd33ebc500d372aa0990", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A9" + }, + "result": { + "position": { + "x": 86.38, + "y": 255.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "262fd94c20f8e671eb932d98f023d392", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "G5" + }, + "result": { + "position": { + "x": 182.88, + "y": 20.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d374b763fb6b83e23df1d956e8b1880b", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "G5" + }, + "result": { + "position": { + "x": 182.88, + "y": 20.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "20b052c930903fee7aeae374beb844ae", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b9d8ebb0109a4b4c3ee374e65f64030f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c481c7678081da33b4de8273a00c468f", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B9" + }, + "result": { + "position": { + "x": 86.38, + "y": 246.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5d17fba111dd3e9960517fffd9d2339c", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "H5" + }, + "result": { + "position": { + "x": 182.88, + "y": 11.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "853401905bf1e2101d863092f80ef0e5", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "H5" + }, + "result": { + "position": { + "x": 182.88, + "y": 11.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6330a4fef79899596448b4979070eafc", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "815d34b6ce83aa5da8b9eed908b109ad", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5189693e8400254efecf38a19024e743", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C9" + }, + "result": { + "position": { + "x": 86.38, + "y": 237.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e6cb6d54f8ade3ec577bdf950c45594f", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 191.88, + "y": 74.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "db32b19841f300ed90efab7942ac5ccc", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 191.88, + "y": 74.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d9d4c094a5f75134169783535c9bcf18", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d30e8e55c71f36775c8b9d3c44899dd1", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "032c357ad25912e7c8a10569bf6ffa51", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D9" + }, + "result": { + "position": { + "x": 86.38, + "y": 228.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "61942ade3bb8b8c8161e67baba4a5776", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "B6" + }, + "result": { + "position": { + "x": 191.88, + "y": 65.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bab515ad8f0740d088735af455db0914", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "B6" + }, + "result": { + "position": { + "x": 191.88, + "y": 65.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cc0c2a25b20ba02f69a10f2d682cdf4c", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d96f58703c7293fa5673fc7dcca8e7c7", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3a031dc7ca90bed255cc7e5b7b239db3", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E9" + }, + "result": { + "position": { + "x": 86.38, + "y": 219.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6945fd4764128e2a9abfb0220083c4fe", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "C6" + }, + "result": { + "position": { + "x": 191.88, + "y": 56.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f9b65dd7423927eeb369eaaeb6d07bbd", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "C6" + }, + "result": { + "position": { + "x": 191.88, + "y": 56.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3417af4132da947509668cded9483a17", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2a43fd79ca78394251384cd372adaf70", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "13b3f5151a73b597d0021a1e85878b6d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F9" + }, + "result": { + "position": { + "x": 86.38, + "y": 210.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d50e7b9141e9e7494c0f5768dc0e793d", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "D6" + }, + "result": { + "position": { + "x": 191.88, + "y": 47.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1cbf10eff4e42bc783c347f1bdd42eb0", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "D6" + }, + "result": { + "position": { + "x": 191.88, + "y": 47.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9e13012a095f7c2927f4994ee287abb5", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "620cc908a9ef2f77324e08471a466d91", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8f068e1fdc00ae4248d537436f425e86", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G9" + }, + "result": { + "position": { + "x": 86.38, + "y": 201.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "32a95203a326b9efe91cd3cf38623fb4", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "E6" + }, + "result": { + "position": { + "x": 191.88, + "y": 38.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8333c607fd0ace5937bfeebe9cc8698d", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "E6" + }, + "result": { + "position": { + "x": 191.88, + "y": 38.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "846a3ed24431b1e68c0bb47b2c400b61", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e214c7d6fa8e20d913d330f248a861e4", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9c74231d0af699359e45732769227039", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H9" + }, + "result": { + "position": { + "x": 86.38, + "y": 192.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a002dc83f92d42e07ff7884440c56396", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "F6" + }, + "result": { + "position": { + "x": 191.88, + "y": 29.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9bc63de367832769b26f01b301450f71", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "F6" + }, + "result": { + "position": { + "x": 191.88, + "y": 29.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "250bfc96f3be172edddd87e78677ada6", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c51b2e0c7a55ba0a6dc05827996421ad", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ff26f20fa76ff73b6ebac0d5a6939b90", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A10" + }, + "result": { + "position": { + "x": 95.38, + "y": 255.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "602f54bba25c3e7f4aee51ccff2f7c12", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "G6" + }, + "result": { + "position": { + "x": 191.88, + "y": 20.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f31ac10ba6e4d3c4193ec970251da226", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "G6" + }, + "result": { + "position": { + "x": 191.88, + "y": 20.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f82098db43bf7a922f6e7111e9690c30", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6fcb7f6d4a636847e95e4be4f4ef0dd1", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0e608336f7387de4b4d47cb10a61bada", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B10" + }, + "result": { + "position": { + "x": 95.38, + "y": 246.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0063988e1bff9360b9ad8da42b7abd8b", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "H6" + }, + "result": { + "position": { + "x": 191.88, + "y": 11.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cea3e7ca665538ca94cd5e55b77ad5ff", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "H6" + }, + "result": { + "position": { + "x": 191.88, + "y": 11.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6204c2e4d101b85fea59a3e82041ad66", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1cba31902d09d6473f16f0819060f6b8", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5ff7d97ad682fc8772214b82f93483e3", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C10" + }, + "result": { + "position": { + "x": 95.38, + "y": 237.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a7b5a204c884c6703fad03ba311120d0", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 200.88, + "y": 74.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "432a988d2867b4d4ff0ee97e5e8013e4", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 200.88, + "y": 74.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c50feda06cb503ef96c3531078576d4d", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "192c0fd9528981f983dd04fce06a0341", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd191e6493b5610d10dfa86febe78275", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D10" + }, + "result": { + "position": { + "x": 95.38, + "y": 228.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5e0e1bda9cdde872ae39f454742cc956", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "B7" + }, + "result": { + "position": { + "x": 200.88, + "y": 65.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e78e4cf7e862862006fb30325e470659", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "B7" + }, + "result": { + "position": { + "x": 200.88, + "y": 65.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "118d6fc970885521d574a1831e3cb2f3", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "815048d1958cfbc56bcad6b3174d277e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4e4b714a710019a646bf585e814f717e", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E10" + }, + "result": { + "position": { + "x": 95.38, + "y": 219.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "db33e6b30632def50aa2e9b208ae7e9a", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "C7" + }, + "result": { + "position": { + "x": 200.88, + "y": 56.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "59099452d79e2ed96fcaa7101709c3e2", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "C7" + }, + "result": { + "position": { + "x": 200.88, + "y": 56.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "de374a894eac0a69644d75ecc5c79cea", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7e2ffd02abde9f729df27411822ffb54", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3c4c511c2cbe1d35c73141d623118f64", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F10" + }, + "result": { + "position": { + "x": 95.38, + "y": 210.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cb4fe5ebeb90ca46a5a890ce5a1722e3", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "D7" + }, + "result": { + "position": { + "x": 200.88, + "y": 47.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d26a8609a0f45f8f459ee929fa0d40d4", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "D7" + }, + "result": { + "position": { + "x": 200.88, + "y": 47.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a60437d239fbcc28a7688af3c245122c", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1dad1b9bedb823addf796474b19ffdbc", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "359079e50d4f728cbf9bfd9ff725b5e8", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G10" + }, + "result": { + "position": { + "x": 95.38, + "y": 201.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "29a7e4b1ddc53b3466a37013143b293b", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "E7" + }, + "result": { + "position": { + "x": 200.88, + "y": 38.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cb7c3ee67774609162196888cb77b78d", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "E7" + }, + "result": { + "position": { + "x": 200.88, + "y": 38.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a54ecf29cc2ab4ac15f198a763ee846b", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1c2a4853e9737d81fddaa3df0964579a", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c792bab8ddb3912a4052db6a894bc1a6", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H10" + }, + "result": { + "position": { + "x": 95.38, + "y": 192.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "99f0e923e9c48929aa1a56f0edf88fe6", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "F7" + }, + "result": { + "position": { + "x": 200.88, + "y": 29.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "729ced1ea326b283fd7889211f816e7b", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "F7" + }, + "result": { + "position": { + "x": 200.88, + "y": 29.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3d0cbe7bf3f8f272d5d5e6df9cb5e065", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d365665f7edce965722d410621b4e9b4", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "622d64ce82c63ea8bbff9dc7f03ee513", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A11" + }, + "result": { + "position": { + "x": 104.38, + "y": 255.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "831d0955189ebf35550ae78f7aa00620", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "G7" + }, + "result": { + "position": { + "x": 200.88, + "y": 20.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3f033d6da3b15066039c93ece1dd5c22", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "G7" + }, + "result": { + "position": { + "x": 200.88, + "y": 20.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "70f8fe3c1f575feaf5f10f83f2968309", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9ea9109bcde076589dff89c89612e410", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "60ef4f76888755d2d69dd63080c538c4", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B11" + }, + "result": { + "position": { + "x": 104.38, + "y": 246.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8fcfdb9ec1401c56a64bf0fe46d81d77", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "H7" + }, + "result": { + "position": { + "x": 200.88, + "y": 11.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "db1955994e6bcf4c828e959b9bff1e5a", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "H7" + }, + "result": { + "position": { + "x": 200.88, + "y": 11.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "42183e52642676caeb170eb6282094ea", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "541a35bf0a0c58fb0b111dc1fe82f0bf", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f89efd0bd88939d0146d50738bbddce4", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C11" + }, + "result": { + "position": { + "x": 104.38, + "y": 237.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f2f848c7c111c1bb8a7cb96214e6eca0", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "A8" + }, + "result": { + "position": { + "x": 209.88, + "y": 74.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a63e8166e63e69bf6603a642542b3ab6", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "A8" + }, + "result": { + "position": { + "x": 209.88, + "y": 74.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a5bb2df172b56b9017973128242bfec0", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6e5d94ba06598cda8813af593e937a60", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "66496baff414dc5c1ca8319dfebd3c6e", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D11" + }, + "result": { + "position": { + "x": 104.38, + "y": 228.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f730b3ccbf45ecbb6faa31ded6bd7a35", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "B8" + }, + "result": { + "position": { + "x": 209.88, + "y": 65.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4f3ba6646dcb38cc3fd667e879805381", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "B8" + }, + "result": { + "position": { + "x": 209.88, + "y": 65.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5ad5b7dfd60908290440bf20ad007891", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "79b590a78f7d145b350e713138340c93", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "adc776e4ca18160d443a75a26411ecb5", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E11" + }, + "result": { + "position": { + "x": 104.38, + "y": 219.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e8c396072201933abc21e955ca2798c9", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "C8" + }, + "result": { + "position": { + "x": 209.88, + "y": 56.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6141f74d1b98fc592e6710189018c29a", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "C8" + }, + "result": { + "position": { + "x": 209.88, + "y": 56.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "12138b6e4839283b44a357c036957f43", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9a98e894aa30ef7263fac5a08d19a894", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "20ecd3b1eb74abbdca83503f1b0b25cf", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F11" + }, + "result": { + "position": { + "x": 104.38, + "y": 210.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cb534010951ad74f8df2c430ef336c2c", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "D8" + }, + "result": { + "position": { + "x": 209.88, + "y": 47.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "153a878b6251c7768273a714c52f736d", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "D8" + }, + "result": { + "position": { + "x": 209.88, + "y": 47.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c21c18eb3275c974c105043eed626045", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "70f34550518a66c1bf3fcb9082c27ae9", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9ff70a81196029afc75599a59077af60", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G11" + }, + "result": { + "position": { + "x": 104.38, + "y": 201.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "853a54d07e439206bab73befdd9badf1", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "E8" + }, + "result": { + "position": { + "x": 209.88, + "y": 38.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9d830768d0448d46f3de04b57ea2ac77", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "E8" + }, + "result": { + "position": { + "x": 209.88, + "y": 38.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a323c948278230c6d8fb187c219f6057", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd0e604dfbcd1340f7e76831229152f5", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "122cd381c7da316bd318452ba16dbeda", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H11" + }, + "result": { + "position": { + "x": 104.38, + "y": 192.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "320b936ab3bf8f01b792a68c300ef742", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "F8" + }, + "result": { + "position": { + "x": 209.88, + "y": 29.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bbcd5c14b33c447a2e058cfc134f61fd", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "F8" + }, + "result": { + "position": { + "x": 209.88, + "y": 29.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cc37d16e54a723eee881269b1c9d9b5f", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f0ef81a1ea70c2aae7771b1546bdb06c", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8713b7b0efec7630a796e811182860c8", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A12" + }, + "result": { + "position": { + "x": 113.38, + "y": 255.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e6b417a2fd26410dbc7dc407da128a03", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "G8" + }, + "result": { + "position": { + "x": 209.88, + "y": 20.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5faf5caf4ed7665a7d3a5ea39dd0a26a", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "G8" + }, + "result": { + "position": { + "x": 209.88, + "y": 20.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f87efd2a6da4d9a5e126d3131d5ad9d1", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f2714bac9df513aa8e56647bd025295f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "78eaaa49c6659875f766420320f58bf2", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B12" + }, + "result": { + "position": { + "x": 113.38, + "y": 246.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e8aac38642f651eb3ba948f89825902e", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "H8" + }, + "result": { + "position": { + "x": 209.88, + "y": 11.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "147bb0a8bdbd1ffb1e2220e245157151", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "H8" + }, + "result": { + "position": { + "x": 209.88, + "y": 11.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bad51cfdc472f069192df8be2f5d6dd4", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1640ff3934f251b5f4c4e0dd2780d5db", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d3372d7368820786fece94a81c79488b", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C12" + }, + "result": { + "position": { + "x": 113.38, + "y": 237.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "94234d53562dc2a5e3fed8c292dcf2e7", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "A9" + }, + "result": { + "position": { + "x": 218.88, + "y": 74.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4bdc1e6817064ec58a52ca4075571a29", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "A9" + }, + "result": { + "position": { + "x": 218.88, + "y": 74.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4b937f4828b58db3d508d5235bf80182", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "20c520a886a146e1dca261a83e362cc9", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b8c2c7452e6bbd8b0ad9200d9b067a80", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D12" + }, + "result": { + "position": { + "x": 113.38, + "y": 228.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "696f628ccdb1184c3b8f1ef3b95a4819", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "B9" + }, + "result": { + "position": { + "x": 218.88, + "y": 65.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4af9e66e5dc599fcd866d0015cb4d206", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "B9" + }, + "result": { + "position": { + "x": 218.88, + "y": 65.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8cfe77bb0a42b365569e4e0a97fcc892", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "86a5a1c548a4c65d477d520c4cbb8893", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9c068587c38eef82d453232764a3b501", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E12" + }, + "result": { + "position": { + "x": 113.38, + "y": 219.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6448a1ddde5c758da02b399df66f6b9a", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "C9" + }, + "result": { + "position": { + "x": 218.88, + "y": 56.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8880ffd03efb07de14b5423ee0c90e39", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "C9" + }, + "result": { + "position": { + "x": 218.88, + "y": 56.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "89c66dc65e5d2bd5212295bff15139c1", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7879875b3fea0f901946c59a2fabdc0d", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "13a4c14a1cce964d531d4a86eb749455", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F12" + }, + "result": { + "position": { + "x": 113.38, + "y": 210.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bf1c743c51a543b91314cd13f66f9951", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "D9" + }, + "result": { + "position": { + "x": 218.88, + "y": 47.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3a720b3611927fd2089178d0a6a6b1d3", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "D9" + }, + "result": { + "position": { + "x": 218.88, + "y": 47.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ee9de82481ccad19b4ccaa8e3709a810", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "81f9e5aa9a5f482f233f02db748fa0e9", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e0b649c6b81ff8a11279143a87133f36", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G12" + }, + "result": { + "position": { + "x": 113.38, + "y": 201.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4fcf96796450750f3d7334a2bc7ad110", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "E9" + }, + "result": { + "position": { + "x": 218.88, + "y": 38.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c81e09ae9cd25a7fd5a12e7ae8c45ee6", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "E9" + }, + "result": { + "position": { + "x": 218.88, + "y": 38.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "eeadec0c25424cb023fc3a805629007a", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7be5483be45ddf7827dd2e3bb837e725", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "06a926609178be57fc72d659db43a530", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H12" + }, + "result": { + "position": { + "x": 113.38, + "y": 192.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8effc6c32aefbe9a0f61ed7f9debea25", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "F9" + }, + "result": { + "position": { + "x": 218.88, + "y": 29.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "83aa7e155dc14aca3201f15af45c9d4a", + "notes": [], + "params": { + "flowRate": 92.86, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "F9" + }, + "result": { + "position": { + "x": 218.88, + "y": 29.24, + "z": 2.05 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "165a29e8e1fb302c355928dc20d9bfdb", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bc841b656fa5f0b5dae163f888261c9e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c4a5865101b2bd88186351e6aeb813cd", + "notes": [], + "params": { + "axes": [ + "rightPlunger", + "rightZ" + ] + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [], + "files": [ + { + "name": "OT2_S_v2_20_8_None_PARTIAL_COLUMN_HappyPathMixedTipRacks.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_96_tiprack_300ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_300ul", + "location": { + "slotName": "7" + } + }, + { + "definitionUri": "opentrons/opentrons_96_tiprack_300ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_300ul", + "location": { + "slotName": "8" + } + }, + { + "definitionUri": "opentrons/opentrons_96_wellplate_200ul_pcr_full_skirt/2", + "id": "UUID", + "loadName": "opentrons_96_wellplate_200ul_pcr_full_skirt", + "location": { + "slotName": "2" + } + }, + { + "definitionUri": "opentrons/nest_12_reservoir_15ml/1", + "id": "UUID", + "loadName": "nest_12_reservoir_15ml", + "location": { + "slotName": "1" + } + }, + { + "definitionUri": "opentrons/nest_1_reservoir_290ml/1", + "id": "UUID", + "loadName": "nest_1_reservoir_290ml", + "location": { + "slotName": "3" + } + } + ], + "liquids": [], + "metadata": { + "description": "OT-2 protocol with 1ch and 8ch pipette partial/single tip configurations. Mixing tipracks and using separate tipracks. ", + "protocolName": "Partial Tip with Partial Column and Single Smoke" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p300_multi_gen2" + }, + { + "id": "UUID", + "mount": "right", + "pipetteName": "p300_single_gen2" + } + ], + "result": "ok", + "robotType": "OT-2 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[4ea9d66206][Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_eight_partial_column_no_end].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[4ea9d66206][Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_eight_partial_column_no_end].json new file mode 100644 index 00000000000..90bfa119fb7 --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[4ea9d66206][Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_eight_partial_column_no_end].json @@ -0,0 +1,1260 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "B2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.75, + "zDimension": 99 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 23.9, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons Flex 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_flex_96_tiprack_1000ul", + "quirks": [], + "tipLength": 95.6, + "tipOverlap": 10.5 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 121 + } + }, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.38, + "z": 1.5 + }, + "A10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.38, + "z": 1.5 + }, + "A11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.38, + "z": 1.5 + }, + "A12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.38, + "z": 1.5 + }, + "A2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.38, + "z": 1.5 + }, + "A3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.38, + "z": 1.5 + }, + "A4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.38, + "z": 1.5 + }, + "A5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.38, + "z": 1.5 + }, + "A6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.38, + "z": 1.5 + }, + "A7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.38, + "z": 1.5 + }, + "A8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.38, + "z": 1.5 + }, + "A9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.38, + "z": 1.5 + }, + "B1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.38, + "z": 1.5 + }, + "B10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.38, + "z": 1.5 + }, + "B11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.38, + "z": 1.5 + }, + "B12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.38, + "z": 1.5 + }, + "B2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.38, + "z": 1.5 + }, + "B3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.38, + "z": 1.5 + }, + "B4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.38, + "z": 1.5 + }, + "B5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.38, + "z": 1.5 + }, + "B6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.38, + "z": 1.5 + }, + "B7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.38, + "z": 1.5 + }, + "B8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.38, + "z": 1.5 + }, + "B9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.38, + "z": 1.5 + }, + "C1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.38, + "z": 1.5 + }, + "C10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.38, + "z": 1.5 + }, + "C11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.38, + "z": 1.5 + }, + "C12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.38, + "z": 1.5 + }, + "C2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.38, + "z": 1.5 + }, + "C3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.38, + "z": 1.5 + }, + "C4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.38, + "z": 1.5 + }, + "C5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.38, + "z": 1.5 + }, + "C6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.38, + "z": 1.5 + }, + "C7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.38, + "z": 1.5 + }, + "C8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.38, + "z": 1.5 + }, + "C9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.38, + "z": 1.5 + }, + "D1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.38, + "z": 1.5 + }, + "D10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.38, + "z": 1.5 + }, + "D11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.38, + "z": 1.5 + }, + "D12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.38, + "z": 1.5 + }, + "D2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.38, + "z": 1.5 + }, + "D3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.38, + "z": 1.5 + }, + "D4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.38, + "z": 1.5 + }, + "D5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.38, + "z": 1.5 + }, + "D6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.38, + "z": 1.5 + }, + "D7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.38, + "z": 1.5 + }, + "D8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.38, + "z": 1.5 + }, + "D9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.38, + "z": 1.5 + }, + "E1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.38, + "z": 1.5 + }, + "E10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.38, + "z": 1.5 + }, + "E11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.38, + "z": 1.5 + }, + "E12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.38, + "z": 1.5 + }, + "E2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.38, + "z": 1.5 + }, + "E3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.38, + "z": 1.5 + }, + "E4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.38, + "z": 1.5 + }, + "E5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.38, + "z": 1.5 + }, + "E6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.38, + "z": 1.5 + }, + "E7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.38, + "z": 1.5 + }, + "E8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.38, + "z": 1.5 + }, + "E9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.38, + "z": 1.5 + }, + "F1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.38, + "z": 1.5 + }, + "F10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.38, + "z": 1.5 + }, + "F11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.38, + "z": 1.5 + }, + "F12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.38, + "z": 1.5 + }, + "F2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.38, + "z": 1.5 + }, + "F3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.38, + "z": 1.5 + }, + "F4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.38, + "z": 1.5 + }, + "F5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.38, + "z": 1.5 + }, + "F6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.38, + "z": 1.5 + }, + "F7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.38, + "z": 1.5 + }, + "F8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.38, + "z": 1.5 + }, + "F9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.38, + "z": 1.5 + }, + "G1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.38, + "z": 1.5 + }, + "G10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.38, + "z": 1.5 + }, + "G11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.38, + "z": 1.5 + }, + "G12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.38, + "z": 1.5 + }, + "G2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.38, + "z": 1.5 + }, + "G3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.38, + "z": 1.5 + }, + "G4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.38, + "z": 1.5 + }, + "G5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.38, + "z": 1.5 + }, + "G6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.38, + "z": 1.5 + }, + "G7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.38, + "z": 1.5 + }, + "G8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.38, + "z": 1.5 + }, + "G9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.38, + "z": 1.5 + }, + "H1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.38, + "z": 1.5 + }, + "H10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.38, + "z": 1.5 + }, + "H11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.38, + "z": 1.5 + }, + "H12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.38, + "z": 1.5 + }, + "H2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.38, + "z": 1.5 + }, + "H3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.38, + "z": 1.5 + }, + "H4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.38, + "z": 1.5 + }, + "H5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.38, + "z": 1.5 + }, + "H6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.38, + "z": 1.5 + }, + "H7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.38, + "z": 1.5 + }, + "H8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.38, + "z": 1.5 + }, + "H9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.38, + "z": 1.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_multi_flex", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "ValueError [line 167]: Partial column configurations require the 'end' parameter.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "ValueError: Partial column configurations require the 'end' parameter.", + "errorCode": "4000", + "errorInfo": { + "args": "(\"Partial column configurations require the 'end' parameter.\",)", + "class": "ValueError", + "traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/execution/execute_python.py\", line N, in exec_run\n exec(\"run(__context)\", new_globs)\n\n File \"\", line N, in \n\n File \"Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_eight_partial_column_no_end.py\", line N, in run\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/api_support/util.py\", line N, in _check_version_wrapper\n return decorated_obj(*args, **kwargs)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_api/instrument_context.py\", line N, in configure_nozzle_layout\n validated_end = _check_valid_end_nozzle(validated_start, end)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_api/instrument_context.py\", line N, in _check_valid_end_nozzle\n raise ValueError(\"Partial column configurations require the 'end' parameter.\")\n" + }, + "errorType": "PythonException", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_eight_partial_column_no_end.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_flex_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "B2" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Invalid tip configs that should error" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_multi_flex" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[53db9bf516][Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_eight_partial_column_bottom_left].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[53db9bf516][Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_eight_partial_column_bottom_left].json new file mode 100644 index 00000000000..662d6cf0c4b --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[53db9bf516][Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_eight_partial_column_bottom_left].json @@ -0,0 +1,1296 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "B2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.75, + "zDimension": 99 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 23.9, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons Flex 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_flex_96_tiprack_1000ul", + "quirks": [], + "tipLength": 95.6, + "tipOverlap": 10.5 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 121 + } + }, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.38, + "z": 1.5 + }, + "A10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.38, + "z": 1.5 + }, + "A11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.38, + "z": 1.5 + }, + "A12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.38, + "z": 1.5 + }, + "A2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.38, + "z": 1.5 + }, + "A3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.38, + "z": 1.5 + }, + "A4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.38, + "z": 1.5 + }, + "A5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.38, + "z": 1.5 + }, + "A6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.38, + "z": 1.5 + }, + "A7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.38, + "z": 1.5 + }, + "A8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.38, + "z": 1.5 + }, + "A9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.38, + "z": 1.5 + }, + "B1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.38, + "z": 1.5 + }, + "B10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.38, + "z": 1.5 + }, + "B11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.38, + "z": 1.5 + }, + "B12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.38, + "z": 1.5 + }, + "B2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.38, + "z": 1.5 + }, + "B3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.38, + "z": 1.5 + }, + "B4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.38, + "z": 1.5 + }, + "B5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.38, + "z": 1.5 + }, + "B6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.38, + "z": 1.5 + }, + "B7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.38, + "z": 1.5 + }, + "B8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.38, + "z": 1.5 + }, + "B9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.38, + "z": 1.5 + }, + "C1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.38, + "z": 1.5 + }, + "C10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.38, + "z": 1.5 + }, + "C11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.38, + "z": 1.5 + }, + "C12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.38, + "z": 1.5 + }, + "C2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.38, + "z": 1.5 + }, + "C3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.38, + "z": 1.5 + }, + "C4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.38, + "z": 1.5 + }, + "C5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.38, + "z": 1.5 + }, + "C6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.38, + "z": 1.5 + }, + "C7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.38, + "z": 1.5 + }, + "C8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.38, + "z": 1.5 + }, + "C9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.38, + "z": 1.5 + }, + "D1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.38, + "z": 1.5 + }, + "D10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.38, + "z": 1.5 + }, + "D11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.38, + "z": 1.5 + }, + "D12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.38, + "z": 1.5 + }, + "D2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.38, + "z": 1.5 + }, + "D3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.38, + "z": 1.5 + }, + "D4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.38, + "z": 1.5 + }, + "D5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.38, + "z": 1.5 + }, + "D6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.38, + "z": 1.5 + }, + "D7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.38, + "z": 1.5 + }, + "D8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.38, + "z": 1.5 + }, + "D9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.38, + "z": 1.5 + }, + "E1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.38, + "z": 1.5 + }, + "E10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.38, + "z": 1.5 + }, + "E11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.38, + "z": 1.5 + }, + "E12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.38, + "z": 1.5 + }, + "E2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.38, + "z": 1.5 + }, + "E3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.38, + "z": 1.5 + }, + "E4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.38, + "z": 1.5 + }, + "E5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.38, + "z": 1.5 + }, + "E6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.38, + "z": 1.5 + }, + "E7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.38, + "z": 1.5 + }, + "E8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.38, + "z": 1.5 + }, + "E9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.38, + "z": 1.5 + }, + "F1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.38, + "z": 1.5 + }, + "F10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.38, + "z": 1.5 + }, + "F11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.38, + "z": 1.5 + }, + "F12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.38, + "z": 1.5 + }, + "F2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.38, + "z": 1.5 + }, + "F3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.38, + "z": 1.5 + }, + "F4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.38, + "z": 1.5 + }, + "F5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.38, + "z": 1.5 + }, + "F6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.38, + "z": 1.5 + }, + "F7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.38, + "z": 1.5 + }, + "F8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.38, + "z": 1.5 + }, + "F9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.38, + "z": 1.5 + }, + "G1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.38, + "z": 1.5 + }, + "G10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.38, + "z": 1.5 + }, + "G11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.38, + "z": 1.5 + }, + "G12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.38, + "z": 1.5 + }, + "G2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.38, + "z": 1.5 + }, + "G3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.38, + "z": 1.5 + }, + "G4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.38, + "z": 1.5 + }, + "G5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.38, + "z": 1.5 + }, + "G6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.38, + "z": 1.5 + }, + "G7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.38, + "z": 1.5 + }, + "G8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.38, + "z": 1.5 + }, + "G9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.38, + "z": 1.5 + }, + "H1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.38, + "z": 1.5 + }, + "H10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.38, + "z": 1.5 + }, + "H11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.38, + "z": 1.5 + }, + "H12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.38, + "z": 1.5 + }, + "H2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.38, + "z": 1.5 + }, + "H3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.38, + "z": 1.5 + }, + "H4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.38, + "z": 1.5 + }, + "H5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.38, + "z": 1.5 + }, + "H6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.38, + "z": 1.5 + }, + "H7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.38, + "z": 1.5 + }, + "H8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.38, + "z": 1.5 + }, + "H9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.38, + "z": 1.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_multi_flex", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "error": { + "createdAt": "TIMESTAMP", + "detail": "Attempted Nozzle Configuration does not match any approved map layout for the current pipette.", + "errorCode": "4007", + "errorInfo": {}, + "errorType": "IncompatibleNozzleConfiguration", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + }, + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "backLeftNozzle": "A1", + "frontRightNozzle": "B1", + "primaryNozzle": "A1", + "style": "QUADRANT" + }, + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "failed" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "ProtocolCommandFailedError [line 167]: Error 4000 GENERAL_ERROR (ProtocolCommandFailedError): IncompatibleNozzleConfiguration: Attempted Nozzle Configuration does not match any approved map layout for the current pipette.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "IncompatibleNozzleConfiguration: Attempted Nozzle Configuration does not match any approved map layout for the current pipette.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ProtocolCommandFailedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "Attempted Nozzle Configuration does not match any approved map layout for the current pipette.", + "errorCode": "4007", + "errorInfo": {}, + "errorType": "IncompatibleNozzleConfiguration", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_eight_partial_column_bottom_left.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_flex_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "B2" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Invalid tip configs that should error" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_multi_flex" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[549cc904ac][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_c3_right_edge].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[549cc904ac][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_c3_right_edge].json new file mode 100644 index 00000000000..952985449d9 --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[549cc904ac][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_c3_right_edge].json @@ -0,0 +1,1268 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "C3" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-1000ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 97.47 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_1000ul", + "tipLength": 88, + "tipOverlap": 7.95 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.24, + "z": 9.47 + }, + "A10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.24, + "z": 9.47 + }, + "A11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.24, + "z": 9.47 + }, + "A12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.24, + "z": 9.47 + }, + "A2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.24, + "z": 9.47 + }, + "A3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.24, + "z": 9.47 + }, + "A4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.24, + "z": 9.47 + }, + "A5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.24, + "z": 9.47 + }, + "A6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.24, + "z": 9.47 + }, + "A7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.24, + "z": 9.47 + }, + "A8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.24, + "z": 9.47 + }, + "A9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.24, + "z": 9.47 + }, + "B1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.24, + "z": 9.47 + }, + "B10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.24, + "z": 9.47 + }, + "B11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.24, + "z": 9.47 + }, + "B12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.24, + "z": 9.47 + }, + "B2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.24, + "z": 9.47 + }, + "B3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.24, + "z": 9.47 + }, + "B4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.24, + "z": 9.47 + }, + "B5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.24, + "z": 9.47 + }, + "B6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.24, + "z": 9.47 + }, + "B7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.24, + "z": 9.47 + }, + "B8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.24, + "z": 9.47 + }, + "B9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.24, + "z": 9.47 + }, + "C1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.24, + "z": 9.47 + }, + "C10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.24, + "z": 9.47 + }, + "C11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.24, + "z": 9.47 + }, + "C12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.24, + "z": 9.47 + }, + "C2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.24, + "z": 9.47 + }, + "C3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.24, + "z": 9.47 + }, + "C4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.24, + "z": 9.47 + }, + "C5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.24, + "z": 9.47 + }, + "C6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.24, + "z": 9.47 + }, + "C7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.24, + "z": 9.47 + }, + "C8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.24, + "z": 9.47 + }, + "C9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.24, + "z": 9.47 + }, + "D1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.24, + "z": 9.47 + }, + "D10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.24, + "z": 9.47 + }, + "D11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.24, + "z": 9.47 + }, + "D12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.24, + "z": 9.47 + }, + "D2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.24, + "z": 9.47 + }, + "D3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.24, + "z": 9.47 + }, + "D4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.24, + "z": 9.47 + }, + "D5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.24, + "z": 9.47 + }, + "D6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.24, + "z": 9.47 + }, + "D7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.24, + "z": 9.47 + }, + "D8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.24, + "z": 9.47 + }, + "D9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.24, + "z": 9.47 + }, + "E1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.24, + "z": 9.47 + }, + "E10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.24, + "z": 9.47 + }, + "E11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.24, + "z": 9.47 + }, + "E12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.24, + "z": 9.47 + }, + "E2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.24, + "z": 9.47 + }, + "E3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.24, + "z": 9.47 + }, + "E4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.24, + "z": 9.47 + }, + "E5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.24, + "z": 9.47 + }, + "E6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.24, + "z": 9.47 + }, + "E7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.24, + "z": 9.47 + }, + "E8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.24, + "z": 9.47 + }, + "E9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.24, + "z": 9.47 + }, + "F1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.24, + "z": 9.47 + }, + "F10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.24, + "z": 9.47 + }, + "F11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.24, + "z": 9.47 + }, + "F12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.24, + "z": 9.47 + }, + "F2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.24, + "z": 9.47 + }, + "F3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.24, + "z": 9.47 + }, + "F4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.24, + "z": 9.47 + }, + "F5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.24, + "z": 9.47 + }, + "F6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.24, + "z": 9.47 + }, + "F7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.24, + "z": 9.47 + }, + "F8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.24, + "z": 9.47 + }, + "F9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.24, + "z": 9.47 + }, + "G1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.24, + "z": 9.47 + }, + "G10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.24, + "z": 9.47 + }, + "G11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.24, + "z": 9.47 + }, + "G12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.24, + "z": 9.47 + }, + "G2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.24, + "z": 9.47 + }, + "G3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.24, + "z": 9.47 + }, + "G4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.24, + "z": 9.47 + }, + "G5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.24, + "z": 9.47 + }, + "G6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.24, + "z": 9.47 + }, + "G7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.24, + "z": 9.47 + }, + "G8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.24, + "z": 9.47 + }, + "G9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.24, + "z": 9.47 + }, + "H1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.24, + "z": 9.47 + }, + "H10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.24, + "z": 9.47 + }, + "H11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.24, + "z": 9.47 + }, + "H12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.24, + "z": 9.47 + }, + "H2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.24, + "z": 9.47 + }, + "H3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.24, + "z": 9.47 + }, + "H4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.24, + "z": 9.47 + }, + "H5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.24, + "z": 9.47 + }, + "H6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.24, + "z": 9.47 + }, + "H7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.24, + "z": 9.47 + }, + "H8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.24, + "z": 9.47 + }, + "H9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.24, + "z": 9.47 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A1", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "PartialTipMovementNotAllowedError [line 479]: Error 2004 MOTION_PLANNING_FAILURE (PartialTipMovementNotAllowedError): Requested motion with the A1 nozzle partial configuration is outside of robot bounds for the pipette.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "Requested motion with the A1 nozzle partial configuration is outside of robot bounds for the pipette.", + "errorCode": "2004", + "errorInfo": {}, + "errorType": "PartialTipMovementNotAllowedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_c3_right_edge.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "C3" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Too tall labware on pickup tip" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_96" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[54b0b509cd][OT2_X_v2_20_8_Overrides_InvalidConfigs_Override_eight_partial_column_no_end].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[54b0b509cd][OT2_X_v2_20_8_Overrides_InvalidConfigs_Override_eight_partial_column_no_end].json new file mode 100644 index 00000000000..d28023877a0 --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[54b0b509cd][OT2_X_v2_20_8_Overrides_InvalidConfigs_Override_eight_partial_column_no_end].json @@ -0,0 +1,2414 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_20ul", + "location": { + "slotName": "1" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-10ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 64.69 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 20 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_20ul", + "tipLength": 39.2, + "tipOverlap": 8.25 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 74.24, + "z": 25.49 + }, + "A10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 74.24, + "z": 25.49 + }, + "A11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 74.24, + "z": 25.49 + }, + "A12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 74.24, + "z": 25.49 + }, + "A2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 74.24, + "z": 25.49 + }, + "A3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 74.24, + "z": 25.49 + }, + "A4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 74.24, + "z": 25.49 + }, + "A5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 74.24, + "z": 25.49 + }, + "A6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 74.24, + "z": 25.49 + }, + "A7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 74.24, + "z": 25.49 + }, + "A8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 74.24, + "z": 25.49 + }, + "A9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 74.24, + "z": 25.49 + }, + "B1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 65.24, + "z": 25.49 + }, + "B10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 65.24, + "z": 25.49 + }, + "B11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 65.24, + "z": 25.49 + }, + "B12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 65.24, + "z": 25.49 + }, + "B2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 65.24, + "z": 25.49 + }, + "B3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 65.24, + "z": 25.49 + }, + "B4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 65.24, + "z": 25.49 + }, + "B5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 65.24, + "z": 25.49 + }, + "B6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 65.24, + "z": 25.49 + }, + "B7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 65.24, + "z": 25.49 + }, + "B8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 65.24, + "z": 25.49 + }, + "B9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 65.24, + "z": 25.49 + }, + "C1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 56.24, + "z": 25.49 + }, + "C10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 56.24, + "z": 25.49 + }, + "C11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 56.24, + "z": 25.49 + }, + "C12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 56.24, + "z": 25.49 + }, + "C2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 56.24, + "z": 25.49 + }, + "C3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 56.24, + "z": 25.49 + }, + "C4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 56.24, + "z": 25.49 + }, + "C5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 56.24, + "z": 25.49 + }, + "C6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 56.24, + "z": 25.49 + }, + "C7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 56.24, + "z": 25.49 + }, + "C8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 56.24, + "z": 25.49 + }, + "C9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 56.24, + "z": 25.49 + }, + "D1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 47.24, + "z": 25.49 + }, + "D10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 47.24, + "z": 25.49 + }, + "D11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 47.24, + "z": 25.49 + }, + "D12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 47.24, + "z": 25.49 + }, + "D2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 47.24, + "z": 25.49 + }, + "D3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 47.24, + "z": 25.49 + }, + "D4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 47.24, + "z": 25.49 + }, + "D5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 47.24, + "z": 25.49 + }, + "D6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 47.24, + "z": 25.49 + }, + "D7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 47.24, + "z": 25.49 + }, + "D8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 47.24, + "z": 25.49 + }, + "D9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 47.24, + "z": 25.49 + }, + "E1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 38.24, + "z": 25.49 + }, + "E10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 38.24, + "z": 25.49 + }, + "E11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 38.24, + "z": 25.49 + }, + "E12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 38.24, + "z": 25.49 + }, + "E2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 38.24, + "z": 25.49 + }, + "E3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 38.24, + "z": 25.49 + }, + "E4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 38.24, + "z": 25.49 + }, + "E5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 38.24, + "z": 25.49 + }, + "E6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 38.24, + "z": 25.49 + }, + "E7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 38.24, + "z": 25.49 + }, + "E8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 38.24, + "z": 25.49 + }, + "E9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 38.24, + "z": 25.49 + }, + "F1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 29.24, + "z": 25.49 + }, + "F10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 29.24, + "z": 25.49 + }, + "F11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 29.24, + "z": 25.49 + }, + "F12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 29.24, + "z": 25.49 + }, + "F2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 29.24, + "z": 25.49 + }, + "F3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 29.24, + "z": 25.49 + }, + "F4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 29.24, + "z": 25.49 + }, + "F5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 29.24, + "z": 25.49 + }, + "F6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 29.24, + "z": 25.49 + }, + "F7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 29.24, + "z": 25.49 + }, + "F8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 29.24, + "z": 25.49 + }, + "F9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 29.24, + "z": 25.49 + }, + "G1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 20.24, + "z": 25.49 + }, + "G10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 20.24, + "z": 25.49 + }, + "G11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 20.24, + "z": 25.49 + }, + "G12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 20.24, + "z": 25.49 + }, + "G2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 20.24, + "z": 25.49 + }, + "G3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 20.24, + "z": 25.49 + }, + "G4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 20.24, + "z": 25.49 + }, + "G5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 20.24, + "z": 25.49 + }, + "G6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 20.24, + "z": 25.49 + }, + "G7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 20.24, + "z": 25.49 + }, + "G8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 20.24, + "z": 25.49 + }, + "G9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 20.24, + "z": 25.49 + }, + "H1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 11.24, + "z": 25.49 + }, + "H10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 11.24, + "z": 25.49 + }, + "H11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 11.24, + "z": 25.49 + }, + "H12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 11.24, + "z": 25.49 + }, + "H2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 11.24, + "z": 25.49 + }, + "H3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 11.24, + "z": 25.49 + }, + "H4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 11.24, + "z": 25.49 + }, + "H5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 11.24, + "z": 25.49 + }, + "H6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 11.24, + "z": 25.49 + }, + "H7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 11.24, + "z": 25.49 + }, + "H8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 11.24, + "z": 25.49 + }, + "H9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 11.24, + "z": 25.49 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50de88d471ad3910c29207fb6df4502e", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_300ul", + "location": { + "slotName": "2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-300ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 64.49 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 300 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_300ul", + "tipLength": 59.3, + "tipOverlap": 7.47 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 74.24, + "z": 5.39 + }, + "A10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 74.24, + "z": 5.39 + }, + "A11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 74.24, + "z": 5.39 + }, + "A12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 74.24, + "z": 5.39 + }, + "A2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 74.24, + "z": 5.39 + }, + "A3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 74.24, + "z": 5.39 + }, + "A4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 74.24, + "z": 5.39 + }, + "A5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 74.24, + "z": 5.39 + }, + "A6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 74.24, + "z": 5.39 + }, + "A7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 74.24, + "z": 5.39 + }, + "A8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 74.24, + "z": 5.39 + }, + "A9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 74.24, + "z": 5.39 + }, + "B1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 65.24, + "z": 5.39 + }, + "B10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 65.24, + "z": 5.39 + }, + "B11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 65.24, + "z": 5.39 + }, + "B12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 65.24, + "z": 5.39 + }, + "B2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 65.24, + "z": 5.39 + }, + "B3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 65.24, + "z": 5.39 + }, + "B4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 65.24, + "z": 5.39 + }, + "B5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 65.24, + "z": 5.39 + }, + "B6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 65.24, + "z": 5.39 + }, + "B7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 65.24, + "z": 5.39 + }, + "B8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 65.24, + "z": 5.39 + }, + "B9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 65.24, + "z": 5.39 + }, + "C1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 56.24, + "z": 5.39 + }, + "C10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 56.24, + "z": 5.39 + }, + "C11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 56.24, + "z": 5.39 + }, + "C12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 56.24, + "z": 5.39 + }, + "C2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 56.24, + "z": 5.39 + }, + "C3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 56.24, + "z": 5.39 + }, + "C4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 56.24, + "z": 5.39 + }, + "C5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 56.24, + "z": 5.39 + }, + "C6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 56.24, + "z": 5.39 + }, + "C7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 56.24, + "z": 5.39 + }, + "C8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 56.24, + "z": 5.39 + }, + "C9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 56.24, + "z": 5.39 + }, + "D1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 47.24, + "z": 5.39 + }, + "D10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 47.24, + "z": 5.39 + }, + "D11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 47.24, + "z": 5.39 + }, + "D12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 47.24, + "z": 5.39 + }, + "D2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 47.24, + "z": 5.39 + }, + "D3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 47.24, + "z": 5.39 + }, + "D4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 47.24, + "z": 5.39 + }, + "D5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 47.24, + "z": 5.39 + }, + "D6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 47.24, + "z": 5.39 + }, + "D7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 47.24, + "z": 5.39 + }, + "D8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 47.24, + "z": 5.39 + }, + "D9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 47.24, + "z": 5.39 + }, + "E1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 38.24, + "z": 5.39 + }, + "E10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 38.24, + "z": 5.39 + }, + "E11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 38.24, + "z": 5.39 + }, + "E12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 38.24, + "z": 5.39 + }, + "E2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 38.24, + "z": 5.39 + }, + "E3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 38.24, + "z": 5.39 + }, + "E4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 38.24, + "z": 5.39 + }, + "E5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 38.24, + "z": 5.39 + }, + "E6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 38.24, + "z": 5.39 + }, + "E7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 38.24, + "z": 5.39 + }, + "E8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 38.24, + "z": 5.39 + }, + "E9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 38.24, + "z": 5.39 + }, + "F1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 29.24, + "z": 5.39 + }, + "F10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 29.24, + "z": 5.39 + }, + "F11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 29.24, + "z": 5.39 + }, + "F12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 29.24, + "z": 5.39 + }, + "F2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 29.24, + "z": 5.39 + }, + "F3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 29.24, + "z": 5.39 + }, + "F4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 29.24, + "z": 5.39 + }, + "F5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 29.24, + "z": 5.39 + }, + "F6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 29.24, + "z": 5.39 + }, + "F7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 29.24, + "z": 5.39 + }, + "F8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 29.24, + "z": 5.39 + }, + "F9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 29.24, + "z": 5.39 + }, + "G1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 20.24, + "z": 5.39 + }, + "G10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 20.24, + "z": 5.39 + }, + "G11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 20.24, + "z": 5.39 + }, + "G12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 20.24, + "z": 5.39 + }, + "G2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 20.24, + "z": 5.39 + }, + "G3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 20.24, + "z": 5.39 + }, + "G4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 20.24, + "z": 5.39 + }, + "G5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 20.24, + "z": 5.39 + }, + "G6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 20.24, + "z": 5.39 + }, + "G7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 20.24, + "z": 5.39 + }, + "G8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 20.24, + "z": 5.39 + }, + "G9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 20.24, + "z": 5.39 + }, + "H1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 11.24, + "z": 5.39 + }, + "H10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 11.24, + "z": 5.39 + }, + "H11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 11.24, + "z": 5.39 + }, + "H12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 11.24, + "z": 5.39 + }, + "H2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 11.24, + "z": 5.39 + }, + "H3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 11.24, + "z": 5.39 + }, + "H4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 11.24, + "z": 5.39 + }, + "H5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 11.24, + "z": 5.39 + }, + "H6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 11.24, + "z": 5.39 + }, + "H7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 11.24, + "z": 5.39 + }, + "H8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 11.24, + "z": 5.39 + }, + "H9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 11.24, + "z": 5.39 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "54fddab1eb921f6e1d3aa7e96d2ac307", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p20_multi_gen2", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "ValueError [line 134]: Partial column configurations require the 'end' parameter.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "ValueError: Partial column configurations require the 'end' parameter.", + "errorCode": "4000", + "errorInfo": { + "args": "(\"Partial column configurations require the 'end' parameter.\",)", + "class": "ValueError", + "traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/execution/execute_python.py\", line N, in exec_run\n exec(\"run(__context)\", new_globs)\n\n File \"\", line N, in \n\n File \"OT2_X_v2_20_8_Overrides_InvalidConfigs_Override_eight_partial_column_no_end.py\", line N, in run\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/api_support/util.py\", line N, in _check_version_wrapper\n return decorated_obj(*args, **kwargs)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_api/instrument_context.py\", line N, in configure_nozzle_layout\n validated_end = _check_valid_end_nozzle(validated_start, end)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_api/instrument_context.py\", line N, in _check_valid_end_nozzle\n raise ValueError(\"Partial column configurations require the 'end' parameter.\")\n" + }, + "errorType": "PythonException", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ], + "files": [ + { + "name": "OT2_X_v2_20_8_Overrides_InvalidConfigs_Override_eight_partial_column_no_end.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_96_tiprack_20ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_20ul", + "location": { + "slotName": "1" + } + }, + { + "definitionUri": "opentrons/opentrons_96_tiprack_300ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_300ul", + "location": { + "slotName": "2" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Invalid tip configs that should error" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p20_multi_gen2" + } + ], + "result": "not-ok", + "robotType": "OT-2 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[5edb9b4de3][Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_ninety_six_partial_column_2].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[5edb9b4de3][Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_ninety_six_partial_column_2].json new file mode 100644 index 00000000000..a107fa87e60 --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[5edb9b4de3][Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_ninety_six_partial_column_2].json @@ -0,0 +1,1260 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "B2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.75, + "zDimension": 99 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 23.9, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons Flex 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_flex_96_tiprack_1000ul", + "quirks": [], + "tipLength": 95.6, + "tipOverlap": 10.5 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 121 + } + }, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.38, + "z": 1.5 + }, + "A10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.38, + "z": 1.5 + }, + "A11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.38, + "z": 1.5 + }, + "A12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.38, + "z": 1.5 + }, + "A2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.38, + "z": 1.5 + }, + "A3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.38, + "z": 1.5 + }, + "A4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.38, + "z": 1.5 + }, + "A5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.38, + "z": 1.5 + }, + "A6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.38, + "z": 1.5 + }, + "A7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.38, + "z": 1.5 + }, + "A8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.38, + "z": 1.5 + }, + "A9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.38, + "z": 1.5 + }, + "B1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.38, + "z": 1.5 + }, + "B10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.38, + "z": 1.5 + }, + "B11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.38, + "z": 1.5 + }, + "B12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.38, + "z": 1.5 + }, + "B2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.38, + "z": 1.5 + }, + "B3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.38, + "z": 1.5 + }, + "B4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.38, + "z": 1.5 + }, + "B5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.38, + "z": 1.5 + }, + "B6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.38, + "z": 1.5 + }, + "B7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.38, + "z": 1.5 + }, + "B8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.38, + "z": 1.5 + }, + "B9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.38, + "z": 1.5 + }, + "C1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.38, + "z": 1.5 + }, + "C10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.38, + "z": 1.5 + }, + "C11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.38, + "z": 1.5 + }, + "C12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.38, + "z": 1.5 + }, + "C2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.38, + "z": 1.5 + }, + "C3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.38, + "z": 1.5 + }, + "C4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.38, + "z": 1.5 + }, + "C5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.38, + "z": 1.5 + }, + "C6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.38, + "z": 1.5 + }, + "C7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.38, + "z": 1.5 + }, + "C8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.38, + "z": 1.5 + }, + "C9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.38, + "z": 1.5 + }, + "D1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.38, + "z": 1.5 + }, + "D10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.38, + "z": 1.5 + }, + "D11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.38, + "z": 1.5 + }, + "D12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.38, + "z": 1.5 + }, + "D2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.38, + "z": 1.5 + }, + "D3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.38, + "z": 1.5 + }, + "D4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.38, + "z": 1.5 + }, + "D5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.38, + "z": 1.5 + }, + "D6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.38, + "z": 1.5 + }, + "D7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.38, + "z": 1.5 + }, + "D8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.38, + "z": 1.5 + }, + "D9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.38, + "z": 1.5 + }, + "E1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.38, + "z": 1.5 + }, + "E10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.38, + "z": 1.5 + }, + "E11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.38, + "z": 1.5 + }, + "E12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.38, + "z": 1.5 + }, + "E2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.38, + "z": 1.5 + }, + "E3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.38, + "z": 1.5 + }, + "E4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.38, + "z": 1.5 + }, + "E5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.38, + "z": 1.5 + }, + "E6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.38, + "z": 1.5 + }, + "E7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.38, + "z": 1.5 + }, + "E8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.38, + "z": 1.5 + }, + "E9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.38, + "z": 1.5 + }, + "F1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.38, + "z": 1.5 + }, + "F10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.38, + "z": 1.5 + }, + "F11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.38, + "z": 1.5 + }, + "F12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.38, + "z": 1.5 + }, + "F2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.38, + "z": 1.5 + }, + "F3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.38, + "z": 1.5 + }, + "F4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.38, + "z": 1.5 + }, + "F5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.38, + "z": 1.5 + }, + "F6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.38, + "z": 1.5 + }, + "F7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.38, + "z": 1.5 + }, + "F8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.38, + "z": 1.5 + }, + "F9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.38, + "z": 1.5 + }, + "G1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.38, + "z": 1.5 + }, + "G10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.38, + "z": 1.5 + }, + "G11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.38, + "z": 1.5 + }, + "G12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.38, + "z": 1.5 + }, + "G2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.38, + "z": 1.5 + }, + "G3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.38, + "z": 1.5 + }, + "G4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.38, + "z": 1.5 + }, + "G5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.38, + "z": 1.5 + }, + "G6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.38, + "z": 1.5 + }, + "G7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.38, + "z": 1.5 + }, + "G8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.38, + "z": 1.5 + }, + "G9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.38, + "z": 1.5 + }, + "H1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.38, + "z": 1.5 + }, + "H10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.38, + "z": 1.5 + }, + "H11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.38, + "z": 1.5 + }, + "H12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.38, + "z": 1.5 + }, + "H2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.38, + "z": 1.5 + }, + "H3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.38, + "z": 1.5 + }, + "H4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.38, + "z": 1.5 + }, + "H5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.38, + "z": 1.5 + }, + "H6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.38, + "z": 1.5 + }, + "H7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.38, + "z": 1.5 + }, + "H8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.38, + "z": 1.5 + }, + "H9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.38, + "z": 1.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "ValueError [line 167]: Partial column configuration is only supported on 8-Channel pipettes.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "ValueError: Partial column configuration is only supported on 8-Channel pipettes.", + "errorCode": "4000", + "errorInfo": { + "args": "('Partial column configuration is only supported on 8-Channel pipettes.',)", + "class": "ValueError", + "traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/execution/execute_python.py\", line N, in exec_run\n exec(\"run(__context)\", new_globs)\n\n File \"\", line N, in \n\n File \"Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_ninety_six_partial_column_2.py\", line N, in run\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/api_support/util.py\", line N, in _check_version_wrapper\n return decorated_obj(*args, **kwargs)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_api/instrument_context.py\", line N, in configure_nozzle_layout\n self._raise_if_configuration_not_supported_by_pipette(style)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_api/instrument_context.py\", line N, in _raise_if_configuration_not_supported_by_pipette\n raise ValueError(\n" + }, + "errorType": "PythonException", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_ninety_six_partial_column_2.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_flex_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "B2" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Invalid tip configs that should error" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_96" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[6122c72996][Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_ninety_six_partial_column_1].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[6122c72996][Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_ninety_six_partial_column_1].json new file mode 100644 index 00000000000..1dcac6e453a --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[6122c72996][Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_ninety_six_partial_column_1].json @@ -0,0 +1,1260 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "B2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.75, + "zDimension": 99 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 23.9, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons Flex 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_flex_96_tiprack_1000ul", + "quirks": [], + "tipLength": 95.6, + "tipOverlap": 10.5 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 121 + } + }, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.38, + "z": 1.5 + }, + "A10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.38, + "z": 1.5 + }, + "A11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.38, + "z": 1.5 + }, + "A12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.38, + "z": 1.5 + }, + "A2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.38, + "z": 1.5 + }, + "A3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.38, + "z": 1.5 + }, + "A4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.38, + "z": 1.5 + }, + "A5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.38, + "z": 1.5 + }, + "A6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.38, + "z": 1.5 + }, + "A7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.38, + "z": 1.5 + }, + "A8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.38, + "z": 1.5 + }, + "A9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.38, + "z": 1.5 + }, + "B1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.38, + "z": 1.5 + }, + "B10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.38, + "z": 1.5 + }, + "B11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.38, + "z": 1.5 + }, + "B12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.38, + "z": 1.5 + }, + "B2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.38, + "z": 1.5 + }, + "B3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.38, + "z": 1.5 + }, + "B4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.38, + "z": 1.5 + }, + "B5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.38, + "z": 1.5 + }, + "B6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.38, + "z": 1.5 + }, + "B7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.38, + "z": 1.5 + }, + "B8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.38, + "z": 1.5 + }, + "B9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.38, + "z": 1.5 + }, + "C1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.38, + "z": 1.5 + }, + "C10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.38, + "z": 1.5 + }, + "C11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.38, + "z": 1.5 + }, + "C12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.38, + "z": 1.5 + }, + "C2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.38, + "z": 1.5 + }, + "C3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.38, + "z": 1.5 + }, + "C4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.38, + "z": 1.5 + }, + "C5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.38, + "z": 1.5 + }, + "C6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.38, + "z": 1.5 + }, + "C7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.38, + "z": 1.5 + }, + "C8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.38, + "z": 1.5 + }, + "C9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.38, + "z": 1.5 + }, + "D1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.38, + "z": 1.5 + }, + "D10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.38, + "z": 1.5 + }, + "D11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.38, + "z": 1.5 + }, + "D12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.38, + "z": 1.5 + }, + "D2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.38, + "z": 1.5 + }, + "D3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.38, + "z": 1.5 + }, + "D4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.38, + "z": 1.5 + }, + "D5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.38, + "z": 1.5 + }, + "D6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.38, + "z": 1.5 + }, + "D7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.38, + "z": 1.5 + }, + "D8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.38, + "z": 1.5 + }, + "D9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.38, + "z": 1.5 + }, + "E1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.38, + "z": 1.5 + }, + "E10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.38, + "z": 1.5 + }, + "E11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.38, + "z": 1.5 + }, + "E12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.38, + "z": 1.5 + }, + "E2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.38, + "z": 1.5 + }, + "E3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.38, + "z": 1.5 + }, + "E4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.38, + "z": 1.5 + }, + "E5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.38, + "z": 1.5 + }, + "E6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.38, + "z": 1.5 + }, + "E7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.38, + "z": 1.5 + }, + "E8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.38, + "z": 1.5 + }, + "E9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.38, + "z": 1.5 + }, + "F1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.38, + "z": 1.5 + }, + "F10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.38, + "z": 1.5 + }, + "F11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.38, + "z": 1.5 + }, + "F12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.38, + "z": 1.5 + }, + "F2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.38, + "z": 1.5 + }, + "F3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.38, + "z": 1.5 + }, + "F4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.38, + "z": 1.5 + }, + "F5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.38, + "z": 1.5 + }, + "F6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.38, + "z": 1.5 + }, + "F7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.38, + "z": 1.5 + }, + "F8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.38, + "z": 1.5 + }, + "F9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.38, + "z": 1.5 + }, + "G1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.38, + "z": 1.5 + }, + "G10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.38, + "z": 1.5 + }, + "G11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.38, + "z": 1.5 + }, + "G12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.38, + "z": 1.5 + }, + "G2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.38, + "z": 1.5 + }, + "G3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.38, + "z": 1.5 + }, + "G4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.38, + "z": 1.5 + }, + "G5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.38, + "z": 1.5 + }, + "G6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.38, + "z": 1.5 + }, + "G7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.38, + "z": 1.5 + }, + "G8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.38, + "z": 1.5 + }, + "G9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.38, + "z": 1.5 + }, + "H1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.38, + "z": 1.5 + }, + "H10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.38, + "z": 1.5 + }, + "H11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.38, + "z": 1.5 + }, + "H12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.38, + "z": 1.5 + }, + "H2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.38, + "z": 1.5 + }, + "H3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.38, + "z": 1.5 + }, + "H4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.38, + "z": 1.5 + }, + "H5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.38, + "z": 1.5 + }, + "H6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.38, + "z": 1.5 + }, + "H7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.38, + "z": 1.5 + }, + "H8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.38, + "z": 1.5 + }, + "H9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.38, + "z": 1.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "ValueError [line 167]: Partial column configuration is only supported on 8-Channel pipettes.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "ValueError: Partial column configuration is only supported on 8-Channel pipettes.", + "errorCode": "4000", + "errorInfo": { + "args": "('Partial column configuration is only supported on 8-Channel pipettes.',)", + "class": "ValueError", + "traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/execution/execute_python.py\", line N, in exec_run\n exec(\"run(__context)\", new_globs)\n\n File \"\", line N, in \n\n File \"Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_ninety_six_partial_column_1.py\", line N, in run\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/api_support/util.py\", line N, in _check_version_wrapper\n return decorated_obj(*args, **kwargs)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_api/instrument_context.py\", line N, in configure_nozzle_layout\n self._raise_if_configuration_not_supported_by_pipette(style)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_api/instrument_context.py\", line N, in _raise_if_configuration_not_supported_by_pipette\n raise ValueError(\n" + }, + "errorType": "PythonException", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_ninety_six_partial_column_1.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_flex_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "B2" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Invalid tip configs that should error" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_96" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[675d2c2562][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_south_east].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[675d2c2562][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_south_east].json new file mode 100644 index 00000000000..1bf35620512 --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[675d2c2562][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_south_east].json @@ -0,0 +1,1500 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "C2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-1000ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 97.47 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_1000ul", + "tipLength": 88, + "tipOverlap": 7.95 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.24, + "z": 9.47 + }, + "A10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.24, + "z": 9.47 + }, + "A11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.24, + "z": 9.47 + }, + "A12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.24, + "z": 9.47 + }, + "A2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.24, + "z": 9.47 + }, + "A3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.24, + "z": 9.47 + }, + "A4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.24, + "z": 9.47 + }, + "A5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.24, + "z": 9.47 + }, + "A6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.24, + "z": 9.47 + }, + "A7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.24, + "z": 9.47 + }, + "A8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.24, + "z": 9.47 + }, + "A9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.24, + "z": 9.47 + }, + "B1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.24, + "z": 9.47 + }, + "B10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.24, + "z": 9.47 + }, + "B11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.24, + "z": 9.47 + }, + "B12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.24, + "z": 9.47 + }, + "B2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.24, + "z": 9.47 + }, + "B3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.24, + "z": 9.47 + }, + "B4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.24, + "z": 9.47 + }, + "B5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.24, + "z": 9.47 + }, + "B6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.24, + "z": 9.47 + }, + "B7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.24, + "z": 9.47 + }, + "B8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.24, + "z": 9.47 + }, + "B9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.24, + "z": 9.47 + }, + "C1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.24, + "z": 9.47 + }, + "C10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.24, + "z": 9.47 + }, + "C11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.24, + "z": 9.47 + }, + "C12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.24, + "z": 9.47 + }, + "C2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.24, + "z": 9.47 + }, + "C3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.24, + "z": 9.47 + }, + "C4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.24, + "z": 9.47 + }, + "C5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.24, + "z": 9.47 + }, + "C6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.24, + "z": 9.47 + }, + "C7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.24, + "z": 9.47 + }, + "C8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.24, + "z": 9.47 + }, + "C9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.24, + "z": 9.47 + }, + "D1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.24, + "z": 9.47 + }, + "D10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.24, + "z": 9.47 + }, + "D11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.24, + "z": 9.47 + }, + "D12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.24, + "z": 9.47 + }, + "D2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.24, + "z": 9.47 + }, + "D3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.24, + "z": 9.47 + }, + "D4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.24, + "z": 9.47 + }, + "D5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.24, + "z": 9.47 + }, + "D6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.24, + "z": 9.47 + }, + "D7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.24, + "z": 9.47 + }, + "D8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.24, + "z": 9.47 + }, + "D9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.24, + "z": 9.47 + }, + "E1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.24, + "z": 9.47 + }, + "E10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.24, + "z": 9.47 + }, + "E11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.24, + "z": 9.47 + }, + "E12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.24, + "z": 9.47 + }, + "E2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.24, + "z": 9.47 + }, + "E3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.24, + "z": 9.47 + }, + "E4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.24, + "z": 9.47 + }, + "E5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.24, + "z": 9.47 + }, + "E6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.24, + "z": 9.47 + }, + "E7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.24, + "z": 9.47 + }, + "E8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.24, + "z": 9.47 + }, + "E9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.24, + "z": 9.47 + }, + "F1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.24, + "z": 9.47 + }, + "F10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.24, + "z": 9.47 + }, + "F11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.24, + "z": 9.47 + }, + "F12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.24, + "z": 9.47 + }, + "F2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.24, + "z": 9.47 + }, + "F3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.24, + "z": 9.47 + }, + "F4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.24, + "z": 9.47 + }, + "F5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.24, + "z": 9.47 + }, + "F6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.24, + "z": 9.47 + }, + "F7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.24, + "z": 9.47 + }, + "F8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.24, + "z": 9.47 + }, + "F9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.24, + "z": 9.47 + }, + "G1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.24, + "z": 9.47 + }, + "G10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.24, + "z": 9.47 + }, + "G11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.24, + "z": 9.47 + }, + "G12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.24, + "z": 9.47 + }, + "G2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.24, + "z": 9.47 + }, + "G3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.24, + "z": 9.47 + }, + "G4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.24, + "z": 9.47 + }, + "G5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.24, + "z": 9.47 + }, + "G6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.24, + "z": 9.47 + }, + "G7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.24, + "z": 9.47 + }, + "G8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.24, + "z": 9.47 + }, + "G9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.24, + "z": 9.47 + }, + "H1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.24, + "z": 9.47 + }, + "H10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.24, + "z": 9.47 + }, + "H11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.24, + "z": 9.47 + }, + "H12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.24, + "z": 9.47 + }, + "H2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.24, + "z": 9.47 + }, + "H3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.24, + "z": 9.47 + }, + "H4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.24, + "z": 9.47 + }, + "H5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.24, + "z": 9.47 + }, + "H6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.24, + "z": 9.47 + }, + "H7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.24, + "z": 9.47 + }, + "H8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.24, + "z": 9.47 + }, + "H9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.24, + "z": 9.47 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A1", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "691afd54dfa7982fb89e5f77c763bfd4", + "notes": [], + "params": { + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "D3" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 124.35 + }, + "gripperOffsets": {}, + "groups": [ + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352095", + "352096", + "352097", + "352099", + "352196" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 6x15 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A2", + "B1", + "B2", + "C1", + "C2" + ] + }, + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352070", + "352098" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 4x50 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A3", + "A4", + "B3", + "B4" + ] + } + ], + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Opentrons 10 Tube Rack with Falcon 4x50 mL, 6x15 mL Conical", + "displayVolumeUnits": "mL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1" + ], + [ + "A2", + "B2", + "C2" + ], + [ + "A3", + "B3" + ], + [ + "A4", + "B4" + ] + ], + "parameters": { + "format": "irregular", + "isMagneticModuleCompatible": false, + "isTiprack": false, + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical" + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 67.75, + "z": 6.85 + }, + "A2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 67.75, + "z": 6.85 + }, + "A3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 60.25, + "z": 7.3 + }, + "A4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 60.25, + "z": 7.3 + }, + "B1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 42.75, + "z": 6.85 + }, + "B2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 42.75, + "z": 6.85 + }, + "B3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 25.25, + "z": 7.3 + }, + "B4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 25.25, + "z": 7.3 + }, + "C1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 17.75, + "z": 6.85 + }, + "C2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 17.75, + "z": 6.85 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "PartialTipMovementNotAllowedError [line 479]: Error 2004 MOTION_PLANNING_FAILURE (PartialTipMovementNotAllowedError): Moving to Opentrons OT-2 96 Tip Rack 1000 µL in slot C2 with A1 nozzle partial configuration will result in collision with items in deck slot D3.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "Moving to Opentrons OT-2 96 Tip Rack 1000 µL in slot C2 with A1 nozzle partial configuration will result in collision with items in deck slot D3.", + "errorCode": "2004", + "errorInfo": {}, + "errorType": "PartialTipMovementNotAllowedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_south_east.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "C2" + } + }, + { + "definitionUri": "opentrons/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/1", + "id": "UUID", + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "D3" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Too tall labware on pickup tip" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_96" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[68614da0b3][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_east].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[68614da0b3][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_east].json new file mode 100644 index 00000000000..b2ec113fe4e --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[68614da0b3][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_east].json @@ -0,0 +1,1500 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "C2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-1000ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 97.47 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_1000ul", + "tipLength": 88, + "tipOverlap": 7.95 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.24, + "z": 9.47 + }, + "A10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.24, + "z": 9.47 + }, + "A11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.24, + "z": 9.47 + }, + "A12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.24, + "z": 9.47 + }, + "A2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.24, + "z": 9.47 + }, + "A3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.24, + "z": 9.47 + }, + "A4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.24, + "z": 9.47 + }, + "A5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.24, + "z": 9.47 + }, + "A6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.24, + "z": 9.47 + }, + "A7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.24, + "z": 9.47 + }, + "A8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.24, + "z": 9.47 + }, + "A9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.24, + "z": 9.47 + }, + "B1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.24, + "z": 9.47 + }, + "B10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.24, + "z": 9.47 + }, + "B11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.24, + "z": 9.47 + }, + "B12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.24, + "z": 9.47 + }, + "B2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.24, + "z": 9.47 + }, + "B3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.24, + "z": 9.47 + }, + "B4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.24, + "z": 9.47 + }, + "B5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.24, + "z": 9.47 + }, + "B6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.24, + "z": 9.47 + }, + "B7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.24, + "z": 9.47 + }, + "B8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.24, + "z": 9.47 + }, + "B9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.24, + "z": 9.47 + }, + "C1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.24, + "z": 9.47 + }, + "C10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.24, + "z": 9.47 + }, + "C11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.24, + "z": 9.47 + }, + "C12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.24, + "z": 9.47 + }, + "C2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.24, + "z": 9.47 + }, + "C3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.24, + "z": 9.47 + }, + "C4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.24, + "z": 9.47 + }, + "C5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.24, + "z": 9.47 + }, + "C6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.24, + "z": 9.47 + }, + "C7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.24, + "z": 9.47 + }, + "C8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.24, + "z": 9.47 + }, + "C9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.24, + "z": 9.47 + }, + "D1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.24, + "z": 9.47 + }, + "D10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.24, + "z": 9.47 + }, + "D11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.24, + "z": 9.47 + }, + "D12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.24, + "z": 9.47 + }, + "D2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.24, + "z": 9.47 + }, + "D3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.24, + "z": 9.47 + }, + "D4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.24, + "z": 9.47 + }, + "D5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.24, + "z": 9.47 + }, + "D6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.24, + "z": 9.47 + }, + "D7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.24, + "z": 9.47 + }, + "D8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.24, + "z": 9.47 + }, + "D9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.24, + "z": 9.47 + }, + "E1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.24, + "z": 9.47 + }, + "E10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.24, + "z": 9.47 + }, + "E11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.24, + "z": 9.47 + }, + "E12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.24, + "z": 9.47 + }, + "E2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.24, + "z": 9.47 + }, + "E3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.24, + "z": 9.47 + }, + "E4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.24, + "z": 9.47 + }, + "E5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.24, + "z": 9.47 + }, + "E6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.24, + "z": 9.47 + }, + "E7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.24, + "z": 9.47 + }, + "E8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.24, + "z": 9.47 + }, + "E9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.24, + "z": 9.47 + }, + "F1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.24, + "z": 9.47 + }, + "F10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.24, + "z": 9.47 + }, + "F11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.24, + "z": 9.47 + }, + "F12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.24, + "z": 9.47 + }, + "F2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.24, + "z": 9.47 + }, + "F3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.24, + "z": 9.47 + }, + "F4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.24, + "z": 9.47 + }, + "F5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.24, + "z": 9.47 + }, + "F6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.24, + "z": 9.47 + }, + "F7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.24, + "z": 9.47 + }, + "F8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.24, + "z": 9.47 + }, + "F9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.24, + "z": 9.47 + }, + "G1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.24, + "z": 9.47 + }, + "G10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.24, + "z": 9.47 + }, + "G11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.24, + "z": 9.47 + }, + "G12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.24, + "z": 9.47 + }, + "G2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.24, + "z": 9.47 + }, + "G3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.24, + "z": 9.47 + }, + "G4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.24, + "z": 9.47 + }, + "G5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.24, + "z": 9.47 + }, + "G6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.24, + "z": 9.47 + }, + "G7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.24, + "z": 9.47 + }, + "G8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.24, + "z": 9.47 + }, + "G9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.24, + "z": 9.47 + }, + "H1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.24, + "z": 9.47 + }, + "H10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.24, + "z": 9.47 + }, + "H11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.24, + "z": 9.47 + }, + "H12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.24, + "z": 9.47 + }, + "H2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.24, + "z": 9.47 + }, + "H3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.24, + "z": 9.47 + }, + "H4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.24, + "z": 9.47 + }, + "H5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.24, + "z": 9.47 + }, + "H6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.24, + "z": 9.47 + }, + "H7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.24, + "z": 9.47 + }, + "H8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.24, + "z": 9.47 + }, + "H9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.24, + "z": 9.47 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A1", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "691afd54dfa7982fb89e5f77c763bfd4", + "notes": [], + "params": { + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "C3" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 124.35 + }, + "gripperOffsets": {}, + "groups": [ + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352095", + "352096", + "352097", + "352099", + "352196" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 6x15 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A2", + "B1", + "B2", + "C1", + "C2" + ] + }, + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352070", + "352098" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 4x50 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A3", + "A4", + "B3", + "B4" + ] + } + ], + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Opentrons 10 Tube Rack with Falcon 4x50 mL, 6x15 mL Conical", + "displayVolumeUnits": "mL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1" + ], + [ + "A2", + "B2", + "C2" + ], + [ + "A3", + "B3" + ], + [ + "A4", + "B4" + ] + ], + "parameters": { + "format": "irregular", + "isMagneticModuleCompatible": false, + "isTiprack": false, + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical" + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 67.75, + "z": 6.85 + }, + "A2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 67.75, + "z": 6.85 + }, + "A3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 60.25, + "z": 7.3 + }, + "A4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 60.25, + "z": 7.3 + }, + "B1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 42.75, + "z": 6.85 + }, + "B2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 42.75, + "z": 6.85 + }, + "B3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 25.25, + "z": 7.3 + }, + "B4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 25.25, + "z": 7.3 + }, + "C1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 17.75, + "z": 6.85 + }, + "C2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 17.75, + "z": 6.85 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "PartialTipMovementNotAllowedError [line 479]: Error 2004 MOTION_PLANNING_FAILURE (PartialTipMovementNotAllowedError): Moving to Opentrons OT-2 96 Tip Rack 1000 µL in slot C2 with A1 nozzle partial configuration will result in collision with items in deck slot C3.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "Moving to Opentrons OT-2 96 Tip Rack 1000 µL in slot C2 with A1 nozzle partial configuration will result in collision with items in deck slot C3.", + "errorCode": "2004", + "errorInfo": {}, + "errorType": "PartialTipMovementNotAllowedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_east.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "C2" + } + }, + { + "definitionUri": "opentrons/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/1", + "id": "UUID", + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "C3" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Too tall labware on pickup tip" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_96" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[6c20d6c570][Flex_S_v2_20_96_None_COLUMN_HappyPath].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[6c20d6c570][Flex_S_v2_20_96_None_COLUMN_HappyPath].json new file mode 100644 index 00000000000..d0fc8628ac9 --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[6c20d6c570][Flex_S_v2_20_96_None_COLUMN_HappyPath].json @@ -0,0 +1,6224 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "displayName": "Partial Tip Rack", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "B2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.75, + "zDimension": 99 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 23.9, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons Flex 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_flex_96_tiprack_1000ul", + "quirks": [], + "tipLength": 95.6, + "tipOverlap": 10.5 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 121 + } + }, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.38, + "z": 1.5 + }, + "A10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.38, + "z": 1.5 + }, + "A11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.38, + "z": 1.5 + }, + "A12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.38, + "z": 1.5 + }, + "A2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.38, + "z": 1.5 + }, + "A3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.38, + "z": 1.5 + }, + "A4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.38, + "z": 1.5 + }, + "A5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.38, + "z": 1.5 + }, + "A6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.38, + "z": 1.5 + }, + "A7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.38, + "z": 1.5 + }, + "A8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.38, + "z": 1.5 + }, + "A9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.38, + "z": 1.5 + }, + "B1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.38, + "z": 1.5 + }, + "B10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.38, + "z": 1.5 + }, + "B11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.38, + "z": 1.5 + }, + "B12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.38, + "z": 1.5 + }, + "B2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.38, + "z": 1.5 + }, + "B3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.38, + "z": 1.5 + }, + "B4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.38, + "z": 1.5 + }, + "B5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.38, + "z": 1.5 + }, + "B6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.38, + "z": 1.5 + }, + "B7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.38, + "z": 1.5 + }, + "B8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.38, + "z": 1.5 + }, + "B9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.38, + "z": 1.5 + }, + "C1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.38, + "z": 1.5 + }, + "C10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.38, + "z": 1.5 + }, + "C11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.38, + "z": 1.5 + }, + "C12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.38, + "z": 1.5 + }, + "C2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.38, + "z": 1.5 + }, + "C3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.38, + "z": 1.5 + }, + "C4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.38, + "z": 1.5 + }, + "C5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.38, + "z": 1.5 + }, + "C6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.38, + "z": 1.5 + }, + "C7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.38, + "z": 1.5 + }, + "C8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.38, + "z": 1.5 + }, + "C9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.38, + "z": 1.5 + }, + "D1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.38, + "z": 1.5 + }, + "D10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.38, + "z": 1.5 + }, + "D11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.38, + "z": 1.5 + }, + "D12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.38, + "z": 1.5 + }, + "D2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.38, + "z": 1.5 + }, + "D3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.38, + "z": 1.5 + }, + "D4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.38, + "z": 1.5 + }, + "D5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.38, + "z": 1.5 + }, + "D6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.38, + "z": 1.5 + }, + "D7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.38, + "z": 1.5 + }, + "D8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.38, + "z": 1.5 + }, + "D9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.38, + "z": 1.5 + }, + "E1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.38, + "z": 1.5 + }, + "E10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.38, + "z": 1.5 + }, + "E11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.38, + "z": 1.5 + }, + "E12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.38, + "z": 1.5 + }, + "E2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.38, + "z": 1.5 + }, + "E3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.38, + "z": 1.5 + }, + "E4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.38, + "z": 1.5 + }, + "E5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.38, + "z": 1.5 + }, + "E6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.38, + "z": 1.5 + }, + "E7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.38, + "z": 1.5 + }, + "E8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.38, + "z": 1.5 + }, + "E9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.38, + "z": 1.5 + }, + "F1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.38, + "z": 1.5 + }, + "F10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.38, + "z": 1.5 + }, + "F11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.38, + "z": 1.5 + }, + "F12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.38, + "z": 1.5 + }, + "F2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.38, + "z": 1.5 + }, + "F3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.38, + "z": 1.5 + }, + "F4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.38, + "z": 1.5 + }, + "F5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.38, + "z": 1.5 + }, + "F6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.38, + "z": 1.5 + }, + "F7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.38, + "z": 1.5 + }, + "F8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.38, + "z": 1.5 + }, + "F9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.38, + "z": 1.5 + }, + "G1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.38, + "z": 1.5 + }, + "G10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.38, + "z": 1.5 + }, + "G11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.38, + "z": 1.5 + }, + "G12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.38, + "z": 1.5 + }, + "G2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.38, + "z": 1.5 + }, + "G3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.38, + "z": 1.5 + }, + "G4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.38, + "z": 1.5 + }, + "G5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.38, + "z": 1.5 + }, + "G6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.38, + "z": 1.5 + }, + "G7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.38, + "z": 1.5 + }, + "G8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.38, + "z": 1.5 + }, + "G9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.38, + "z": 1.5 + }, + "H1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.38, + "z": 1.5 + }, + "H10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.38, + "z": 1.5 + }, + "H11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.38, + "z": 1.5 + }, + "H12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.38, + "z": 1.5 + }, + "H2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.38, + "z": 1.5 + }, + "H3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.38, + "z": 1.5 + }, + "H4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.38, + "z": 1.5 + }, + "H5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.38, + "z": 1.5 + }, + "H6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.38, + "z": 1.5 + }, + "H7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.38, + "z": 1.5 + }, + "H8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.38, + "z": 1.5 + }, + "H9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.38, + "z": 1.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A1", + "style": "COLUMN" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "691afd54dfa7982fb89e5f77c763bfd4", + "notes": [], + "params": { + "displayName": "Liquid Transfer - Source Labware", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "C2" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c910be62291bb94458a59cb4185c5180", + "notes": [], + "params": { + "displayName": "Liquid Transfer - Destination Labware", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "C3" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2f59e0552969594ba6ab06f03af324e1", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A12" + }, + "result": { + "position": { + "x": 277.38, + "y": 288.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6b0053809cc5ea894449b20181bda1d6", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 178.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1c921a50baabd805b1ee8fa0e85c6682", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 342.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "75aa0b5116a9eba713b68a3850e26391", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "34f14498853a691a86c6e51955a923f5", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "92f6d16db82fc47bbd830b87c04cf587", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A11" + }, + "result": { + "position": { + "x": 268.38, + "y": 288.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "touchTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d4506d1b80c117247379fd1da0cdd540", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "radius": 1.0, + "speed": 60.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -1.0 + }, + "origin": "top" + }, + "wellName": "A2" + }, + "result": { + "position": { + "x": 187.38, + "y": 181.24, + "z": 14.7 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b6c0a6862c1e869c974d3bbf491b2f77", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "239bbe2e12ee55487024bc01a20c71b9", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ccd85f84c2d5a9969bce2957cc8ea1f1", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A10" + }, + "result": { + "position": { + "x": 259.38, + "y": 288.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c603a57fd9bba99db45ecb759ed91041", + "notes": [], + "params": { + "axes": [ + "leftPlunger", + "leftZ" + ] + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "615a33e51b3fb8d9a7c25fc4e3f6a04d", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3fcbc107a2ddb8aef2be961108add200", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e9ce054762d4edc21b2b4c74b3a264cb", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A9" + }, + "result": { + "position": { + "x": 250.38, + "y": 288.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a0f88d95e77f51e86818cb9e324a7006", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 181.24, + "z": 2.92 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7ed7eaaa162b89d760f55d949352464b", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "23eb3478c9444fcf3001ecb326f15411", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "34c3afeaf56af250ec42af0751995669", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "45d2cde26215d9e311e7f9745228d93c", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f3e7a78d7da267bc877af3a8bc8d8de3", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b5b355ee01907f745c80f2350c8e3e31", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dc872d009459778cbbf93fd8edfa4ef6", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ac0822a34f4d47ffb4989a5f63bfab59", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4e4778958eeb399df7ed9910c6d52431", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3bd5afcf7db6fd3db5480254738264d9", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "331962de59fdeac6a9ecfc21dcda5cac", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "457dec90436799e13fcbb6ffdde3859f", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a835d08fcbabe71ad357dcdafa9632c4", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d6e6d0dcaa50989719d4265d3fb9aaaf", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d92475e5e072d6961fe38612564b2d31", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0129acc2b378f88a55ba77758eb3ed02", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0354a7d87886f9008260cf75347b2452", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "93e0f4ac6e51c80ff19bfe60dc97542b", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c3bedc4720be98d3ed4a3c1734854d6a", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "29bfc3397bb9f9430b9f2f59288a540c", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7d6c3bf51293b3fee38ca9a4e44f6cfd", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 5.0000000000000036 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 181.24, + "z": 20.700000000000003 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a7d6a6a0fddaf753a629565eb4d912a3", + "notes": [], + "params": { + "flowRate": 80.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 5.0000000000000036 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 181.24, + "z": 20.700000000000003 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "prepareToAspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1654457443c6f75e15e311f0543fc66f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9911036ea844c7a6ba90923698fc224e", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 181.24, + "z": 2.92 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c3188c7feb06653501f6bf397a131dc8", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1943586caa4c85679a9ae04821c2d38a", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9579bd2d4199b9920413263739ef30ed", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4f2dfd5aa4da5e2a45a3f3b692227df5", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e50910ece222b51bd908e743c6bf7804", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A12", + "style": "COLUMN" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5a00693acdb90f3631535748d93a8223", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 178.38, + "y": 288.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b782827466e82f28c3969485a65f3fe2", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A5" + }, + "result": { + "position": { + "x": 214.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "32989d99a33a00680804e9fc9fc2804b", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A5" + }, + "result": { + "position": { + "x": 378.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ba2c5376c66ec84d18a9a8585e95d9d9", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "252f2c9c7e1a96f8a4c8cc7eeff8fbdf", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ec32821a6c616dea97d3d2b4f59e1cd4", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A2" + }, + "result": { + "position": { + "x": 187.38, + "y": 288.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "touchTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dc740b4cde605ccfc143bd6b2dc65f7b", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "radius": 1.0, + "speed": 60.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -1.0 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 223.38, + "y": 181.24, + "z": 14.7 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d8894bf3d181e7ea041a675ae0eeb074", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3438f69dae7bf7c63c3caf25b1c0af6f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "36fce93206223fa6086fc3958b91de53", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 288.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0f96ea2f581e7da13b2920758720217c", + "notes": [], + "params": { + "axes": [ + "leftPlunger", + "leftZ" + ] + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "052f6060ce6e871a6a65936ec86cd64e", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ba2b5012fff1efcc43be440738b96812", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "be37ed68d97eb27cdaa9f28b458c84cb", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A4" + }, + "result": { + "position": { + "x": 205.38, + "y": 288.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c484812021d17a80f73bf5376416ff93", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 232.38, + "y": 181.24, + "z": 2.92 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "abeb19b3de05703b3e0ec8b69735094c", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 232.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cf5afad6cb0e55ff82bf41cbb61278f9", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 232.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "abc3039f932b9588a796a3d2844da6bc", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 232.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8231c70a38e5e9514386c43272b24b3b", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 232.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a9b22d17829464f4fc6f8bda7be4e82b", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 232.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d2d5e3037bdb3057f4ac220c39d9968e", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 232.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bbd96dd68d79179af153ef884b3430da", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 232.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8c5b08c533f9c792b534a3231d054fa3", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 232.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5f47db85c4a26fad793ff0bd71056e8f", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 232.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f8c9b70248e4087475baa0ea41b7a8f2", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 232.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a258c594b3064208d6b6a8c304dbe002", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 232.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9fc7b604becb670c1c2bcc718b191072", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 232.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "feaf07c0bf3861b566e4ab6bc54bc632", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 232.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4b61daf27e7e1a5d020fc247827adafe", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 232.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cd870b78d981e980bd5ca0c179487646", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 232.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bff9cf8246b58f1bdbbb16ca3dc12d80", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 232.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3d02ddc2c5fa9cfe85e9b0459595940e", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 232.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c8b8e1fb79a8c8c22ea041fe1d30fe06", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 232.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c960ea23d531567b5131f108b07f280d", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 232.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3a0eadb753166ea07bd95887ffca1ef1", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 232.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5fe73007151bae4924c6c6c55ef663b0", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 5.0000000000000036 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 232.38, + "y": 181.24, + "z": 20.700000000000003 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "88544514bc37e481edb0e05e76e088bb", + "notes": [], + "params": { + "flowRate": 80.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 5.0000000000000036 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 232.38, + "y": 181.24, + "z": 20.700000000000003 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "prepareToAspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2228ebb5354fb6841543953901ad0caf", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "25e7036b1ceb4c316002632bcb52134b", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 232.38, + "y": 181.24, + "z": 2.92 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a261b02a0248d089146924e44691411b", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 232.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "19a48a90466241d64935c5a55b23fbea", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 232.38, + "y": 181.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "263dd8836ac5c6cff37fff2ef09bf09e", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "33d098affbd40500bc8579d4995dad56", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [], + "files": [ + { + "name": "Flex_S_v2_20_96_None_COLUMN_HappyPath.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_flex_96_tiprack_1000ul/1", + "displayName": "Partial Tip Rack", + "id": "UUID", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "B2" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "displayName": "Liquid Transfer - Source Labware", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "C2" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "displayName": "Liquid Transfer - Destination Labware", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "C3" + } + } + ], + "liquids": [], + "metadata": { + "description": "96 channel pipette and a COLUMN partial tip configuration.", + "protocolName": "96Channel COLUMN Happy Path" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_96" + } + ], + "result": "ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[6e2f6f10c5][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_consolidate_destination_collision].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[6e2f6f10c5][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_consolidate_destination_collision].json new file mode 100644 index 00000000000..94311dbbf63 --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[6e2f6f10c5][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_consolidate_destination_collision].json @@ -0,0 +1,3963 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "B2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-1000ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 97.47 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_1000ul", + "tipLength": 88, + "tipOverlap": 7.95 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.24, + "z": 9.47 + }, + "A10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.24, + "z": 9.47 + }, + "A11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.24, + "z": 9.47 + }, + "A12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.24, + "z": 9.47 + }, + "A2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.24, + "z": 9.47 + }, + "A3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.24, + "z": 9.47 + }, + "A4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.24, + "z": 9.47 + }, + "A5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.24, + "z": 9.47 + }, + "A6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.24, + "z": 9.47 + }, + "A7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.24, + "z": 9.47 + }, + "A8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.24, + "z": 9.47 + }, + "A9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.24, + "z": 9.47 + }, + "B1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.24, + "z": 9.47 + }, + "B10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.24, + "z": 9.47 + }, + "B11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.24, + "z": 9.47 + }, + "B12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.24, + "z": 9.47 + }, + "B2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.24, + "z": 9.47 + }, + "B3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.24, + "z": 9.47 + }, + "B4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.24, + "z": 9.47 + }, + "B5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.24, + "z": 9.47 + }, + "B6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.24, + "z": 9.47 + }, + "B7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.24, + "z": 9.47 + }, + "B8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.24, + "z": 9.47 + }, + "B9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.24, + "z": 9.47 + }, + "C1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.24, + "z": 9.47 + }, + "C10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.24, + "z": 9.47 + }, + "C11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.24, + "z": 9.47 + }, + "C12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.24, + "z": 9.47 + }, + "C2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.24, + "z": 9.47 + }, + "C3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.24, + "z": 9.47 + }, + "C4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.24, + "z": 9.47 + }, + "C5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.24, + "z": 9.47 + }, + "C6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.24, + "z": 9.47 + }, + "C7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.24, + "z": 9.47 + }, + "C8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.24, + "z": 9.47 + }, + "C9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.24, + "z": 9.47 + }, + "D1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.24, + "z": 9.47 + }, + "D10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.24, + "z": 9.47 + }, + "D11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.24, + "z": 9.47 + }, + "D12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.24, + "z": 9.47 + }, + "D2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.24, + "z": 9.47 + }, + "D3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.24, + "z": 9.47 + }, + "D4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.24, + "z": 9.47 + }, + "D5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.24, + "z": 9.47 + }, + "D6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.24, + "z": 9.47 + }, + "D7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.24, + "z": 9.47 + }, + "D8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.24, + "z": 9.47 + }, + "D9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.24, + "z": 9.47 + }, + "E1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.24, + "z": 9.47 + }, + "E10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.24, + "z": 9.47 + }, + "E11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.24, + "z": 9.47 + }, + "E12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.24, + "z": 9.47 + }, + "E2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.24, + "z": 9.47 + }, + "E3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.24, + "z": 9.47 + }, + "E4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.24, + "z": 9.47 + }, + "E5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.24, + "z": 9.47 + }, + "E6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.24, + "z": 9.47 + }, + "E7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.24, + "z": 9.47 + }, + "E8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.24, + "z": 9.47 + }, + "E9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.24, + "z": 9.47 + }, + "F1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.24, + "z": 9.47 + }, + "F10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.24, + "z": 9.47 + }, + "F11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.24, + "z": 9.47 + }, + "F12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.24, + "z": 9.47 + }, + "F2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.24, + "z": 9.47 + }, + "F3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.24, + "z": 9.47 + }, + "F4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.24, + "z": 9.47 + }, + "F5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.24, + "z": 9.47 + }, + "F6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.24, + "z": 9.47 + }, + "F7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.24, + "z": 9.47 + }, + "F8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.24, + "z": 9.47 + }, + "F9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.24, + "z": 9.47 + }, + "G1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.24, + "z": 9.47 + }, + "G10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.24, + "z": 9.47 + }, + "G11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.24, + "z": 9.47 + }, + "G12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.24, + "z": 9.47 + }, + "G2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.24, + "z": 9.47 + }, + "G3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.24, + "z": 9.47 + }, + "G4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.24, + "z": 9.47 + }, + "G5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.24, + "z": 9.47 + }, + "G6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.24, + "z": 9.47 + }, + "G7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.24, + "z": 9.47 + }, + "G8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.24, + "z": 9.47 + }, + "G9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.24, + "z": 9.47 + }, + "H1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.24, + "z": 9.47 + }, + "H10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.24, + "z": 9.47 + }, + "H11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.24, + "z": 9.47 + }, + "H12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.24, + "z": 9.47 + }, + "H2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.24, + "z": 9.47 + }, + "H3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.24, + "z": 9.47 + }, + "H4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.24, + "z": 9.47 + }, + "H5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.24, + "z": 9.47 + }, + "H6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.24, + "z": 9.47 + }, + "H7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.24, + "z": 9.47 + }, + "H8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.24, + "z": 9.47 + }, + "H9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.24, + "z": 9.47 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "H12", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "691afd54dfa7982fb89e5f77c763bfd4", + "notes": [], + "params": { + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "C3" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 124.35 + }, + "gripperOffsets": {}, + "groups": [ + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352095", + "352096", + "352097", + "352099", + "352196" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 6x15 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A2", + "B1", + "B2", + "C1", + "C2" + ] + }, + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352070", + "352098" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 4x50 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A3", + "A4", + "B3", + "B4" + ] + } + ], + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Opentrons 10 Tube Rack with Falcon 4x50 mL, 6x15 mL Conical", + "displayVolumeUnits": "mL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1" + ], + [ + "A2", + "B2", + "C2" + ], + [ + "A3", + "B3" + ], + [ + "A4", + "B4" + ] + ], + "parameters": { + "format": "irregular", + "isMagneticModuleCompatible": false, + "isTiprack": false, + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical" + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 67.75, + "z": 6.85 + }, + "A2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 67.75, + "z": 6.85 + }, + "A3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 60.25, + "z": 7.3 + }, + "A4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 60.25, + "z": 7.3 + }, + "B1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 42.75, + "z": 6.85 + }, + "B2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 42.75, + "z": 6.85 + }, + "B3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 25.25, + "z": 7.3 + }, + "B4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 25.25, + "z": 7.3 + }, + "C1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 17.75, + "z": 6.85 + }, + "C2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 17.75, + "z": 6.85 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c910be62291bb94458a59cb4185c5180", + "notes": [], + "params": { + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "D2" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d75e38152238e9ad0c18e291fe97e483", + "notes": [], + "params": { + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "D3" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8de5f9595204f05bd1016cce23cd32b9", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 178.38, + "y": 288.24, + "z": 97.47 + }, + "tipDiameter": 7.23, + "tipLength": 77.5, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d770b3dd007307016fd235b6e50d1e5d", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 178.38, + "y": 74.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1b1e9e653601e5ff154ade4fc2221e84", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 178.38, + "y": 74.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "PartialTipMovementNotAllowedError [line 494]: Error 2004 MOTION_PLANNING_FAILURE (PartialTipMovementNotAllowedError): Moving to NEST 96 Well Plate 100 µL PCR Full Skirt in slot D3 with H12 nozzle partial configuration will result in collision with items in deck slot C3.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "Moving to NEST 96 Well Plate 100 µL PCR Full Skirt in slot D3 with H12 nozzle partial configuration will result in collision with items in deck slot C3.", + "errorCode": "2004", + "errorInfo": {}, + "errorType": "PartialTipMovementNotAllowedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_consolidate_destination_collision.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "B2" + } + }, + { + "definitionUri": "opentrons/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/1", + "id": "UUID", + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "C3" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "D2" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "D3" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Too tall labware on pickup tip" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_96" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[733c9cdf62][Flex_S_v2_20_8_None_PARTIAL_COLUMN_HappyPath].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[733c9cdf62][Flex_S_v2_20_8_None_PARTIAL_COLUMN_HappyPath].json new file mode 100644 index 00000000000..3473457b4b9 --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[733c9cdf62][Flex_S_v2_20_8_None_PARTIAL_COLUMN_HappyPath].json @@ -0,0 +1,5041 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadModule", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8511b05ba5565bf0e6dcccd800e2ee23", + "notes": [], + "params": { + "location": { + "slotName": "B1" + }, + "model": "thermocyclerModuleV2" + }, + "result": { + "definition": { + "calibrationPoint": { + "x": 14.4, + "y": 64.93, + "z": 97.8 + }, + "compatibleWith": [], + "dimensions": { + "bareOverallHeight": 108.96, + "lidHeight": 61.7, + "overLabwareHeight": 0.0 + }, + "displayName": "Thermocycler Module GEN2", + "gripperOffsets": { + "default": { + "dropOffset": { + "x": 0.0, + "y": 0.0, + "z": 5.6 + }, + "pickUpOffset": { + "x": 0.0, + "y": 0.0, + "z": 4.6 + } + } + }, + "labwareOffset": { + "x": 0.0, + "y": 68.8, + "z": 108.96 + }, + "model": "thermocyclerModuleV2", + "moduleType": "thermocyclerModuleType", + "otSharedSchema": "module/schemas/2", + "quirks": [], + "slotTransforms": { + "ot3_standard": { + "B1": { + "cornerOffsetFromSlot": [ + [ + -98, + 0, + 0, + 1 + ], + [ + -20.005, + 0, + 0, + 1 + ], + [ + -0.84, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0, + 1 + ] + ], + "labwareOffset": [ + [ + -98, + 0, + 0, + 1 + ], + [ + -20.005, + 0, + 0, + 1 + ], + [ + -0.84, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0, + 1 + ] + ] + } + } + } + }, + "model": "thermocyclerModuleV2", + "moduleId": "UUID", + "serialNumber": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b9563ff54d4bfe61c469a7da06e79f42", + "notes": [], + "params": { + "displayName": "Partial Tip Rack", + "loadName": "opentrons_flex_96_tiprack_50ul", + "location": { + "slotName": "B3" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.75, + "zDimension": 99 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 23.9, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons Flex 96 Tip Rack 50 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_flex_96_tiprack_50ul", + "quirks": [], + "tipLength": 57.9, + "tipOverlap": 10.5 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 121 + } + }, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 74.38, + "z": 1.5 + }, + "A10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 74.38, + "z": 1.5 + }, + "A11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 74.38, + "z": 1.5 + }, + "A12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 74.38, + "z": 1.5 + }, + "A2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 74.38, + "z": 1.5 + }, + "A3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 74.38, + "z": 1.5 + }, + "A4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 74.38, + "z": 1.5 + }, + "A5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 74.38, + "z": 1.5 + }, + "A6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 74.38, + "z": 1.5 + }, + "A7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 74.38, + "z": 1.5 + }, + "A8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 74.38, + "z": 1.5 + }, + "A9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 74.38, + "z": 1.5 + }, + "B1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 65.38, + "z": 1.5 + }, + "B10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 65.38, + "z": 1.5 + }, + "B11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 65.38, + "z": 1.5 + }, + "B12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 65.38, + "z": 1.5 + }, + "B2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 65.38, + "z": 1.5 + }, + "B3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 65.38, + "z": 1.5 + }, + "B4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 65.38, + "z": 1.5 + }, + "B5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 65.38, + "z": 1.5 + }, + "B6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 65.38, + "z": 1.5 + }, + "B7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 65.38, + "z": 1.5 + }, + "B8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 65.38, + "z": 1.5 + }, + "B9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 65.38, + "z": 1.5 + }, + "C1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 56.38, + "z": 1.5 + }, + "C10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 56.38, + "z": 1.5 + }, + "C11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 56.38, + "z": 1.5 + }, + "C12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 56.38, + "z": 1.5 + }, + "C2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 56.38, + "z": 1.5 + }, + "C3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 56.38, + "z": 1.5 + }, + "C4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 56.38, + "z": 1.5 + }, + "C5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 56.38, + "z": 1.5 + }, + "C6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 56.38, + "z": 1.5 + }, + "C7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 56.38, + "z": 1.5 + }, + "C8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 56.38, + "z": 1.5 + }, + "C9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 56.38, + "z": 1.5 + }, + "D1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 47.38, + "z": 1.5 + }, + "D10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 47.38, + "z": 1.5 + }, + "D11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 47.38, + "z": 1.5 + }, + "D12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 47.38, + "z": 1.5 + }, + "D2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 47.38, + "z": 1.5 + }, + "D3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 47.38, + "z": 1.5 + }, + "D4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 47.38, + "z": 1.5 + }, + "D5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 47.38, + "z": 1.5 + }, + "D6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 47.38, + "z": 1.5 + }, + "D7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 47.38, + "z": 1.5 + }, + "D8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 47.38, + "z": 1.5 + }, + "D9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 47.38, + "z": 1.5 + }, + "E1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 38.38, + "z": 1.5 + }, + "E10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 38.38, + "z": 1.5 + }, + "E11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 38.38, + "z": 1.5 + }, + "E12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 38.38, + "z": 1.5 + }, + "E2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 38.38, + "z": 1.5 + }, + "E3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 38.38, + "z": 1.5 + }, + "E4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 38.38, + "z": 1.5 + }, + "E5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 38.38, + "z": 1.5 + }, + "E6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 38.38, + "z": 1.5 + }, + "E7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 38.38, + "z": 1.5 + }, + "E8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 38.38, + "z": 1.5 + }, + "E9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 38.38, + "z": 1.5 + }, + "F1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 29.38, + "z": 1.5 + }, + "F10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 29.38, + "z": 1.5 + }, + "F11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 29.38, + "z": 1.5 + }, + "F12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 29.38, + "z": 1.5 + }, + "F2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 29.38, + "z": 1.5 + }, + "F3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 29.38, + "z": 1.5 + }, + "F4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 29.38, + "z": 1.5 + }, + "F5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 29.38, + "z": 1.5 + }, + "F6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 29.38, + "z": 1.5 + }, + "F7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 29.38, + "z": 1.5 + }, + "F8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 29.38, + "z": 1.5 + }, + "F9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 29.38, + "z": 1.5 + }, + "G1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 20.38, + "z": 1.5 + }, + "G10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 20.38, + "z": 1.5 + }, + "G11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 20.38, + "z": 1.5 + }, + "G12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 20.38, + "z": 1.5 + }, + "G2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 20.38, + "z": 1.5 + }, + "G3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 20.38, + "z": 1.5 + }, + "G4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 20.38, + "z": 1.5 + }, + "G5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 20.38, + "z": 1.5 + }, + "G6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 20.38, + "z": 1.5 + }, + "G7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 20.38, + "z": 1.5 + }, + "G8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 20.38, + "z": 1.5 + }, + "G9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 20.38, + "z": 1.5 + }, + "H1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 11.38, + "z": 1.5 + }, + "H10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 11.38, + "z": 1.5 + }, + "H11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 11.38, + "z": 1.5 + }, + "H12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 11.38, + "z": 1.5 + }, + "H2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 11.38, + "z": 1.5 + }, + "H3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 11.38, + "z": 1.5 + }, + "H4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 11.38, + "z": 1.5 + }, + "H5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 11.38, + "z": 1.5 + }, + "H6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 11.38, + "z": 1.5 + }, + "H7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 11.38, + "z": 1.5 + }, + "H8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 11.38, + "z": 1.5 + }, + "H9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 11.38, + "z": 1.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2763353e564ce1df96aeccf789058132", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "right", + "pipetteName": "p50_multi_flex", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2a57aa0e5f1e286b479c11d95e2cce35", + "notes": [], + "params": { + "configurationParams": { + "backLeftNozzle": "B1", + "frontRightNozzle": "H1", + "primaryNozzle": "H1", + "style": "QUADRANT" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "56a999b1f9d1f98d65c52b72ad11551a", + "notes": [], + "params": { + "displayName": "B2 Source Labware", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "B2" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0351ff93d36efb26af2690af0d9c18da", + "notes": [], + "params": { + "displayName": "C2 Destination Labware", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "C2" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0f43da3e882dcc90adbc877804eaffe6", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 342.38, + "y": 234.38, + "z": 99.0 + }, + "tipDiameter": 5.58, + "tipLength": 48.62, + "tipVolume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cc5f9f6546e3f07395b5d6c85dc1aafc", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 223.38, + "y": 288.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3d49cc97271f412432aa850ffebabbef", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 223.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d30ce65d2285b1859dc18e1b6fe76faf", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 509.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d1ec4afd293e8644a5ad7882a4d69184", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d52c4ef3d0cd067951e7173ed2637ece", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G2" + }, + "result": { + "position": { + "x": 351.38, + "y": 234.38, + "z": 99.0 + }, + "tipDiameter": 5.58, + "tipLength": 48.62, + "tipVolume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "touchTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "58c371d1cc2f6dc4560763aa55a1e5e9", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "radius": 1.0, + "speed": 60.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -1.0 + }, + "origin": "top" + }, + "wellName": "B1" + }, + "result": { + "position": { + "x": 178.38, + "y": 279.24, + "z": 14.7 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ac8bc689f5418cf36ea82bbf47844eef", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 359.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b8d14201243d718803419b98d5440021", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "18dda871b2b4261ef86950c47f111601", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G3" + }, + "result": { + "position": { + "x": 360.38, + "y": 234.38, + "z": 99.0 + }, + "tipDiameter": 5.58, + "tipLength": 48.62, + "tipVolume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "67d798e0e456b00d20dbef680a99f6eb", + "notes": [], + "params": { + "axes": [ + "rightPlunger", + "rightZ" + ] + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "881b99e5f41141cc07951c770058ea05", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 509.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "db7943deaf147c1de6aa8117fb8d63a1", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "239037161f9a2de7216a7acba49bcff0", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G4" + }, + "result": { + "position": { + "x": 369.38, + "y": 234.38, + "z": 99.0 + }, + "tipDiameter": 5.58, + "tipLength": 48.62, + "tipVolume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "230db894fdbb892ae3f39783462461c8", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c0feef97ca84c32f45401db87d05abbb", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4d99a8ac641ea0a85e7b01ba99a1ec5f", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3e1e5a70e87c15f46dc5a603f36f2f69", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0b08807727836dedb8213e2578018760", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cf6d84ea92c521749b113f12d2de23b2", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "802cf26e8622de7e0e56831e1e1aa9e6", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e8c57d0e8cd7e873e445e4d2719402c7", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "40534f69ecb65ebde84f9c02f8a89091", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a743f98a6f337d93f3dd45655c72cdf3", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dd3a4d714afac8767f22a6090c33da72", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f1b2f79bd838c6eb807902a1df314b3e", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a4b55b4d8a3a90086c6065cccaca1e2f", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a78a1b3b71268b80b8f88f2aabb5cd4e", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "86339a29798c93069dd73bbf7385869e", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "43090a02ca924a2114b5f5fdef66352a", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "181398c9b8867f97df69a15db2c2a739", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "518814c4283a01e0eba14fcadbff229f", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "592f0519806b1da6fd13314b9723adcc", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f2187dba5ee11e9414dfcd9d20f4b4fb", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "658e0f8e124681aa7fb0541ee186f1cd", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7d034866f22501788bd95a0d2c1e48da", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 5.0000000000000036 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 20.700000000000003 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6a85ffbd375379e2dae09152dc75adb9", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 5.0000000000000036 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 20.700000000000003 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "prepareToAspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "999ad712dcc9e8b37111110b86162146", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c3e83b0e29a4363ad235a866192b5f50", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e5c948a6a91f21f8c9589cc15e9e07a0", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e9f585bb4513553294ed54d2f517989b", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a64b1b0d0856efc0d1dc8cad94c4c113", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 359.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cab6fcfb11256dc0fc9f44ec3a6a6e48", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [], + "files": [ + { + "name": "Flex_S_v2_20_8_None_PARTIAL_COLUMN_HappyPath.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_flex_96_tiprack_50ul/1", + "displayName": "Partial Tip Rack", + "id": "UUID", + "loadName": "opentrons_flex_96_tiprack_50ul", + "location": { + "slotName": "B3" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "displayName": "B2 Source Labware", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "B2" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "displayName": "C2 Destination Labware", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "C2" + } + } + ], + "liquids": [], + "metadata": { + "description": "Tip Rack South Clearance for the 8 Channel pipette and a SINGLE partial tip configuration.", + "protocolName": "8 Channel PARTIAL_COLUMN Happy Path A1 or H1" + }, + "modules": [ + { + "id": "UUID", + "location": { + "slotName": "B1" + }, + "model": "thermocyclerModuleV2", + "serialNumber": "UUID" + } + ], + "pipettes": [ + { + "id": "UUID", + "mount": "right", + "pipetteName": "p50_multi_flex" + } + ], + "result": "ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[7583faec7c][OT2_X_v2_20_8_Overrides_InvalidConfigs_Override_return_tip_error].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[7583faec7c][OT2_X_v2_20_8_Overrides_InvalidConfigs_Override_return_tip_error].json new file mode 100644 index 00000000000..30ddffb8e03 --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[7583faec7c][OT2_X_v2_20_8_Overrides_InvalidConfigs_Override_return_tip_error].json @@ -0,0 +1,4939 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_20ul", + "location": { + "slotName": "1" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-10ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 64.69 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 20 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_20ul", + "tipLength": 39.2, + "tipOverlap": 8.25 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 74.24, + "z": 25.49 + }, + "A10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 74.24, + "z": 25.49 + }, + "A11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 74.24, + "z": 25.49 + }, + "A12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 74.24, + "z": 25.49 + }, + "A2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 74.24, + "z": 25.49 + }, + "A3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 74.24, + "z": 25.49 + }, + "A4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 74.24, + "z": 25.49 + }, + "A5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 74.24, + "z": 25.49 + }, + "A6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 74.24, + "z": 25.49 + }, + "A7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 74.24, + "z": 25.49 + }, + "A8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 74.24, + "z": 25.49 + }, + "A9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 74.24, + "z": 25.49 + }, + "B1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 65.24, + "z": 25.49 + }, + "B10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 65.24, + "z": 25.49 + }, + "B11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 65.24, + "z": 25.49 + }, + "B12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 65.24, + "z": 25.49 + }, + "B2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 65.24, + "z": 25.49 + }, + "B3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 65.24, + "z": 25.49 + }, + "B4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 65.24, + "z": 25.49 + }, + "B5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 65.24, + "z": 25.49 + }, + "B6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 65.24, + "z": 25.49 + }, + "B7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 65.24, + "z": 25.49 + }, + "B8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 65.24, + "z": 25.49 + }, + "B9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 65.24, + "z": 25.49 + }, + "C1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 56.24, + "z": 25.49 + }, + "C10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 56.24, + "z": 25.49 + }, + "C11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 56.24, + "z": 25.49 + }, + "C12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 56.24, + "z": 25.49 + }, + "C2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 56.24, + "z": 25.49 + }, + "C3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 56.24, + "z": 25.49 + }, + "C4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 56.24, + "z": 25.49 + }, + "C5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 56.24, + "z": 25.49 + }, + "C6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 56.24, + "z": 25.49 + }, + "C7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 56.24, + "z": 25.49 + }, + "C8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 56.24, + "z": 25.49 + }, + "C9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 56.24, + "z": 25.49 + }, + "D1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 47.24, + "z": 25.49 + }, + "D10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 47.24, + "z": 25.49 + }, + "D11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 47.24, + "z": 25.49 + }, + "D12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 47.24, + "z": 25.49 + }, + "D2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 47.24, + "z": 25.49 + }, + "D3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 47.24, + "z": 25.49 + }, + "D4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 47.24, + "z": 25.49 + }, + "D5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 47.24, + "z": 25.49 + }, + "D6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 47.24, + "z": 25.49 + }, + "D7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 47.24, + "z": 25.49 + }, + "D8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 47.24, + "z": 25.49 + }, + "D9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 47.24, + "z": 25.49 + }, + "E1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 38.24, + "z": 25.49 + }, + "E10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 38.24, + "z": 25.49 + }, + "E11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 38.24, + "z": 25.49 + }, + "E12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 38.24, + "z": 25.49 + }, + "E2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 38.24, + "z": 25.49 + }, + "E3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 38.24, + "z": 25.49 + }, + "E4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 38.24, + "z": 25.49 + }, + "E5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 38.24, + "z": 25.49 + }, + "E6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 38.24, + "z": 25.49 + }, + "E7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 38.24, + "z": 25.49 + }, + "E8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 38.24, + "z": 25.49 + }, + "E9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 38.24, + "z": 25.49 + }, + "F1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 29.24, + "z": 25.49 + }, + "F10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 29.24, + "z": 25.49 + }, + "F11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 29.24, + "z": 25.49 + }, + "F12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 29.24, + "z": 25.49 + }, + "F2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 29.24, + "z": 25.49 + }, + "F3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 29.24, + "z": 25.49 + }, + "F4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 29.24, + "z": 25.49 + }, + "F5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 29.24, + "z": 25.49 + }, + "F6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 29.24, + "z": 25.49 + }, + "F7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 29.24, + "z": 25.49 + }, + "F8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 29.24, + "z": 25.49 + }, + "F9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 29.24, + "z": 25.49 + }, + "G1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 20.24, + "z": 25.49 + }, + "G10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 20.24, + "z": 25.49 + }, + "G11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 20.24, + "z": 25.49 + }, + "G12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 20.24, + "z": 25.49 + }, + "G2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 20.24, + "z": 25.49 + }, + "G3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 20.24, + "z": 25.49 + }, + "G4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 20.24, + "z": 25.49 + }, + "G5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 20.24, + "z": 25.49 + }, + "G6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 20.24, + "z": 25.49 + }, + "G7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 20.24, + "z": 25.49 + }, + "G8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 20.24, + "z": 25.49 + }, + "G9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 20.24, + "z": 25.49 + }, + "H1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 11.24, + "z": 25.49 + }, + "H10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 11.24, + "z": 25.49 + }, + "H11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 11.24, + "z": 25.49 + }, + "H12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 11.24, + "z": 25.49 + }, + "H2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 11.24, + "z": 25.49 + }, + "H3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 11.24, + "z": 25.49 + }, + "H4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 11.24, + "z": 25.49 + }, + "H5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 11.24, + "z": 25.49 + }, + "H6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 11.24, + "z": 25.49 + }, + "H7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 11.24, + "z": 25.49 + }, + "H8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 11.24, + "z": 25.49 + }, + "H9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 11.24, + "z": 25.49 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50de88d471ad3910c29207fb6df4502e", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_300ul", + "location": { + "slotName": "2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-300ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 64.49 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 300 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_300ul", + "tipLength": 59.3, + "tipOverlap": 7.47 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 74.24, + "z": 5.39 + }, + "A10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 74.24, + "z": 5.39 + }, + "A11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 74.24, + "z": 5.39 + }, + "A12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 74.24, + "z": 5.39 + }, + "A2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 74.24, + "z": 5.39 + }, + "A3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 74.24, + "z": 5.39 + }, + "A4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 74.24, + "z": 5.39 + }, + "A5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 74.24, + "z": 5.39 + }, + "A6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 74.24, + "z": 5.39 + }, + "A7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 74.24, + "z": 5.39 + }, + "A8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 74.24, + "z": 5.39 + }, + "A9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 74.24, + "z": 5.39 + }, + "B1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 65.24, + "z": 5.39 + }, + "B10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 65.24, + "z": 5.39 + }, + "B11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 65.24, + "z": 5.39 + }, + "B12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 65.24, + "z": 5.39 + }, + "B2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 65.24, + "z": 5.39 + }, + "B3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 65.24, + "z": 5.39 + }, + "B4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 65.24, + "z": 5.39 + }, + "B5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 65.24, + "z": 5.39 + }, + "B6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 65.24, + "z": 5.39 + }, + "B7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 65.24, + "z": 5.39 + }, + "B8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 65.24, + "z": 5.39 + }, + "B9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 65.24, + "z": 5.39 + }, + "C1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 56.24, + "z": 5.39 + }, + "C10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 56.24, + "z": 5.39 + }, + "C11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 56.24, + "z": 5.39 + }, + "C12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 56.24, + "z": 5.39 + }, + "C2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 56.24, + "z": 5.39 + }, + "C3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 56.24, + "z": 5.39 + }, + "C4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 56.24, + "z": 5.39 + }, + "C5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 56.24, + "z": 5.39 + }, + "C6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 56.24, + "z": 5.39 + }, + "C7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 56.24, + "z": 5.39 + }, + "C8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 56.24, + "z": 5.39 + }, + "C9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 56.24, + "z": 5.39 + }, + "D1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 47.24, + "z": 5.39 + }, + "D10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 47.24, + "z": 5.39 + }, + "D11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 47.24, + "z": 5.39 + }, + "D12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 47.24, + "z": 5.39 + }, + "D2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 47.24, + "z": 5.39 + }, + "D3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 47.24, + "z": 5.39 + }, + "D4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 47.24, + "z": 5.39 + }, + "D5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 47.24, + "z": 5.39 + }, + "D6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 47.24, + "z": 5.39 + }, + "D7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 47.24, + "z": 5.39 + }, + "D8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 47.24, + "z": 5.39 + }, + "D9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 47.24, + "z": 5.39 + }, + "E1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 38.24, + "z": 5.39 + }, + "E10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 38.24, + "z": 5.39 + }, + "E11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 38.24, + "z": 5.39 + }, + "E12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 38.24, + "z": 5.39 + }, + "E2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 38.24, + "z": 5.39 + }, + "E3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 38.24, + "z": 5.39 + }, + "E4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 38.24, + "z": 5.39 + }, + "E5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 38.24, + "z": 5.39 + }, + "E6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 38.24, + "z": 5.39 + }, + "E7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 38.24, + "z": 5.39 + }, + "E8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 38.24, + "z": 5.39 + }, + "E9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 38.24, + "z": 5.39 + }, + "F1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 29.24, + "z": 5.39 + }, + "F10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 29.24, + "z": 5.39 + }, + "F11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 29.24, + "z": 5.39 + }, + "F12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 29.24, + "z": 5.39 + }, + "F2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 29.24, + "z": 5.39 + }, + "F3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 29.24, + "z": 5.39 + }, + "F4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 29.24, + "z": 5.39 + }, + "F5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 29.24, + "z": 5.39 + }, + "F6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 29.24, + "z": 5.39 + }, + "F7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 29.24, + "z": 5.39 + }, + "F8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 29.24, + "z": 5.39 + }, + "F9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 29.24, + "z": 5.39 + }, + "G1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 20.24, + "z": 5.39 + }, + "G10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 20.24, + "z": 5.39 + }, + "G11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 20.24, + "z": 5.39 + }, + "G12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 20.24, + "z": 5.39 + }, + "G2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 20.24, + "z": 5.39 + }, + "G3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 20.24, + "z": 5.39 + }, + "G4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 20.24, + "z": 5.39 + }, + "G5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 20.24, + "z": 5.39 + }, + "G6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 20.24, + "z": 5.39 + }, + "G7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 20.24, + "z": 5.39 + }, + "G8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 20.24, + "z": 5.39 + }, + "G9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 20.24, + "z": 5.39 + }, + "H1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 11.24, + "z": 5.39 + }, + "H10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 11.24, + "z": 5.39 + }, + "H11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 11.24, + "z": 5.39 + }, + "H12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 11.24, + "z": 5.39 + }, + "H2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 11.24, + "z": 5.39 + }, + "H3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 11.24, + "z": 5.39 + }, + "H4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 11.24, + "z": 5.39 + }, + "H5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 11.24, + "z": 5.39 + }, + "H6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 11.24, + "z": 5.39 + }, + "H7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 11.24, + "z": 5.39 + }, + "H8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 11.24, + "z": 5.39 + }, + "H9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 11.24, + "z": 5.39 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "54fddab1eb921f6e1d3aa7e96d2ac307", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p20_multi_gen2", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4b1d27a6f17f312dd76668f0c48ed406", + "notes": [], + "params": { + "configurationParams": { + "backLeftNozzle": "G1", + "frontRightNozzle": "H1", + "primaryNozzle": "H1", + "style": "QUADRANT" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8f1105742fe19ad1e0b7c436509543f3", + "notes": [], + "params": { + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "4" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "51917f4fe2c45a5895dd30e853f4b689", + "notes": [], + "params": { + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "5" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bb4e42ce3a347009d85098cb49c54446", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B1" + }, + "result": { + "position": { + "x": 14.38, + "y": 65.24, + "z": 64.69 + }, + "tipDiameter": 3.27, + "tipLength": 30.950000000000003, + "tipVolume": 20.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3e2d6ccf28ac1864869f3fba1e6c918c", + "notes": [], + "params": { + "message": "Tip rack in 1, well A1 has tip: False" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "adb87a628b0270e6b7ea03956c308caf", + "notes": [], + "params": { + "message": "Tip rack in 1, well B1 has tip: False" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d52723fce284549fc5363df14c8af77b", + "notes": [], + "params": { + "message": "Tip rack in 1, well C1 has tip: True" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1eb8c634a559f734e5bf0152943ccfc5", + "notes": [], + "params": { + "message": "Tip rack in 1, well D1 has tip: True" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3e38d3b5e3cfe9ddb63397a97e876ed4", + "notes": [], + "params": { + "message": "Tip rack in 1, well E1 has tip: True" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8c0f1de98d6cbf48fd9e76be1389b807", + "notes": [], + "params": { + "message": "Tip rack in 1, well F1 has tip: True" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "560a90fcbfc35c9f895b03c1d49abd29", + "notes": [], + "params": { + "message": "Tip rack in 1, well G1 has tip: True" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "eb9fed787fef1871ea9fbc3f506af0e6", + "notes": [], + "params": { + "message": "Tip rack in 1, well H1 has tip: True" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "UnexpectedProtocolError [line 146]: Error 4000 GENERAL_ERROR (UnexpectedProtocolError): Cannot return tip to a tiprack while the pipette is configured for partial tip.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "Cannot return tip to a tiprack while the pipette is configured for partial tip.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "UnexpectedProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ], + "files": [ + { + "name": "OT2_X_v2_20_8_Overrides_InvalidConfigs_Override_return_tip_error.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_96_tiprack_20ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_20ul", + "location": { + "slotName": "1" + } + }, + { + "definitionUri": "opentrons/opentrons_96_tiprack_300ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_300ul", + "location": { + "slotName": "2" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "4" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "5" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Invalid tip configs that should error" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p20_multi_gen2" + } + ], + "result": "not-ok", + "robotType": "OT-2 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[7e7a90041b][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_west_column].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[7e7a90041b][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_west_column].json new file mode 100644 index 00000000000..df37cc2db4b --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[7e7a90041b][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_west_column].json @@ -0,0 +1,1500 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "C2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-1000ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 97.47 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_1000ul", + "tipLength": 88, + "tipOverlap": 7.95 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.24, + "z": 9.47 + }, + "A10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.24, + "z": 9.47 + }, + "A11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.24, + "z": 9.47 + }, + "A12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.24, + "z": 9.47 + }, + "A2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.24, + "z": 9.47 + }, + "A3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.24, + "z": 9.47 + }, + "A4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.24, + "z": 9.47 + }, + "A5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.24, + "z": 9.47 + }, + "A6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.24, + "z": 9.47 + }, + "A7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.24, + "z": 9.47 + }, + "A8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.24, + "z": 9.47 + }, + "A9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.24, + "z": 9.47 + }, + "B1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.24, + "z": 9.47 + }, + "B10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.24, + "z": 9.47 + }, + "B11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.24, + "z": 9.47 + }, + "B12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.24, + "z": 9.47 + }, + "B2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.24, + "z": 9.47 + }, + "B3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.24, + "z": 9.47 + }, + "B4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.24, + "z": 9.47 + }, + "B5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.24, + "z": 9.47 + }, + "B6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.24, + "z": 9.47 + }, + "B7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.24, + "z": 9.47 + }, + "B8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.24, + "z": 9.47 + }, + "B9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.24, + "z": 9.47 + }, + "C1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.24, + "z": 9.47 + }, + "C10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.24, + "z": 9.47 + }, + "C11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.24, + "z": 9.47 + }, + "C12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.24, + "z": 9.47 + }, + "C2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.24, + "z": 9.47 + }, + "C3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.24, + "z": 9.47 + }, + "C4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.24, + "z": 9.47 + }, + "C5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.24, + "z": 9.47 + }, + "C6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.24, + "z": 9.47 + }, + "C7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.24, + "z": 9.47 + }, + "C8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.24, + "z": 9.47 + }, + "C9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.24, + "z": 9.47 + }, + "D1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.24, + "z": 9.47 + }, + "D10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.24, + "z": 9.47 + }, + "D11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.24, + "z": 9.47 + }, + "D12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.24, + "z": 9.47 + }, + "D2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.24, + "z": 9.47 + }, + "D3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.24, + "z": 9.47 + }, + "D4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.24, + "z": 9.47 + }, + "D5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.24, + "z": 9.47 + }, + "D6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.24, + "z": 9.47 + }, + "D7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.24, + "z": 9.47 + }, + "D8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.24, + "z": 9.47 + }, + "D9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.24, + "z": 9.47 + }, + "E1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.24, + "z": 9.47 + }, + "E10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.24, + "z": 9.47 + }, + "E11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.24, + "z": 9.47 + }, + "E12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.24, + "z": 9.47 + }, + "E2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.24, + "z": 9.47 + }, + "E3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.24, + "z": 9.47 + }, + "E4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.24, + "z": 9.47 + }, + "E5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.24, + "z": 9.47 + }, + "E6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.24, + "z": 9.47 + }, + "E7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.24, + "z": 9.47 + }, + "E8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.24, + "z": 9.47 + }, + "E9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.24, + "z": 9.47 + }, + "F1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.24, + "z": 9.47 + }, + "F10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.24, + "z": 9.47 + }, + "F11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.24, + "z": 9.47 + }, + "F12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.24, + "z": 9.47 + }, + "F2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.24, + "z": 9.47 + }, + "F3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.24, + "z": 9.47 + }, + "F4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.24, + "z": 9.47 + }, + "F5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.24, + "z": 9.47 + }, + "F6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.24, + "z": 9.47 + }, + "F7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.24, + "z": 9.47 + }, + "F8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.24, + "z": 9.47 + }, + "F9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.24, + "z": 9.47 + }, + "G1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.24, + "z": 9.47 + }, + "G10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.24, + "z": 9.47 + }, + "G11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.24, + "z": 9.47 + }, + "G12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.24, + "z": 9.47 + }, + "G2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.24, + "z": 9.47 + }, + "G3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.24, + "z": 9.47 + }, + "G4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.24, + "z": 9.47 + }, + "G5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.24, + "z": 9.47 + }, + "G6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.24, + "z": 9.47 + }, + "G7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.24, + "z": 9.47 + }, + "G8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.24, + "z": 9.47 + }, + "G9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.24, + "z": 9.47 + }, + "H1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.24, + "z": 9.47 + }, + "H10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.24, + "z": 9.47 + }, + "H11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.24, + "z": 9.47 + }, + "H12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.24, + "z": 9.47 + }, + "H2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.24, + "z": 9.47 + }, + "H3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.24, + "z": 9.47 + }, + "H4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.24, + "z": 9.47 + }, + "H5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.24, + "z": 9.47 + }, + "H6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.24, + "z": 9.47 + }, + "H7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.24, + "z": 9.47 + }, + "H8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.24, + "z": 9.47 + }, + "H9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.24, + "z": 9.47 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A1", + "style": "COLUMN" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "691afd54dfa7982fb89e5f77c763bfd4", + "notes": [], + "params": { + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "C3" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 124.35 + }, + "gripperOffsets": {}, + "groups": [ + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352095", + "352096", + "352097", + "352099", + "352196" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 6x15 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A2", + "B1", + "B2", + "C1", + "C2" + ] + }, + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352070", + "352098" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 4x50 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A3", + "A4", + "B3", + "B4" + ] + } + ], + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Opentrons 10 Tube Rack with Falcon 4x50 mL, 6x15 mL Conical", + "displayVolumeUnits": "mL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1" + ], + [ + "A2", + "B2", + "C2" + ], + [ + "A3", + "B3" + ], + [ + "A4", + "B4" + ] + ], + "parameters": { + "format": "irregular", + "isMagneticModuleCompatible": false, + "isTiprack": false, + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical" + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 67.75, + "z": 6.85 + }, + "A2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 67.75, + "z": 6.85 + }, + "A3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 60.25, + "z": 7.3 + }, + "A4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 60.25, + "z": 7.3 + }, + "B1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 42.75, + "z": 6.85 + }, + "B2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 42.75, + "z": 6.85 + }, + "B3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 25.25, + "z": 7.3 + }, + "B4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 25.25, + "z": 7.3 + }, + "C1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 17.75, + "z": 6.85 + }, + "C2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 17.75, + "z": 6.85 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "PartialTipMovementNotAllowedError [line 479]: Error 2004 MOTION_PLANNING_FAILURE (PartialTipMovementNotAllowedError): Moving to Opentrons OT-2 96 Tip Rack 1000 µL in slot C2 with A1 nozzle partial configuration will result in collision with items in deck slot C3.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "Moving to Opentrons OT-2 96 Tip Rack 1000 µL in slot C2 with A1 nozzle partial configuration will result in collision with items in deck slot C3.", + "errorCode": "2004", + "errorInfo": {}, + "errorType": "PartialTipMovementNotAllowedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_west_column.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "C2" + } + }, + { + "definitionUri": "opentrons/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/1", + "id": "UUID", + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "C3" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Too tall labware on pickup tip" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_96" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[8a663305c4][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_south].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[8a663305c4][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_south].json new file mode 100644 index 00000000000..e2fadc01642 --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[8a663305c4][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_south].json @@ -0,0 +1,1500 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "C2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-1000ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 97.47 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_1000ul", + "tipLength": 88, + "tipOverlap": 7.95 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.24, + "z": 9.47 + }, + "A10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.24, + "z": 9.47 + }, + "A11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.24, + "z": 9.47 + }, + "A12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.24, + "z": 9.47 + }, + "A2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.24, + "z": 9.47 + }, + "A3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.24, + "z": 9.47 + }, + "A4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.24, + "z": 9.47 + }, + "A5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.24, + "z": 9.47 + }, + "A6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.24, + "z": 9.47 + }, + "A7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.24, + "z": 9.47 + }, + "A8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.24, + "z": 9.47 + }, + "A9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.24, + "z": 9.47 + }, + "B1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.24, + "z": 9.47 + }, + "B10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.24, + "z": 9.47 + }, + "B11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.24, + "z": 9.47 + }, + "B12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.24, + "z": 9.47 + }, + "B2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.24, + "z": 9.47 + }, + "B3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.24, + "z": 9.47 + }, + "B4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.24, + "z": 9.47 + }, + "B5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.24, + "z": 9.47 + }, + "B6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.24, + "z": 9.47 + }, + "B7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.24, + "z": 9.47 + }, + "B8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.24, + "z": 9.47 + }, + "B9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.24, + "z": 9.47 + }, + "C1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.24, + "z": 9.47 + }, + "C10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.24, + "z": 9.47 + }, + "C11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.24, + "z": 9.47 + }, + "C12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.24, + "z": 9.47 + }, + "C2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.24, + "z": 9.47 + }, + "C3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.24, + "z": 9.47 + }, + "C4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.24, + "z": 9.47 + }, + "C5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.24, + "z": 9.47 + }, + "C6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.24, + "z": 9.47 + }, + "C7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.24, + "z": 9.47 + }, + "C8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.24, + "z": 9.47 + }, + "C9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.24, + "z": 9.47 + }, + "D1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.24, + "z": 9.47 + }, + "D10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.24, + "z": 9.47 + }, + "D11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.24, + "z": 9.47 + }, + "D12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.24, + "z": 9.47 + }, + "D2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.24, + "z": 9.47 + }, + "D3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.24, + "z": 9.47 + }, + "D4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.24, + "z": 9.47 + }, + "D5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.24, + "z": 9.47 + }, + "D6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.24, + "z": 9.47 + }, + "D7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.24, + "z": 9.47 + }, + "D8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.24, + "z": 9.47 + }, + "D9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.24, + "z": 9.47 + }, + "E1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.24, + "z": 9.47 + }, + "E10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.24, + "z": 9.47 + }, + "E11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.24, + "z": 9.47 + }, + "E12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.24, + "z": 9.47 + }, + "E2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.24, + "z": 9.47 + }, + "E3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.24, + "z": 9.47 + }, + "E4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.24, + "z": 9.47 + }, + "E5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.24, + "z": 9.47 + }, + "E6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.24, + "z": 9.47 + }, + "E7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.24, + "z": 9.47 + }, + "E8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.24, + "z": 9.47 + }, + "E9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.24, + "z": 9.47 + }, + "F1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.24, + "z": 9.47 + }, + "F10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.24, + "z": 9.47 + }, + "F11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.24, + "z": 9.47 + }, + "F12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.24, + "z": 9.47 + }, + "F2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.24, + "z": 9.47 + }, + "F3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.24, + "z": 9.47 + }, + "F4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.24, + "z": 9.47 + }, + "F5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.24, + "z": 9.47 + }, + "F6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.24, + "z": 9.47 + }, + "F7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.24, + "z": 9.47 + }, + "F8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.24, + "z": 9.47 + }, + "F9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.24, + "z": 9.47 + }, + "G1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.24, + "z": 9.47 + }, + "G10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.24, + "z": 9.47 + }, + "G11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.24, + "z": 9.47 + }, + "G12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.24, + "z": 9.47 + }, + "G2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.24, + "z": 9.47 + }, + "G3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.24, + "z": 9.47 + }, + "G4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.24, + "z": 9.47 + }, + "G5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.24, + "z": 9.47 + }, + "G6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.24, + "z": 9.47 + }, + "G7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.24, + "z": 9.47 + }, + "G8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.24, + "z": 9.47 + }, + "G9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.24, + "z": 9.47 + }, + "H1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.24, + "z": 9.47 + }, + "H10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.24, + "z": 9.47 + }, + "H11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.24, + "z": 9.47 + }, + "H12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.24, + "z": 9.47 + }, + "H2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.24, + "z": 9.47 + }, + "H3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.24, + "z": 9.47 + }, + "H4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.24, + "z": 9.47 + }, + "H5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.24, + "z": 9.47 + }, + "H6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.24, + "z": 9.47 + }, + "H7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.24, + "z": 9.47 + }, + "H8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.24, + "z": 9.47 + }, + "H9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.24, + "z": 9.47 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A12", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "691afd54dfa7982fb89e5f77c763bfd4", + "notes": [], + "params": { + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "D2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 124.35 + }, + "gripperOffsets": {}, + "groups": [ + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352095", + "352096", + "352097", + "352099", + "352196" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 6x15 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A2", + "B1", + "B2", + "C1", + "C2" + ] + }, + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352070", + "352098" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 4x50 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A3", + "A4", + "B3", + "B4" + ] + } + ], + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Opentrons 10 Tube Rack with Falcon 4x50 mL, 6x15 mL Conical", + "displayVolumeUnits": "mL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1" + ], + [ + "A2", + "B2", + "C2" + ], + [ + "A3", + "B3" + ], + [ + "A4", + "B4" + ] + ], + "parameters": { + "format": "irregular", + "isMagneticModuleCompatible": false, + "isTiprack": false, + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical" + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 67.75, + "z": 6.85 + }, + "A2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 67.75, + "z": 6.85 + }, + "A3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 60.25, + "z": 7.3 + }, + "A4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 60.25, + "z": 7.3 + }, + "B1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 42.75, + "z": 6.85 + }, + "B2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 42.75, + "z": 6.85 + }, + "B3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 25.25, + "z": 7.3 + }, + "B4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 25.25, + "z": 7.3 + }, + "C1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 17.75, + "z": 6.85 + }, + "C2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 17.75, + "z": 6.85 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "PartialTipMovementNotAllowedError [line 479]: Error 2004 MOTION_PLANNING_FAILURE (PartialTipMovementNotAllowedError): Moving to Opentrons OT-2 96 Tip Rack 1000 µL in slot C2 with A12 nozzle partial configuration will result in collision with items in deck slot D2.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "Moving to Opentrons OT-2 96 Tip Rack 1000 µL in slot C2 with A12 nozzle partial configuration will result in collision with items in deck slot D2.", + "errorCode": "2004", + "errorInfo": {}, + "errorType": "PartialTipMovementNotAllowedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_south.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "C2" + } + }, + { + "definitionUri": "opentrons/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/1", + "id": "UUID", + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "D2" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Too tall labware on pickup tip" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_96" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[8b07e799f6][Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_drop_tip_with_location].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[8b07e799f6][Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_drop_tip_with_location].json new file mode 100644 index 00000000000..919f1980537 --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[8b07e799f6][Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_drop_tip_with_location].json @@ -0,0 +1,3785 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "B2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.75, + "zDimension": 99 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 23.9, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons Flex 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_flex_96_tiprack_1000ul", + "quirks": [], + "tipLength": 95.6, + "tipOverlap": 10.5 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 121 + } + }, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.38, + "z": 1.5 + }, + "A10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.38, + "z": 1.5 + }, + "A11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.38, + "z": 1.5 + }, + "A12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.38, + "z": 1.5 + }, + "A2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.38, + "z": 1.5 + }, + "A3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.38, + "z": 1.5 + }, + "A4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.38, + "z": 1.5 + }, + "A5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.38, + "z": 1.5 + }, + "A6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.38, + "z": 1.5 + }, + "A7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.38, + "z": 1.5 + }, + "A8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.38, + "z": 1.5 + }, + "A9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.38, + "z": 1.5 + }, + "B1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.38, + "z": 1.5 + }, + "B10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.38, + "z": 1.5 + }, + "B11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.38, + "z": 1.5 + }, + "B12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.38, + "z": 1.5 + }, + "B2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.38, + "z": 1.5 + }, + "B3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.38, + "z": 1.5 + }, + "B4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.38, + "z": 1.5 + }, + "B5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.38, + "z": 1.5 + }, + "B6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.38, + "z": 1.5 + }, + "B7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.38, + "z": 1.5 + }, + "B8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.38, + "z": 1.5 + }, + "B9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.38, + "z": 1.5 + }, + "C1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.38, + "z": 1.5 + }, + "C10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.38, + "z": 1.5 + }, + "C11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.38, + "z": 1.5 + }, + "C12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.38, + "z": 1.5 + }, + "C2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.38, + "z": 1.5 + }, + "C3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.38, + "z": 1.5 + }, + "C4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.38, + "z": 1.5 + }, + "C5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.38, + "z": 1.5 + }, + "C6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.38, + "z": 1.5 + }, + "C7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.38, + "z": 1.5 + }, + "C8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.38, + "z": 1.5 + }, + "C9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.38, + "z": 1.5 + }, + "D1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.38, + "z": 1.5 + }, + "D10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.38, + "z": 1.5 + }, + "D11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.38, + "z": 1.5 + }, + "D12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.38, + "z": 1.5 + }, + "D2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.38, + "z": 1.5 + }, + "D3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.38, + "z": 1.5 + }, + "D4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.38, + "z": 1.5 + }, + "D5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.38, + "z": 1.5 + }, + "D6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.38, + "z": 1.5 + }, + "D7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.38, + "z": 1.5 + }, + "D8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.38, + "z": 1.5 + }, + "D9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.38, + "z": 1.5 + }, + "E1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.38, + "z": 1.5 + }, + "E10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.38, + "z": 1.5 + }, + "E11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.38, + "z": 1.5 + }, + "E12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.38, + "z": 1.5 + }, + "E2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.38, + "z": 1.5 + }, + "E3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.38, + "z": 1.5 + }, + "E4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.38, + "z": 1.5 + }, + "E5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.38, + "z": 1.5 + }, + "E6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.38, + "z": 1.5 + }, + "E7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.38, + "z": 1.5 + }, + "E8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.38, + "z": 1.5 + }, + "E9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.38, + "z": 1.5 + }, + "F1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.38, + "z": 1.5 + }, + "F10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.38, + "z": 1.5 + }, + "F11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.38, + "z": 1.5 + }, + "F12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.38, + "z": 1.5 + }, + "F2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.38, + "z": 1.5 + }, + "F3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.38, + "z": 1.5 + }, + "F4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.38, + "z": 1.5 + }, + "F5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.38, + "z": 1.5 + }, + "F6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.38, + "z": 1.5 + }, + "F7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.38, + "z": 1.5 + }, + "F8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.38, + "z": 1.5 + }, + "F9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.38, + "z": 1.5 + }, + "G1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.38, + "z": 1.5 + }, + "G10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.38, + "z": 1.5 + }, + "G11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.38, + "z": 1.5 + }, + "G12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.38, + "z": 1.5 + }, + "G2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.38, + "z": 1.5 + }, + "G3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.38, + "z": 1.5 + }, + "G4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.38, + "z": 1.5 + }, + "G5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.38, + "z": 1.5 + }, + "G6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.38, + "z": 1.5 + }, + "G7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.38, + "z": 1.5 + }, + "G8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.38, + "z": 1.5 + }, + "G9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.38, + "z": 1.5 + }, + "H1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.38, + "z": 1.5 + }, + "H10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.38, + "z": 1.5 + }, + "H11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.38, + "z": 1.5 + }, + "H12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.38, + "z": 1.5 + }, + "H2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.38, + "z": 1.5 + }, + "H3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.38, + "z": 1.5 + }, + "H4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.38, + "z": 1.5 + }, + "H5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.38, + "z": 1.5 + }, + "H6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.38, + "z": 1.5 + }, + "H7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.38, + "z": 1.5 + }, + "H8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.38, + "z": 1.5 + }, + "H9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.38, + "z": 1.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_multi_flex", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "backLeftNozzle": "G1", + "frontRightNozzle": "H1", + "primaryNozzle": "H1", + "style": "QUADRANT" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "691afd54dfa7982fb89e5f77c763bfd4", + "notes": [], + "params": { + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "D2" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c910be62291bb94458a59cb4185c5180", + "notes": [], + "params": { + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "D3" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2f59e0552969594ba6ab06f03af324e1", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B1" + }, + "result": { + "position": { + "x": 178.38, + "y": 279.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.92999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7ba58db1295d2a1b66a5e6a40d618831", + "notes": [], + "params": { + "message": "Tip rack in B2, well A1 has tip: False" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f6a04baea84331f9d79f8645ae5f367f", + "notes": [], + "params": { + "message": "Tip rack in B2, well B1 has tip: False" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3a257d45e68ca9f2c7279f9a7c31ad21", + "notes": [], + "params": { + "message": "Tip rack in B2, well C1 has tip: True" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4b1c42c87368694a75338a5577e79371", + "notes": [], + "params": { + "message": "Tip rack in B2, well D1 has tip: True" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "80cdcab7661e6faccf065771049bb6d4", + "notes": [], + "params": { + "message": "Tip rack in B2, well E1 has tip: True" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b4253d217967a7cfbc022f5e143ac580", + "notes": [], + "params": { + "message": "Tip rack in B2, well F1 has tip: True" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "60f927b4473b1fe3a70f61aabfb79781", + "notes": [], + "params": { + "message": "Tip rack in B2, well G1 has tip: True" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6f45d808ddc38796bd92b2e64bee48a4", + "notes": [], + "params": { + "message": "Tip rack in B2, well H1 has tip: True" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "UnexpectedProtocolError [line 184]: Error 4000 GENERAL_ERROR (UnexpectedProtocolError): Cannot return tip to a tiprack while the pipette is configured for partial tip.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "Cannot return tip to a tiprack while the pipette is configured for partial tip.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "UnexpectedProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_drop_tip_with_location.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_flex_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "B2" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "D2" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "D3" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Invalid tip configs that should error" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_multi_flex" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[93b724671e][OT2_X_v2_20_8_Overrides_InvalidConfigs_Override_eight_partial_column_bottom_right].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[93b724671e][OT2_X_v2_20_8_Overrides_InvalidConfigs_Override_eight_partial_column_bottom_right].json new file mode 100644 index 00000000000..a59e4a3176f --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[93b724671e][OT2_X_v2_20_8_Overrides_InvalidConfigs_Override_eight_partial_column_bottom_right].json @@ -0,0 +1,2480 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_20ul", + "location": { + "slotName": "1" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-10ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 64.69 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 20 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_20ul", + "tipLength": 39.2, + "tipOverlap": 8.25 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 74.24, + "z": 25.49 + }, + "A10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 74.24, + "z": 25.49 + }, + "A11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 74.24, + "z": 25.49 + }, + "A12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 74.24, + "z": 25.49 + }, + "A2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 74.24, + "z": 25.49 + }, + "A3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 74.24, + "z": 25.49 + }, + "A4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 74.24, + "z": 25.49 + }, + "A5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 74.24, + "z": 25.49 + }, + "A6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 74.24, + "z": 25.49 + }, + "A7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 74.24, + "z": 25.49 + }, + "A8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 74.24, + "z": 25.49 + }, + "A9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 74.24, + "z": 25.49 + }, + "B1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 65.24, + "z": 25.49 + }, + "B10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 65.24, + "z": 25.49 + }, + "B11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 65.24, + "z": 25.49 + }, + "B12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 65.24, + "z": 25.49 + }, + "B2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 65.24, + "z": 25.49 + }, + "B3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 65.24, + "z": 25.49 + }, + "B4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 65.24, + "z": 25.49 + }, + "B5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 65.24, + "z": 25.49 + }, + "B6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 65.24, + "z": 25.49 + }, + "B7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 65.24, + "z": 25.49 + }, + "B8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 65.24, + "z": 25.49 + }, + "B9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 65.24, + "z": 25.49 + }, + "C1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 56.24, + "z": 25.49 + }, + "C10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 56.24, + "z": 25.49 + }, + "C11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 56.24, + "z": 25.49 + }, + "C12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 56.24, + "z": 25.49 + }, + "C2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 56.24, + "z": 25.49 + }, + "C3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 56.24, + "z": 25.49 + }, + "C4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 56.24, + "z": 25.49 + }, + "C5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 56.24, + "z": 25.49 + }, + "C6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 56.24, + "z": 25.49 + }, + "C7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 56.24, + "z": 25.49 + }, + "C8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 56.24, + "z": 25.49 + }, + "C9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 56.24, + "z": 25.49 + }, + "D1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 47.24, + "z": 25.49 + }, + "D10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 47.24, + "z": 25.49 + }, + "D11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 47.24, + "z": 25.49 + }, + "D12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 47.24, + "z": 25.49 + }, + "D2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 47.24, + "z": 25.49 + }, + "D3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 47.24, + "z": 25.49 + }, + "D4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 47.24, + "z": 25.49 + }, + "D5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 47.24, + "z": 25.49 + }, + "D6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 47.24, + "z": 25.49 + }, + "D7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 47.24, + "z": 25.49 + }, + "D8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 47.24, + "z": 25.49 + }, + "D9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 47.24, + "z": 25.49 + }, + "E1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 38.24, + "z": 25.49 + }, + "E10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 38.24, + "z": 25.49 + }, + "E11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 38.24, + "z": 25.49 + }, + "E12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 38.24, + "z": 25.49 + }, + "E2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 38.24, + "z": 25.49 + }, + "E3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 38.24, + "z": 25.49 + }, + "E4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 38.24, + "z": 25.49 + }, + "E5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 38.24, + "z": 25.49 + }, + "E6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 38.24, + "z": 25.49 + }, + "E7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 38.24, + "z": 25.49 + }, + "E8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 38.24, + "z": 25.49 + }, + "E9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 38.24, + "z": 25.49 + }, + "F1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 29.24, + "z": 25.49 + }, + "F10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 29.24, + "z": 25.49 + }, + "F11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 29.24, + "z": 25.49 + }, + "F12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 29.24, + "z": 25.49 + }, + "F2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 29.24, + "z": 25.49 + }, + "F3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 29.24, + "z": 25.49 + }, + "F4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 29.24, + "z": 25.49 + }, + "F5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 29.24, + "z": 25.49 + }, + "F6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 29.24, + "z": 25.49 + }, + "F7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 29.24, + "z": 25.49 + }, + "F8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 29.24, + "z": 25.49 + }, + "F9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 29.24, + "z": 25.49 + }, + "G1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 20.24, + "z": 25.49 + }, + "G10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 20.24, + "z": 25.49 + }, + "G11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 20.24, + "z": 25.49 + }, + "G12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 20.24, + "z": 25.49 + }, + "G2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 20.24, + "z": 25.49 + }, + "G3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 20.24, + "z": 25.49 + }, + "G4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 20.24, + "z": 25.49 + }, + "G5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 20.24, + "z": 25.49 + }, + "G6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 20.24, + "z": 25.49 + }, + "G7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 20.24, + "z": 25.49 + }, + "G8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 20.24, + "z": 25.49 + }, + "G9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 20.24, + "z": 25.49 + }, + "H1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 11.24, + "z": 25.49 + }, + "H10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 11.24, + "z": 25.49 + }, + "H11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 11.24, + "z": 25.49 + }, + "H12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 11.24, + "z": 25.49 + }, + "H2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 11.24, + "z": 25.49 + }, + "H3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 11.24, + "z": 25.49 + }, + "H4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 11.24, + "z": 25.49 + }, + "H5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 11.24, + "z": 25.49 + }, + "H6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 11.24, + "z": 25.49 + }, + "H7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 11.24, + "z": 25.49 + }, + "H8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 11.24, + "z": 25.49 + }, + "H9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 11.24, + "z": 25.49 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50de88d471ad3910c29207fb6df4502e", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_300ul", + "location": { + "slotName": "2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-300ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 64.49 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 300 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_300ul", + "tipLength": 59.3, + "tipOverlap": 7.47 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 74.24, + "z": 5.39 + }, + "A10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 74.24, + "z": 5.39 + }, + "A11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 74.24, + "z": 5.39 + }, + "A12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 74.24, + "z": 5.39 + }, + "A2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 74.24, + "z": 5.39 + }, + "A3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 74.24, + "z": 5.39 + }, + "A4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 74.24, + "z": 5.39 + }, + "A5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 74.24, + "z": 5.39 + }, + "A6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 74.24, + "z": 5.39 + }, + "A7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 74.24, + "z": 5.39 + }, + "A8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 74.24, + "z": 5.39 + }, + "A9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 74.24, + "z": 5.39 + }, + "B1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 65.24, + "z": 5.39 + }, + "B10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 65.24, + "z": 5.39 + }, + "B11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 65.24, + "z": 5.39 + }, + "B12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 65.24, + "z": 5.39 + }, + "B2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 65.24, + "z": 5.39 + }, + "B3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 65.24, + "z": 5.39 + }, + "B4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 65.24, + "z": 5.39 + }, + "B5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 65.24, + "z": 5.39 + }, + "B6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 65.24, + "z": 5.39 + }, + "B7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 65.24, + "z": 5.39 + }, + "B8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 65.24, + "z": 5.39 + }, + "B9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 65.24, + "z": 5.39 + }, + "C1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 56.24, + "z": 5.39 + }, + "C10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 56.24, + "z": 5.39 + }, + "C11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 56.24, + "z": 5.39 + }, + "C12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 56.24, + "z": 5.39 + }, + "C2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 56.24, + "z": 5.39 + }, + "C3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 56.24, + "z": 5.39 + }, + "C4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 56.24, + "z": 5.39 + }, + "C5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 56.24, + "z": 5.39 + }, + "C6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 56.24, + "z": 5.39 + }, + "C7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 56.24, + "z": 5.39 + }, + "C8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 56.24, + "z": 5.39 + }, + "C9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 56.24, + "z": 5.39 + }, + "D1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 47.24, + "z": 5.39 + }, + "D10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 47.24, + "z": 5.39 + }, + "D11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 47.24, + "z": 5.39 + }, + "D12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 47.24, + "z": 5.39 + }, + "D2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 47.24, + "z": 5.39 + }, + "D3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 47.24, + "z": 5.39 + }, + "D4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 47.24, + "z": 5.39 + }, + "D5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 47.24, + "z": 5.39 + }, + "D6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 47.24, + "z": 5.39 + }, + "D7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 47.24, + "z": 5.39 + }, + "D8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 47.24, + "z": 5.39 + }, + "D9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 47.24, + "z": 5.39 + }, + "E1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 38.24, + "z": 5.39 + }, + "E10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 38.24, + "z": 5.39 + }, + "E11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 38.24, + "z": 5.39 + }, + "E12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 38.24, + "z": 5.39 + }, + "E2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 38.24, + "z": 5.39 + }, + "E3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 38.24, + "z": 5.39 + }, + "E4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 38.24, + "z": 5.39 + }, + "E5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 38.24, + "z": 5.39 + }, + "E6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 38.24, + "z": 5.39 + }, + "E7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 38.24, + "z": 5.39 + }, + "E8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 38.24, + "z": 5.39 + }, + "E9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 38.24, + "z": 5.39 + }, + "F1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 29.24, + "z": 5.39 + }, + "F10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 29.24, + "z": 5.39 + }, + "F11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 29.24, + "z": 5.39 + }, + "F12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 29.24, + "z": 5.39 + }, + "F2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 29.24, + "z": 5.39 + }, + "F3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 29.24, + "z": 5.39 + }, + "F4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 29.24, + "z": 5.39 + }, + "F5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 29.24, + "z": 5.39 + }, + "F6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 29.24, + "z": 5.39 + }, + "F7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 29.24, + "z": 5.39 + }, + "F8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 29.24, + "z": 5.39 + }, + "F9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 29.24, + "z": 5.39 + }, + "G1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 20.24, + "z": 5.39 + }, + "G10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 20.24, + "z": 5.39 + }, + "G11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 20.24, + "z": 5.39 + }, + "G12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 20.24, + "z": 5.39 + }, + "G2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 20.24, + "z": 5.39 + }, + "G3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 20.24, + "z": 5.39 + }, + "G4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 20.24, + "z": 5.39 + }, + "G5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 20.24, + "z": 5.39 + }, + "G6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 20.24, + "z": 5.39 + }, + "G7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 20.24, + "z": 5.39 + }, + "G8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 20.24, + "z": 5.39 + }, + "G9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 20.24, + "z": 5.39 + }, + "H1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 11.24, + "z": 5.39 + }, + "H10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 11.24, + "z": 5.39 + }, + "H11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 11.24, + "z": 5.39 + }, + "H12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 11.24, + "z": 5.39 + }, + "H2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 11.24, + "z": 5.39 + }, + "H3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 11.24, + "z": 5.39 + }, + "H4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 11.24, + "z": 5.39 + }, + "H5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 11.24, + "z": 5.39 + }, + "H6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 11.24, + "z": 5.39 + }, + "H7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 11.24, + "z": 5.39 + }, + "H8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 11.24, + "z": 5.39 + }, + "H9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 11.24, + "z": 5.39 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "54fddab1eb921f6e1d3aa7e96d2ac307", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p20_multi_gen2", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "error": { + "createdAt": "TIMESTAMP", + "detail": "No entry for back left nozzle 'G12' in pipette", + "errorCode": "4007", + "errorInfo": {}, + "errorType": "IncompatibleNozzleConfiguration", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "KeyError: 'G12'", + "errorCode": "4000", + "errorInfo": { + "args": "('G12',)", + "class": "KeyError", + "traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/hardware_control/nozzle_manager.py\", line N, in build\n back_left_row_index, back_left_column_index = _row_col_indices_for_nozzle(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/hardware_control/nozzle_manager.py\", line N, in _row_col_indices_for_nozzle\n return _row_or_col_index_for_nozzle(rows, nozzle), _row_or_col_index_for_nozzle(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/hardware_control/nozzle_manager.py\", line N, in _row_or_col_index_for_nozzle\n raise KeyError(nozzle)\n" + }, + "errorType": "PythonException", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + }, + "id": "UUID", + "key": "4b1d27a6f17f312dd76668f0c48ed406", + "notes": [], + "params": { + "configurationParams": { + "backLeftNozzle": "G12", + "frontRightNozzle": "H1", + "primaryNozzle": "H1", + "style": "QUADRANT" + }, + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "failed" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "ProtocolCommandFailedError [line 134]: Error 4000 GENERAL_ERROR (ProtocolCommandFailedError): IncompatibleNozzleConfiguration: No entry for back left nozzle 'G12' in pipette", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "IncompatibleNozzleConfiguration: No entry for back left nozzle 'G12' in pipette", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ProtocolCommandFailedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "No entry for back left nozzle 'G12' in pipette", + "errorCode": "4007", + "errorInfo": {}, + "errorType": "IncompatibleNozzleConfiguration", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "KeyError: 'G12'", + "errorCode": "4000", + "errorInfo": { + "args": "('G12',)", + "class": "KeyError", + "traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/hardware_control/nozzle_manager.py\", line N, in build\n back_left_row_index, back_left_column_index = _row_col_indices_for_nozzle(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/hardware_control/nozzle_manager.py\", line N, in _row_col_indices_for_nozzle\n return _row_or_col_index_for_nozzle(rows, nozzle), _row_or_col_index_for_nozzle(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/hardware_control/nozzle_manager.py\", line N, in _row_or_col_index_for_nozzle\n raise KeyError(nozzle)\n" + }, + "errorType": "PythonException", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ] + } + ] + } + ], + "files": [ + { + "name": "OT2_X_v2_20_8_Overrides_InvalidConfigs_Override_eight_partial_column_bottom_right.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_96_tiprack_20ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_20ul", + "location": { + "slotName": "1" + } + }, + { + "definitionUri": "opentrons/opentrons_96_tiprack_300ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_300ul", + "location": { + "slotName": "2" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Invalid tip configs that should error" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p20_multi_gen2" + } + ], + "result": "not-ok", + "robotType": "OT-2 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[a0b755a1a1][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_north_west].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[a0b755a1a1][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_north_west].json new file mode 100644 index 00000000000..eca34fc28c3 --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[a0b755a1a1][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_north_west].json @@ -0,0 +1,1500 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "C2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-1000ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 97.47 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_1000ul", + "tipLength": 88, + "tipOverlap": 7.95 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.24, + "z": 9.47 + }, + "A10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.24, + "z": 9.47 + }, + "A11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.24, + "z": 9.47 + }, + "A12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.24, + "z": 9.47 + }, + "A2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.24, + "z": 9.47 + }, + "A3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.24, + "z": 9.47 + }, + "A4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.24, + "z": 9.47 + }, + "A5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.24, + "z": 9.47 + }, + "A6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.24, + "z": 9.47 + }, + "A7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.24, + "z": 9.47 + }, + "A8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.24, + "z": 9.47 + }, + "A9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.24, + "z": 9.47 + }, + "B1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.24, + "z": 9.47 + }, + "B10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.24, + "z": 9.47 + }, + "B11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.24, + "z": 9.47 + }, + "B12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.24, + "z": 9.47 + }, + "B2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.24, + "z": 9.47 + }, + "B3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.24, + "z": 9.47 + }, + "B4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.24, + "z": 9.47 + }, + "B5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.24, + "z": 9.47 + }, + "B6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.24, + "z": 9.47 + }, + "B7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.24, + "z": 9.47 + }, + "B8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.24, + "z": 9.47 + }, + "B9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.24, + "z": 9.47 + }, + "C1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.24, + "z": 9.47 + }, + "C10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.24, + "z": 9.47 + }, + "C11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.24, + "z": 9.47 + }, + "C12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.24, + "z": 9.47 + }, + "C2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.24, + "z": 9.47 + }, + "C3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.24, + "z": 9.47 + }, + "C4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.24, + "z": 9.47 + }, + "C5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.24, + "z": 9.47 + }, + "C6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.24, + "z": 9.47 + }, + "C7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.24, + "z": 9.47 + }, + "C8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.24, + "z": 9.47 + }, + "C9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.24, + "z": 9.47 + }, + "D1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.24, + "z": 9.47 + }, + "D10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.24, + "z": 9.47 + }, + "D11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.24, + "z": 9.47 + }, + "D12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.24, + "z": 9.47 + }, + "D2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.24, + "z": 9.47 + }, + "D3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.24, + "z": 9.47 + }, + "D4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.24, + "z": 9.47 + }, + "D5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.24, + "z": 9.47 + }, + "D6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.24, + "z": 9.47 + }, + "D7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.24, + "z": 9.47 + }, + "D8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.24, + "z": 9.47 + }, + "D9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.24, + "z": 9.47 + }, + "E1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.24, + "z": 9.47 + }, + "E10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.24, + "z": 9.47 + }, + "E11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.24, + "z": 9.47 + }, + "E12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.24, + "z": 9.47 + }, + "E2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.24, + "z": 9.47 + }, + "E3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.24, + "z": 9.47 + }, + "E4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.24, + "z": 9.47 + }, + "E5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.24, + "z": 9.47 + }, + "E6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.24, + "z": 9.47 + }, + "E7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.24, + "z": 9.47 + }, + "E8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.24, + "z": 9.47 + }, + "E9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.24, + "z": 9.47 + }, + "F1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.24, + "z": 9.47 + }, + "F10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.24, + "z": 9.47 + }, + "F11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.24, + "z": 9.47 + }, + "F12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.24, + "z": 9.47 + }, + "F2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.24, + "z": 9.47 + }, + "F3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.24, + "z": 9.47 + }, + "F4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.24, + "z": 9.47 + }, + "F5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.24, + "z": 9.47 + }, + "F6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.24, + "z": 9.47 + }, + "F7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.24, + "z": 9.47 + }, + "F8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.24, + "z": 9.47 + }, + "F9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.24, + "z": 9.47 + }, + "G1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.24, + "z": 9.47 + }, + "G10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.24, + "z": 9.47 + }, + "G11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.24, + "z": 9.47 + }, + "G12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.24, + "z": 9.47 + }, + "G2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.24, + "z": 9.47 + }, + "G3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.24, + "z": 9.47 + }, + "G4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.24, + "z": 9.47 + }, + "G5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.24, + "z": 9.47 + }, + "G6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.24, + "z": 9.47 + }, + "G7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.24, + "z": 9.47 + }, + "G8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.24, + "z": 9.47 + }, + "G9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.24, + "z": 9.47 + }, + "H1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.24, + "z": 9.47 + }, + "H10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.24, + "z": 9.47 + }, + "H11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.24, + "z": 9.47 + }, + "H12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.24, + "z": 9.47 + }, + "H2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.24, + "z": 9.47 + }, + "H3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.24, + "z": 9.47 + }, + "H4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.24, + "z": 9.47 + }, + "H5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.24, + "z": 9.47 + }, + "H6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.24, + "z": 9.47 + }, + "H7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.24, + "z": 9.47 + }, + "H8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.24, + "z": 9.47 + }, + "H9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.24, + "z": 9.47 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "H12", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "691afd54dfa7982fb89e5f77c763bfd4", + "notes": [], + "params": { + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "B1" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 124.35 + }, + "gripperOffsets": {}, + "groups": [ + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352095", + "352096", + "352097", + "352099", + "352196" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 6x15 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A2", + "B1", + "B2", + "C1", + "C2" + ] + }, + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352070", + "352098" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 4x50 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A3", + "A4", + "B3", + "B4" + ] + } + ], + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Opentrons 10 Tube Rack with Falcon 4x50 mL, 6x15 mL Conical", + "displayVolumeUnits": "mL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1" + ], + [ + "A2", + "B2", + "C2" + ], + [ + "A3", + "B3" + ], + [ + "A4", + "B4" + ] + ], + "parameters": { + "format": "irregular", + "isMagneticModuleCompatible": false, + "isTiprack": false, + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical" + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 67.75, + "z": 6.85 + }, + "A2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 67.75, + "z": 6.85 + }, + "A3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 60.25, + "z": 7.3 + }, + "A4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 60.25, + "z": 7.3 + }, + "B1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 42.75, + "z": 6.85 + }, + "B2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 42.75, + "z": 6.85 + }, + "B3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 25.25, + "z": 7.3 + }, + "B4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 25.25, + "z": 7.3 + }, + "C1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 17.75, + "z": 6.85 + }, + "C2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 17.75, + "z": 6.85 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "PartialTipMovementNotAllowedError [line 479]: Error 2004 MOTION_PLANNING_FAILURE (PartialTipMovementNotAllowedError): Moving to Opentrons OT-2 96 Tip Rack 1000 µL in slot C2 with H12 nozzle partial configuration will result in collision with items in deck slot B1.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "Moving to Opentrons OT-2 96 Tip Rack 1000 µL in slot C2 with H12 nozzle partial configuration will result in collision with items in deck slot B1.", + "errorCode": "2004", + "errorInfo": {}, + "errorType": "PartialTipMovementNotAllowedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_north_west.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "C2" + } + }, + { + "definitionUri": "opentrons/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/1", + "id": "UUID", + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "B1" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Too tall labware on pickup tip" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_96" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[a8528e52b4][Flex_S_v2_20_96_None_SINGLE_HappyPathSouthSide].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[a8528e52b4][Flex_S_v2_20_96_None_SINGLE_HappyPathSouthSide].json new file mode 100644 index 00000000000..37cd7b59d59 --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[a8528e52b4][Flex_S_v2_20_96_None_SINGLE_HappyPathSouthSide].json @@ -0,0 +1,9380 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "displayName": "Partial Tip Rack", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "A2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.75, + "zDimension": 99 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 23.9, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons Flex 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_flex_96_tiprack_1000ul", + "quirks": [], + "tipLength": 95.6, + "tipOverlap": 10.5 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 121 + } + }, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.38, + "z": 1.5 + }, + "A10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.38, + "z": 1.5 + }, + "A11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.38, + "z": 1.5 + }, + "A12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.38, + "z": 1.5 + }, + "A2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.38, + "z": 1.5 + }, + "A3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.38, + "z": 1.5 + }, + "A4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.38, + "z": 1.5 + }, + "A5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.38, + "z": 1.5 + }, + "A6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.38, + "z": 1.5 + }, + "A7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.38, + "z": 1.5 + }, + "A8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.38, + "z": 1.5 + }, + "A9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.38, + "z": 1.5 + }, + "B1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.38, + "z": 1.5 + }, + "B10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.38, + "z": 1.5 + }, + "B11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.38, + "z": 1.5 + }, + "B12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.38, + "z": 1.5 + }, + "B2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.38, + "z": 1.5 + }, + "B3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.38, + "z": 1.5 + }, + "B4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.38, + "z": 1.5 + }, + "B5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.38, + "z": 1.5 + }, + "B6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.38, + "z": 1.5 + }, + "B7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.38, + "z": 1.5 + }, + "B8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.38, + "z": 1.5 + }, + "B9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.38, + "z": 1.5 + }, + "C1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.38, + "z": 1.5 + }, + "C10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.38, + "z": 1.5 + }, + "C11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.38, + "z": 1.5 + }, + "C12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.38, + "z": 1.5 + }, + "C2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.38, + "z": 1.5 + }, + "C3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.38, + "z": 1.5 + }, + "C4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.38, + "z": 1.5 + }, + "C5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.38, + "z": 1.5 + }, + "C6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.38, + "z": 1.5 + }, + "C7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.38, + "z": 1.5 + }, + "C8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.38, + "z": 1.5 + }, + "C9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.38, + "z": 1.5 + }, + "D1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.38, + "z": 1.5 + }, + "D10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.38, + "z": 1.5 + }, + "D11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.38, + "z": 1.5 + }, + "D12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.38, + "z": 1.5 + }, + "D2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.38, + "z": 1.5 + }, + "D3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.38, + "z": 1.5 + }, + "D4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.38, + "z": 1.5 + }, + "D5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.38, + "z": 1.5 + }, + "D6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.38, + "z": 1.5 + }, + "D7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.38, + "z": 1.5 + }, + "D8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.38, + "z": 1.5 + }, + "D9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.38, + "z": 1.5 + }, + "E1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.38, + "z": 1.5 + }, + "E10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.38, + "z": 1.5 + }, + "E11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.38, + "z": 1.5 + }, + "E12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.38, + "z": 1.5 + }, + "E2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.38, + "z": 1.5 + }, + "E3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.38, + "z": 1.5 + }, + "E4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.38, + "z": 1.5 + }, + "E5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.38, + "z": 1.5 + }, + "E6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.38, + "z": 1.5 + }, + "E7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.38, + "z": 1.5 + }, + "E8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.38, + "z": 1.5 + }, + "E9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.38, + "z": 1.5 + }, + "F1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.38, + "z": 1.5 + }, + "F10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.38, + "z": 1.5 + }, + "F11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.38, + "z": 1.5 + }, + "F12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.38, + "z": 1.5 + }, + "F2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.38, + "z": 1.5 + }, + "F3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.38, + "z": 1.5 + }, + "F4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.38, + "z": 1.5 + }, + "F5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.38, + "z": 1.5 + }, + "F6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.38, + "z": 1.5 + }, + "F7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.38, + "z": 1.5 + }, + "F8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.38, + "z": 1.5 + }, + "F9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.38, + "z": 1.5 + }, + "G1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.38, + "z": 1.5 + }, + "G10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.38, + "z": 1.5 + }, + "G11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.38, + "z": 1.5 + }, + "G12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.38, + "z": 1.5 + }, + "G2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.38, + "z": 1.5 + }, + "G3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.38, + "z": 1.5 + }, + "G4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.38, + "z": 1.5 + }, + "G5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.38, + "z": 1.5 + }, + "G6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.38, + "z": 1.5 + }, + "G7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.38, + "z": 1.5 + }, + "G8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.38, + "z": 1.5 + }, + "G9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.38, + "z": 1.5 + }, + "H1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.38, + "z": 1.5 + }, + "H10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.38, + "z": 1.5 + }, + "H11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.38, + "z": 1.5 + }, + "H12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.38, + "z": 1.5 + }, + "H2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.38, + "z": 1.5 + }, + "H3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.38, + "z": 1.5 + }, + "H4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.38, + "z": 1.5 + }, + "H5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.38, + "z": 1.5 + }, + "H6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.38, + "z": 1.5 + }, + "H7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.38, + "z": 1.5 + }, + "H8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.38, + "z": 1.5 + }, + "H9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.38, + "z": 1.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A1", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "691afd54dfa7982fb89e5f77c763bfd4", + "notes": [], + "params": { + "displayName": "C1 Source Labware", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "C1" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c910be62291bb94458a59cb4185c5180", + "notes": [], + "params": { + "displayName": "C2 Destination Labware", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "C2" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2f59e0552969594ba6ab06f03af324e1", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H12" + }, + "result": { + "position": { + "x": 277.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6b0053809cc5ea894449b20181bda1d6", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 32.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9d2ba7d37a294b62afe4d91153783e8d", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A4" + }, + "result": { + "position": { + "x": 41.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e8ce83939641089264883e922565169e", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 20.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 20.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bc7a3401208e1ebbf2ef653b39f7ec05", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "71264e0d8f121750fadffa4de419d934", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "957785aca5143d6556af5c2cb3c59297", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G12" + }, + "result": { + "position": { + "x": 277.38, + "y": 341.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4d87d61c6915c64c29bf9601dce504d6", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 59.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a6b3ab33bb429b17ddfcfa80e4795882", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 223.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ad078a7983560bdf409c3fafb76a20df", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dc80dca10e7a8e4eb0148afda35d9f7f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "47e2a6e4e082a3edcd417887da1391ea", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F12" + }, + "result": { + "position": { + "x": 277.38, + "y": 350.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8fcfb95fb44994648ec969a5fcc049df", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 15.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 15.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d5419055b04d30ef91ae9ad466be6814", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 5.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 232.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 5.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "beb80898b59a1324e0cab2e514684044", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 5.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A8" + }, + "result": { + "position": { + "x": 241.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 5.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b189af8f175fc84c04677212be3713cd", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 434.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowOutInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "70fbf1f310a94ff9a76abbf78aed0f5d", + "notes": [], + "params": { + "flowRate": 80.0, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "98e8fdad613e2394706e4ed69bcacd5a", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "02ddfbbad3a85f2dea9649b185df31c0", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d4b54bd1cc3ea0b0f00c771f6d069552", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E12" + }, + "result": { + "position": { + "x": 277.38, + "y": 359.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "touchTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8d44ea65bcbbc368be1bc486199c5c36", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "radius": 1.0, + "speed": 60.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -1.0 + }, + "origin": "top" + }, + "wellName": "B1" + }, + "result": { + "position": { + "x": 14.38, + "y": 172.24, + "z": 14.7 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ff637cfa2197a46f886f9a8f430cba99", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "05e32557ff805e84d62ca868c9d3ffb9", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "09a9af20ba5025d9b73f1e8abb0ae921", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D12" + }, + "result": { + "position": { + "x": 277.38, + "y": 368.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "886acb0a83206c4beffe85c574403c8c", + "notes": [], + "params": { + "axes": [ + "leftPlunger", + "leftZ" + ] + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0be564f428e87599bd9ad2c95132690f", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0d0b65bd3564dcbd484a27851516a8d8", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bc1207d443da2a4be8c29c638ed95832", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C12" + }, + "result": { + "position": { + "x": 277.38, + "y": 377.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "800a566578fc2c77b3ba63a8740bc11d", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7cdd48fe814ff91d04f2541b5bda803f", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b73df6c1dc10a15fccad64146a9253e3", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "303e819bc213e27cd87898f84a0849d8", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "05d169be70745d1a65829f1a968b95f6", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "76cef1507e46661cad77313a0ed3727d", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "77bfe511646e7418f20da0817e3b96e9", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6c13cf87265353a92dc843600b9d9203", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ade2d2d2074263c9dd505940d90c2dfb", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cccc3a958942894e8046f7b40e5ca74f", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e9c371bfd5e628a170bfbecb5db3a9fd", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7de6a6935a0a885c8bbcaf24d799c23a", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "663261a619fb3978db881c0b49ee5757", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "23b170d0f6b4310456e22bff31768726", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ca000faa3e0a7c16d820dba7f034ea17", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "358e3d9564fef6580430c29ec1abc8be", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5ae5e07479909c02ab7c3380f3d6831c", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "aba2f3c1667e265516ba1b2f7a70bd9b", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e4401c648a31e63d991b887e1e967edf", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8653a8d80a26e9ae5e402cbbf005314c", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "79f12967defc4069a8c9957178510267", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d42541fb8e9dad7fd6df764276d97e85", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 5.0000000000000036 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 20.700000000000003 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a5fe690c7ee2e46760c78e76c1799e32", + "notes": [], + "params": { + "flowRate": 80.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 5.0000000000000036 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 20.700000000000003 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "prepareToAspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "147f19190dec5bb7e8082142106cdba8", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b0f86fda12faff8a53661cffc418a681", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "27b170cfd7791ee5264cd8360381fc14", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c580bea6ba31532addf5ce76c8b0aa63", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 14.38, + "y": 154.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3a50114af65ad0ce2b5e517279c3a5b6", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d370233cdd09b4925594d9f78744c355", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "492f10d86634ba52387d3434a2c96163", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A12", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b485fe600db6f864ef8a02a863d2f2df", + "notes": [], + "params": { + "displayName": "B2 Source Labware", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "B2" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5c2612f6a457dd5a9cd1fcbef90d7202", + "notes": [], + "params": { + "displayName": "C3 Destination Labware", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "C3" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2581590044c8560d58362d124bc9bdb6", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H1" + }, + "result": { + "position": { + "x": 178.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3650650eea34d6d4e66c10e0fa1ebdb5", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 288.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3ef9c7f672bd43cde576c6d73613126d", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A4" + }, + "result": { + "position": { + "x": 205.38, + "y": 288.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6fb55db7ac1b49dbe9156eaeba8194bd", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 20.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 360.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 20.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2339acb2db069cef24c9c100f428e0db", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f6a019bfa57d0a606735ea72303528d9", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a174b97232ef172d0e27137664a19397", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 178.38, + "y": 341.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3158782be2a54e06cdb5d21858c543c4", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 223.38, + "y": 288.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fcae01b8b4e0c415dbc27208278875f8", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 387.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d42746a0d3d7fb860d731f37e437c15c", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f6c3f602d9098ce4dc436d13f9dcb273", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2e3de388c00c39ef2dee24cae75e6c1d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F1" + }, + "result": { + "position": { + "x": 178.38, + "y": 350.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7884a44cb06e8548433d28f491cceea5", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 15.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 232.38, + "y": 288.24, + "z": 1.92 + }, + "volume": 15.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bce465ed11bd648962c1f17925d1cbdf", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 5.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 396.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 5.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "91ffbc1925155dae952866f06b74a980", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 5.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A8" + }, + "result": { + "position": { + "x": 405.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 5.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "91dc16ab2f2dce621da90df5bd45e3e0", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 434.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowOutInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3161ab53aabd77d0bcadd85d2da313bf", + "notes": [], + "params": { + "flowRate": 80.0, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bb1be49b3dd7eae3db1b99859cf9b5c2", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "42068e979dd4b9cb2b97462903a1f0f5", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ec3e5a07d61f225fcde1a1a0c823380a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E1" + }, + "result": { + "position": { + "x": 178.38, + "y": 359.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "touchTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "58eee9576ecb10dfe0a4498f62a9bc16", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "radius": 1.0, + "speed": 60.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -1.0 + }, + "origin": "top" + }, + "wellName": "B1" + }, + "result": { + "position": { + "x": 178.38, + "y": 279.24, + "z": 14.7 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b7d3af3327dcf5a4b2b9aeb4d25c4268", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dccfc99f4dbd996fd6f1dbfff503f5b8", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "846e5dece4834bfca01905e3bea4601c", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 368.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "77e5462d5ef2d7d0f9d5f2ffa0f8fdb2", + "notes": [], + "params": { + "axes": [ + "leftPlunger", + "leftZ" + ] + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ea7c3fda775d7684b13ce5580091718a", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 466.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "aebb1c492347ac603b682596f730d963", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "91e93ec228e98c0289636c2864eb6c46", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C1" + }, + "result": { + "position": { + "x": 178.38, + "y": 377.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "eeb7edd79823036cfb229eb4e791f0f6", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "05fcbdb33a96b07db3ddad355c7f72c0", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "97c9e4f009511a98fce5dc76c4fe7fea", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2029dc5b30bcc4739da6fa852631a0d1", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4b708488472fbd0408b853c5346d264a", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9b2f886d5e9b192599b03520c766e1b0", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0475379c541e2ba86ffd71ad80bf0d95", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b991098c1256775c13375f2224cb3542", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7cef453d8ca1bce5e791d827488663fe", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a45727f65ed4eabbe3798d52c8426276", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c4dc466e0287dbe35ebc9c262c574b33", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e87a0a206eb43db4615755f179a768eb", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e11f0e411cde7118fc4b744156bfd609", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c1293f9799131c8772b1bf34ec155389", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7f65fbc1e61f69ec9f742e92aad0eaae", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "20ffbf6cb800a7b2d1ee50f32d7ee374", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8cc590a6565142be07c064e9df1f31c9", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a0de49c2ca6e1dca96256af101f616be", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "09dd576331ee4d9e7756516b38fb093d", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d7dfe39e2bfef7a3d3a6a4e846896112", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dfd1754741a559fbd431586a396c01cf", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1dc658dff0124e0091b1ab4391609568", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 5.0000000000000036 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 20.700000000000003 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f42637d6cb96d258b40ee87c94f2a662", + "notes": [], + "params": { + "flowRate": 80.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 5.0000000000000036 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 20.700000000000003 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "prepareToAspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4fadad19c8f235c7a5fc76f6e1049aa9", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a8dd5c8b8f316ef5c65697d84512317d", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0019e1328404f6f7bc5108407dbe942b", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ec30fc82f7f081a7abe12d2da1be7259", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f83d0dd289ab00c4ff75f6e4b95f827b", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 402.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "234fc0121d41506c465aad9fe3fac238", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [], + "files": [ + { + "name": "Flex_S_v2_20_96_None_SINGLE_HappyPathSouthSide.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_flex_96_tiprack_1000ul/1", + "displayName": "Partial Tip Rack", + "id": "UUID", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "A2" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "displayName": "C1 Source Labware", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "C1" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "displayName": "C2 Destination Labware", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "C2" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "displayName": "B2 Source Labware", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "B2" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "displayName": "C3 Destination Labware", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "C3" + } + } + ], + "liquids": [], + "metadata": { + "description": "Unsafe protocol ❗❗❗❗❗❗❗❗❗❗❗ will collide with tube.", + "protocolName": "96Channel SINGLE Happy Path A1 or A12" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_96" + } + ], + "result": "ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[acefe91275][OT2_X_v2_20_8_Overrides_InvalidConfigs_Override_eight_partial_column_bottom_left].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[acefe91275][OT2_X_v2_20_8_Overrides_InvalidConfigs_Override_eight_partial_column_bottom_left].json new file mode 100644 index 00000000000..d70c634dcc6 --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[acefe91275][OT2_X_v2_20_8_Overrides_InvalidConfigs_Override_eight_partial_column_bottom_left].json @@ -0,0 +1,2450 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_20ul", + "location": { + "slotName": "1" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-10ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 64.69 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 20 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_20ul", + "tipLength": 39.2, + "tipOverlap": 8.25 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 74.24, + "z": 25.49 + }, + "A10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 74.24, + "z": 25.49 + }, + "A11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 74.24, + "z": 25.49 + }, + "A12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 74.24, + "z": 25.49 + }, + "A2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 74.24, + "z": 25.49 + }, + "A3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 74.24, + "z": 25.49 + }, + "A4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 74.24, + "z": 25.49 + }, + "A5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 74.24, + "z": 25.49 + }, + "A6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 74.24, + "z": 25.49 + }, + "A7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 74.24, + "z": 25.49 + }, + "A8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 74.24, + "z": 25.49 + }, + "A9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 74.24, + "z": 25.49 + }, + "B1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 65.24, + "z": 25.49 + }, + "B10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 65.24, + "z": 25.49 + }, + "B11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 65.24, + "z": 25.49 + }, + "B12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 65.24, + "z": 25.49 + }, + "B2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 65.24, + "z": 25.49 + }, + "B3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 65.24, + "z": 25.49 + }, + "B4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 65.24, + "z": 25.49 + }, + "B5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 65.24, + "z": 25.49 + }, + "B6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 65.24, + "z": 25.49 + }, + "B7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 65.24, + "z": 25.49 + }, + "B8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 65.24, + "z": 25.49 + }, + "B9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 65.24, + "z": 25.49 + }, + "C1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 56.24, + "z": 25.49 + }, + "C10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 56.24, + "z": 25.49 + }, + "C11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 56.24, + "z": 25.49 + }, + "C12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 56.24, + "z": 25.49 + }, + "C2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 56.24, + "z": 25.49 + }, + "C3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 56.24, + "z": 25.49 + }, + "C4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 56.24, + "z": 25.49 + }, + "C5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 56.24, + "z": 25.49 + }, + "C6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 56.24, + "z": 25.49 + }, + "C7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 56.24, + "z": 25.49 + }, + "C8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 56.24, + "z": 25.49 + }, + "C9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 56.24, + "z": 25.49 + }, + "D1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 47.24, + "z": 25.49 + }, + "D10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 47.24, + "z": 25.49 + }, + "D11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 47.24, + "z": 25.49 + }, + "D12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 47.24, + "z": 25.49 + }, + "D2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 47.24, + "z": 25.49 + }, + "D3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 47.24, + "z": 25.49 + }, + "D4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 47.24, + "z": 25.49 + }, + "D5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 47.24, + "z": 25.49 + }, + "D6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 47.24, + "z": 25.49 + }, + "D7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 47.24, + "z": 25.49 + }, + "D8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 47.24, + "z": 25.49 + }, + "D9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 47.24, + "z": 25.49 + }, + "E1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 38.24, + "z": 25.49 + }, + "E10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 38.24, + "z": 25.49 + }, + "E11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 38.24, + "z": 25.49 + }, + "E12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 38.24, + "z": 25.49 + }, + "E2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 38.24, + "z": 25.49 + }, + "E3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 38.24, + "z": 25.49 + }, + "E4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 38.24, + "z": 25.49 + }, + "E5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 38.24, + "z": 25.49 + }, + "E6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 38.24, + "z": 25.49 + }, + "E7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 38.24, + "z": 25.49 + }, + "E8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 38.24, + "z": 25.49 + }, + "E9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 38.24, + "z": 25.49 + }, + "F1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 29.24, + "z": 25.49 + }, + "F10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 29.24, + "z": 25.49 + }, + "F11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 29.24, + "z": 25.49 + }, + "F12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 29.24, + "z": 25.49 + }, + "F2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 29.24, + "z": 25.49 + }, + "F3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 29.24, + "z": 25.49 + }, + "F4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 29.24, + "z": 25.49 + }, + "F5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 29.24, + "z": 25.49 + }, + "F6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 29.24, + "z": 25.49 + }, + "F7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 29.24, + "z": 25.49 + }, + "F8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 29.24, + "z": 25.49 + }, + "F9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 29.24, + "z": 25.49 + }, + "G1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 20.24, + "z": 25.49 + }, + "G10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 20.24, + "z": 25.49 + }, + "G11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 20.24, + "z": 25.49 + }, + "G12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 20.24, + "z": 25.49 + }, + "G2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 20.24, + "z": 25.49 + }, + "G3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 20.24, + "z": 25.49 + }, + "G4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 20.24, + "z": 25.49 + }, + "G5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 20.24, + "z": 25.49 + }, + "G6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 20.24, + "z": 25.49 + }, + "G7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 20.24, + "z": 25.49 + }, + "G8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 20.24, + "z": 25.49 + }, + "G9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 20.24, + "z": 25.49 + }, + "H1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 11.24, + "z": 25.49 + }, + "H10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 11.24, + "z": 25.49 + }, + "H11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 11.24, + "z": 25.49 + }, + "H12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 11.24, + "z": 25.49 + }, + "H2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 11.24, + "z": 25.49 + }, + "H3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 11.24, + "z": 25.49 + }, + "H4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 11.24, + "z": 25.49 + }, + "H5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 11.24, + "z": 25.49 + }, + "H6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 11.24, + "z": 25.49 + }, + "H7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 11.24, + "z": 25.49 + }, + "H8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 11.24, + "z": 25.49 + }, + "H9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 11.24, + "z": 25.49 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50de88d471ad3910c29207fb6df4502e", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_300ul", + "location": { + "slotName": "2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-300ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 64.49 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 300 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_300ul", + "tipLength": 59.3, + "tipOverlap": 7.47 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 74.24, + "z": 5.39 + }, + "A10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 74.24, + "z": 5.39 + }, + "A11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 74.24, + "z": 5.39 + }, + "A12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 74.24, + "z": 5.39 + }, + "A2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 74.24, + "z": 5.39 + }, + "A3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 74.24, + "z": 5.39 + }, + "A4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 74.24, + "z": 5.39 + }, + "A5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 74.24, + "z": 5.39 + }, + "A6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 74.24, + "z": 5.39 + }, + "A7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 74.24, + "z": 5.39 + }, + "A8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 74.24, + "z": 5.39 + }, + "A9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 74.24, + "z": 5.39 + }, + "B1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 65.24, + "z": 5.39 + }, + "B10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 65.24, + "z": 5.39 + }, + "B11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 65.24, + "z": 5.39 + }, + "B12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 65.24, + "z": 5.39 + }, + "B2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 65.24, + "z": 5.39 + }, + "B3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 65.24, + "z": 5.39 + }, + "B4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 65.24, + "z": 5.39 + }, + "B5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 65.24, + "z": 5.39 + }, + "B6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 65.24, + "z": 5.39 + }, + "B7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 65.24, + "z": 5.39 + }, + "B8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 65.24, + "z": 5.39 + }, + "B9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 65.24, + "z": 5.39 + }, + "C1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 56.24, + "z": 5.39 + }, + "C10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 56.24, + "z": 5.39 + }, + "C11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 56.24, + "z": 5.39 + }, + "C12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 56.24, + "z": 5.39 + }, + "C2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 56.24, + "z": 5.39 + }, + "C3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 56.24, + "z": 5.39 + }, + "C4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 56.24, + "z": 5.39 + }, + "C5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 56.24, + "z": 5.39 + }, + "C6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 56.24, + "z": 5.39 + }, + "C7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 56.24, + "z": 5.39 + }, + "C8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 56.24, + "z": 5.39 + }, + "C9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 56.24, + "z": 5.39 + }, + "D1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 47.24, + "z": 5.39 + }, + "D10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 47.24, + "z": 5.39 + }, + "D11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 47.24, + "z": 5.39 + }, + "D12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 47.24, + "z": 5.39 + }, + "D2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 47.24, + "z": 5.39 + }, + "D3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 47.24, + "z": 5.39 + }, + "D4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 47.24, + "z": 5.39 + }, + "D5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 47.24, + "z": 5.39 + }, + "D6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 47.24, + "z": 5.39 + }, + "D7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 47.24, + "z": 5.39 + }, + "D8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 47.24, + "z": 5.39 + }, + "D9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 47.24, + "z": 5.39 + }, + "E1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 38.24, + "z": 5.39 + }, + "E10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 38.24, + "z": 5.39 + }, + "E11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 38.24, + "z": 5.39 + }, + "E12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 38.24, + "z": 5.39 + }, + "E2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 38.24, + "z": 5.39 + }, + "E3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 38.24, + "z": 5.39 + }, + "E4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 38.24, + "z": 5.39 + }, + "E5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 38.24, + "z": 5.39 + }, + "E6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 38.24, + "z": 5.39 + }, + "E7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 38.24, + "z": 5.39 + }, + "E8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 38.24, + "z": 5.39 + }, + "E9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 38.24, + "z": 5.39 + }, + "F1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 29.24, + "z": 5.39 + }, + "F10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 29.24, + "z": 5.39 + }, + "F11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 29.24, + "z": 5.39 + }, + "F12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 29.24, + "z": 5.39 + }, + "F2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 29.24, + "z": 5.39 + }, + "F3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 29.24, + "z": 5.39 + }, + "F4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 29.24, + "z": 5.39 + }, + "F5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 29.24, + "z": 5.39 + }, + "F6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 29.24, + "z": 5.39 + }, + "F7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 29.24, + "z": 5.39 + }, + "F8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 29.24, + "z": 5.39 + }, + "F9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 29.24, + "z": 5.39 + }, + "G1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 20.24, + "z": 5.39 + }, + "G10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 20.24, + "z": 5.39 + }, + "G11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 20.24, + "z": 5.39 + }, + "G12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 20.24, + "z": 5.39 + }, + "G2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 20.24, + "z": 5.39 + }, + "G3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 20.24, + "z": 5.39 + }, + "G4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 20.24, + "z": 5.39 + }, + "G5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 20.24, + "z": 5.39 + }, + "G6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 20.24, + "z": 5.39 + }, + "G7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 20.24, + "z": 5.39 + }, + "G8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 20.24, + "z": 5.39 + }, + "G9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 20.24, + "z": 5.39 + }, + "H1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 11.24, + "z": 5.39 + }, + "H10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 11.24, + "z": 5.39 + }, + "H11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 11.24, + "z": 5.39 + }, + "H12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 11.24, + "z": 5.39 + }, + "H2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 11.24, + "z": 5.39 + }, + "H3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 11.24, + "z": 5.39 + }, + "H4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 11.24, + "z": 5.39 + }, + "H5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 11.24, + "z": 5.39 + }, + "H6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 11.24, + "z": 5.39 + }, + "H7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 11.24, + "z": 5.39 + }, + "H8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 11.24, + "z": 5.39 + }, + "H9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 11.24, + "z": 5.39 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "54fddab1eb921f6e1d3aa7e96d2ac307", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p300_multi_gen2", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "error": { + "createdAt": "TIMESTAMP", + "detail": "Attempted Nozzle Configuration does not match any approved map layout for the current pipette.", + "errorCode": "4007", + "errorInfo": {}, + "errorType": "IncompatibleNozzleConfiguration", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + }, + "id": "UUID", + "key": "4b1d27a6f17f312dd76668f0c48ed406", + "notes": [], + "params": { + "configurationParams": { + "backLeftNozzle": "A1", + "frontRightNozzle": "B1", + "primaryNozzle": "A1", + "style": "QUADRANT" + }, + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "failed" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "ProtocolCommandFailedError [line 134]: Error 4000 GENERAL_ERROR (ProtocolCommandFailedError): IncompatibleNozzleConfiguration: Attempted Nozzle Configuration does not match any approved map layout for the current pipette.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "IncompatibleNozzleConfiguration: Attempted Nozzle Configuration does not match any approved map layout for the current pipette.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ProtocolCommandFailedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "Attempted Nozzle Configuration does not match any approved map layout for the current pipette.", + "errorCode": "4007", + "errorInfo": {}, + "errorType": "IncompatibleNozzleConfiguration", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ] + } + ], + "files": [ + { + "name": "OT2_X_v2_20_8_Overrides_InvalidConfigs_Override_eight_partial_column_bottom_left.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_96_tiprack_20ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_20ul", + "location": { + "slotName": "1" + } + }, + { + "definitionUri": "opentrons/opentrons_96_tiprack_300ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_300ul", + "location": { + "slotName": "2" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Invalid tip configs that should error" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p300_multi_gen2" + } + ], + "result": "not-ok", + "robotType": "OT-2 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[afd5d372a9][Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_return_tip_error].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[afd5d372a9][Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_return_tip_error].json new file mode 100644 index 00000000000..a5b5bdb65cc --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[afd5d372a9][Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_return_tip_error].json @@ -0,0 +1,3785 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "B2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.75, + "zDimension": 99 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 23.9, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons Flex 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_flex_96_tiprack_1000ul", + "quirks": [], + "tipLength": 95.6, + "tipOverlap": 10.5 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 121 + } + }, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.38, + "z": 1.5 + }, + "A10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.38, + "z": 1.5 + }, + "A11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.38, + "z": 1.5 + }, + "A12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.38, + "z": 1.5 + }, + "A2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.38, + "z": 1.5 + }, + "A3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.38, + "z": 1.5 + }, + "A4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.38, + "z": 1.5 + }, + "A5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.38, + "z": 1.5 + }, + "A6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.38, + "z": 1.5 + }, + "A7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.38, + "z": 1.5 + }, + "A8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.38, + "z": 1.5 + }, + "A9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.38, + "z": 1.5 + }, + "B1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.38, + "z": 1.5 + }, + "B10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.38, + "z": 1.5 + }, + "B11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.38, + "z": 1.5 + }, + "B12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.38, + "z": 1.5 + }, + "B2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.38, + "z": 1.5 + }, + "B3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.38, + "z": 1.5 + }, + "B4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.38, + "z": 1.5 + }, + "B5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.38, + "z": 1.5 + }, + "B6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.38, + "z": 1.5 + }, + "B7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.38, + "z": 1.5 + }, + "B8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.38, + "z": 1.5 + }, + "B9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.38, + "z": 1.5 + }, + "C1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.38, + "z": 1.5 + }, + "C10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.38, + "z": 1.5 + }, + "C11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.38, + "z": 1.5 + }, + "C12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.38, + "z": 1.5 + }, + "C2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.38, + "z": 1.5 + }, + "C3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.38, + "z": 1.5 + }, + "C4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.38, + "z": 1.5 + }, + "C5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.38, + "z": 1.5 + }, + "C6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.38, + "z": 1.5 + }, + "C7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.38, + "z": 1.5 + }, + "C8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.38, + "z": 1.5 + }, + "C9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.38, + "z": 1.5 + }, + "D1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.38, + "z": 1.5 + }, + "D10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.38, + "z": 1.5 + }, + "D11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.38, + "z": 1.5 + }, + "D12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.38, + "z": 1.5 + }, + "D2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.38, + "z": 1.5 + }, + "D3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.38, + "z": 1.5 + }, + "D4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.38, + "z": 1.5 + }, + "D5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.38, + "z": 1.5 + }, + "D6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.38, + "z": 1.5 + }, + "D7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.38, + "z": 1.5 + }, + "D8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.38, + "z": 1.5 + }, + "D9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.38, + "z": 1.5 + }, + "E1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.38, + "z": 1.5 + }, + "E10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.38, + "z": 1.5 + }, + "E11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.38, + "z": 1.5 + }, + "E12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.38, + "z": 1.5 + }, + "E2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.38, + "z": 1.5 + }, + "E3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.38, + "z": 1.5 + }, + "E4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.38, + "z": 1.5 + }, + "E5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.38, + "z": 1.5 + }, + "E6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.38, + "z": 1.5 + }, + "E7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.38, + "z": 1.5 + }, + "E8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.38, + "z": 1.5 + }, + "E9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.38, + "z": 1.5 + }, + "F1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.38, + "z": 1.5 + }, + "F10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.38, + "z": 1.5 + }, + "F11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.38, + "z": 1.5 + }, + "F12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.38, + "z": 1.5 + }, + "F2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.38, + "z": 1.5 + }, + "F3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.38, + "z": 1.5 + }, + "F4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.38, + "z": 1.5 + }, + "F5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.38, + "z": 1.5 + }, + "F6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.38, + "z": 1.5 + }, + "F7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.38, + "z": 1.5 + }, + "F8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.38, + "z": 1.5 + }, + "F9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.38, + "z": 1.5 + }, + "G1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.38, + "z": 1.5 + }, + "G10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.38, + "z": 1.5 + }, + "G11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.38, + "z": 1.5 + }, + "G12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.38, + "z": 1.5 + }, + "G2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.38, + "z": 1.5 + }, + "G3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.38, + "z": 1.5 + }, + "G4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.38, + "z": 1.5 + }, + "G5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.38, + "z": 1.5 + }, + "G6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.38, + "z": 1.5 + }, + "G7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.38, + "z": 1.5 + }, + "G8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.38, + "z": 1.5 + }, + "G9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.38, + "z": 1.5 + }, + "H1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.38, + "z": 1.5 + }, + "H10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.38, + "z": 1.5 + }, + "H11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.38, + "z": 1.5 + }, + "H12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.38, + "z": 1.5 + }, + "H2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.38, + "z": 1.5 + }, + "H3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.38, + "z": 1.5 + }, + "H4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.38, + "z": 1.5 + }, + "H5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.38, + "z": 1.5 + }, + "H6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.38, + "z": 1.5 + }, + "H7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.38, + "z": 1.5 + }, + "H8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.38, + "z": 1.5 + }, + "H9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.38, + "z": 1.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_multi_flex", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "backLeftNozzle": "G1", + "frontRightNozzle": "H1", + "primaryNozzle": "H1", + "style": "QUADRANT" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "691afd54dfa7982fb89e5f77c763bfd4", + "notes": [], + "params": { + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "D2" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c910be62291bb94458a59cb4185c5180", + "notes": [], + "params": { + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "D3" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2f59e0552969594ba6ab06f03af324e1", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B1" + }, + "result": { + "position": { + "x": 178.38, + "y": 279.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.92999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7ba58db1295d2a1b66a5e6a40d618831", + "notes": [], + "params": { + "message": "Tip rack in B2, well A1 has tip: False" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f6a04baea84331f9d79f8645ae5f367f", + "notes": [], + "params": { + "message": "Tip rack in B2, well B1 has tip: False" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3a257d45e68ca9f2c7279f9a7c31ad21", + "notes": [], + "params": { + "message": "Tip rack in B2, well C1 has tip: True" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4b1c42c87368694a75338a5577e79371", + "notes": [], + "params": { + "message": "Tip rack in B2, well D1 has tip: True" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "80cdcab7661e6faccf065771049bb6d4", + "notes": [], + "params": { + "message": "Tip rack in B2, well E1 has tip: True" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b4253d217967a7cfbc022f5e143ac580", + "notes": [], + "params": { + "message": "Tip rack in B2, well F1 has tip: True" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "60f927b4473b1fe3a70f61aabfb79781", + "notes": [], + "params": { + "message": "Tip rack in B2, well G1 has tip: True" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6f45d808ddc38796bd92b2e64bee48a4", + "notes": [], + "params": { + "message": "Tip rack in B2, well H1 has tip: True" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "UnexpectedProtocolError [line 180]: Error 4000 GENERAL_ERROR (UnexpectedProtocolError): Cannot return tip to a tiprack while the pipette is configured for partial tip.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "Cannot return tip to a tiprack while the pipette is configured for partial tip.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "UnexpectedProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_return_tip_error.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_flex_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "B2" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "D2" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "D3" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Invalid tip configs that should error" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_multi_flex" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[b79134ab8a][OT2_X_v2_20_8_Overrides_InvalidConfigs_Override_drop_tip_with_location].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[b79134ab8a][OT2_X_v2_20_8_Overrides_InvalidConfigs_Override_drop_tip_with_location].json new file mode 100644 index 00000000000..b3637624ed4 --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[b79134ab8a][OT2_X_v2_20_8_Overrides_InvalidConfigs_Override_drop_tip_with_location].json @@ -0,0 +1,4939 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_20ul", + "location": { + "slotName": "1" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-10ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 64.69 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 20 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_20ul", + "tipLength": 39.2, + "tipOverlap": 8.25 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 74.24, + "z": 25.49 + }, + "A10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 74.24, + "z": 25.49 + }, + "A11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 74.24, + "z": 25.49 + }, + "A12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 74.24, + "z": 25.49 + }, + "A2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 74.24, + "z": 25.49 + }, + "A3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 74.24, + "z": 25.49 + }, + "A4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 74.24, + "z": 25.49 + }, + "A5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 74.24, + "z": 25.49 + }, + "A6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 74.24, + "z": 25.49 + }, + "A7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 74.24, + "z": 25.49 + }, + "A8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 74.24, + "z": 25.49 + }, + "A9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 74.24, + "z": 25.49 + }, + "B1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 65.24, + "z": 25.49 + }, + "B10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 65.24, + "z": 25.49 + }, + "B11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 65.24, + "z": 25.49 + }, + "B12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 65.24, + "z": 25.49 + }, + "B2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 65.24, + "z": 25.49 + }, + "B3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 65.24, + "z": 25.49 + }, + "B4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 65.24, + "z": 25.49 + }, + "B5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 65.24, + "z": 25.49 + }, + "B6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 65.24, + "z": 25.49 + }, + "B7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 65.24, + "z": 25.49 + }, + "B8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 65.24, + "z": 25.49 + }, + "B9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 65.24, + "z": 25.49 + }, + "C1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 56.24, + "z": 25.49 + }, + "C10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 56.24, + "z": 25.49 + }, + "C11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 56.24, + "z": 25.49 + }, + "C12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 56.24, + "z": 25.49 + }, + "C2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 56.24, + "z": 25.49 + }, + "C3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 56.24, + "z": 25.49 + }, + "C4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 56.24, + "z": 25.49 + }, + "C5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 56.24, + "z": 25.49 + }, + "C6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 56.24, + "z": 25.49 + }, + "C7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 56.24, + "z": 25.49 + }, + "C8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 56.24, + "z": 25.49 + }, + "C9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 56.24, + "z": 25.49 + }, + "D1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 47.24, + "z": 25.49 + }, + "D10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 47.24, + "z": 25.49 + }, + "D11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 47.24, + "z": 25.49 + }, + "D12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 47.24, + "z": 25.49 + }, + "D2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 47.24, + "z": 25.49 + }, + "D3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 47.24, + "z": 25.49 + }, + "D4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 47.24, + "z": 25.49 + }, + "D5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 47.24, + "z": 25.49 + }, + "D6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 47.24, + "z": 25.49 + }, + "D7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 47.24, + "z": 25.49 + }, + "D8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 47.24, + "z": 25.49 + }, + "D9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 47.24, + "z": 25.49 + }, + "E1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 38.24, + "z": 25.49 + }, + "E10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 38.24, + "z": 25.49 + }, + "E11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 38.24, + "z": 25.49 + }, + "E12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 38.24, + "z": 25.49 + }, + "E2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 38.24, + "z": 25.49 + }, + "E3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 38.24, + "z": 25.49 + }, + "E4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 38.24, + "z": 25.49 + }, + "E5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 38.24, + "z": 25.49 + }, + "E6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 38.24, + "z": 25.49 + }, + "E7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 38.24, + "z": 25.49 + }, + "E8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 38.24, + "z": 25.49 + }, + "E9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 38.24, + "z": 25.49 + }, + "F1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 29.24, + "z": 25.49 + }, + "F10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 29.24, + "z": 25.49 + }, + "F11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 29.24, + "z": 25.49 + }, + "F12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 29.24, + "z": 25.49 + }, + "F2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 29.24, + "z": 25.49 + }, + "F3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 29.24, + "z": 25.49 + }, + "F4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 29.24, + "z": 25.49 + }, + "F5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 29.24, + "z": 25.49 + }, + "F6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 29.24, + "z": 25.49 + }, + "F7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 29.24, + "z": 25.49 + }, + "F8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 29.24, + "z": 25.49 + }, + "F9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 29.24, + "z": 25.49 + }, + "G1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 20.24, + "z": 25.49 + }, + "G10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 20.24, + "z": 25.49 + }, + "G11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 20.24, + "z": 25.49 + }, + "G12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 20.24, + "z": 25.49 + }, + "G2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 20.24, + "z": 25.49 + }, + "G3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 20.24, + "z": 25.49 + }, + "G4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 20.24, + "z": 25.49 + }, + "G5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 20.24, + "z": 25.49 + }, + "G6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 20.24, + "z": 25.49 + }, + "G7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 20.24, + "z": 25.49 + }, + "G8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 20.24, + "z": 25.49 + }, + "G9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 20.24, + "z": 25.49 + }, + "H1": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 14.38, + "y": 11.24, + "z": 25.49 + }, + "H10": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 95.38, + "y": 11.24, + "z": 25.49 + }, + "H11": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 104.38, + "y": 11.24, + "z": 25.49 + }, + "H12": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 113.38, + "y": 11.24, + "z": 25.49 + }, + "H2": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 23.38, + "y": 11.24, + "z": 25.49 + }, + "H3": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 32.38, + "y": 11.24, + "z": 25.49 + }, + "H4": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 41.38, + "y": 11.24, + "z": 25.49 + }, + "H5": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 50.38, + "y": 11.24, + "z": 25.49 + }, + "H6": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 59.38, + "y": 11.24, + "z": 25.49 + }, + "H7": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 68.38, + "y": 11.24, + "z": 25.49 + }, + "H8": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 77.38, + "y": 11.24, + "z": 25.49 + }, + "H9": { + "depth": 39.2, + "diameter": 3.27, + "shape": "circular", + "totalLiquidVolume": 20, + "x": 86.38, + "y": 11.24, + "z": 25.49 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50de88d471ad3910c29207fb6df4502e", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_300ul", + "location": { + "slotName": "2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-300ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 64.49 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 300 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_300ul", + "tipLength": 59.3, + "tipOverlap": 7.47 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 74.24, + "z": 5.39 + }, + "A10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 74.24, + "z": 5.39 + }, + "A11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 74.24, + "z": 5.39 + }, + "A12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 74.24, + "z": 5.39 + }, + "A2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 74.24, + "z": 5.39 + }, + "A3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 74.24, + "z": 5.39 + }, + "A4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 74.24, + "z": 5.39 + }, + "A5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 74.24, + "z": 5.39 + }, + "A6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 74.24, + "z": 5.39 + }, + "A7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 74.24, + "z": 5.39 + }, + "A8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 74.24, + "z": 5.39 + }, + "A9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 74.24, + "z": 5.39 + }, + "B1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 65.24, + "z": 5.39 + }, + "B10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 65.24, + "z": 5.39 + }, + "B11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 65.24, + "z": 5.39 + }, + "B12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 65.24, + "z": 5.39 + }, + "B2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 65.24, + "z": 5.39 + }, + "B3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 65.24, + "z": 5.39 + }, + "B4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 65.24, + "z": 5.39 + }, + "B5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 65.24, + "z": 5.39 + }, + "B6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 65.24, + "z": 5.39 + }, + "B7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 65.24, + "z": 5.39 + }, + "B8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 65.24, + "z": 5.39 + }, + "B9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 65.24, + "z": 5.39 + }, + "C1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 56.24, + "z": 5.39 + }, + "C10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 56.24, + "z": 5.39 + }, + "C11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 56.24, + "z": 5.39 + }, + "C12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 56.24, + "z": 5.39 + }, + "C2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 56.24, + "z": 5.39 + }, + "C3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 56.24, + "z": 5.39 + }, + "C4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 56.24, + "z": 5.39 + }, + "C5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 56.24, + "z": 5.39 + }, + "C6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 56.24, + "z": 5.39 + }, + "C7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 56.24, + "z": 5.39 + }, + "C8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 56.24, + "z": 5.39 + }, + "C9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 56.24, + "z": 5.39 + }, + "D1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 47.24, + "z": 5.39 + }, + "D10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 47.24, + "z": 5.39 + }, + "D11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 47.24, + "z": 5.39 + }, + "D12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 47.24, + "z": 5.39 + }, + "D2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 47.24, + "z": 5.39 + }, + "D3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 47.24, + "z": 5.39 + }, + "D4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 47.24, + "z": 5.39 + }, + "D5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 47.24, + "z": 5.39 + }, + "D6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 47.24, + "z": 5.39 + }, + "D7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 47.24, + "z": 5.39 + }, + "D8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 47.24, + "z": 5.39 + }, + "D9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 47.24, + "z": 5.39 + }, + "E1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 38.24, + "z": 5.39 + }, + "E10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 38.24, + "z": 5.39 + }, + "E11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 38.24, + "z": 5.39 + }, + "E12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 38.24, + "z": 5.39 + }, + "E2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 38.24, + "z": 5.39 + }, + "E3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 38.24, + "z": 5.39 + }, + "E4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 38.24, + "z": 5.39 + }, + "E5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 38.24, + "z": 5.39 + }, + "E6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 38.24, + "z": 5.39 + }, + "E7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 38.24, + "z": 5.39 + }, + "E8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 38.24, + "z": 5.39 + }, + "E9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 38.24, + "z": 5.39 + }, + "F1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 29.24, + "z": 5.39 + }, + "F10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 29.24, + "z": 5.39 + }, + "F11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 29.24, + "z": 5.39 + }, + "F12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 29.24, + "z": 5.39 + }, + "F2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 29.24, + "z": 5.39 + }, + "F3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 29.24, + "z": 5.39 + }, + "F4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 29.24, + "z": 5.39 + }, + "F5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 29.24, + "z": 5.39 + }, + "F6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 29.24, + "z": 5.39 + }, + "F7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 29.24, + "z": 5.39 + }, + "F8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 29.24, + "z": 5.39 + }, + "F9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 29.24, + "z": 5.39 + }, + "G1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 20.24, + "z": 5.39 + }, + "G10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 20.24, + "z": 5.39 + }, + "G11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 20.24, + "z": 5.39 + }, + "G12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 20.24, + "z": 5.39 + }, + "G2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 20.24, + "z": 5.39 + }, + "G3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 20.24, + "z": 5.39 + }, + "G4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 20.24, + "z": 5.39 + }, + "G5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 20.24, + "z": 5.39 + }, + "G6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 20.24, + "z": 5.39 + }, + "G7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 20.24, + "z": 5.39 + }, + "G8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 20.24, + "z": 5.39 + }, + "G9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 20.24, + "z": 5.39 + }, + "H1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 11.24, + "z": 5.39 + }, + "H10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 11.24, + "z": 5.39 + }, + "H11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 11.24, + "z": 5.39 + }, + "H12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 11.24, + "z": 5.39 + }, + "H2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 11.24, + "z": 5.39 + }, + "H3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 11.24, + "z": 5.39 + }, + "H4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 11.24, + "z": 5.39 + }, + "H5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 11.24, + "z": 5.39 + }, + "H6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 11.24, + "z": 5.39 + }, + "H7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 11.24, + "z": 5.39 + }, + "H8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 11.24, + "z": 5.39 + }, + "H9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 11.24, + "z": 5.39 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "54fddab1eb921f6e1d3aa7e96d2ac307", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p300_multi_gen2", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4b1d27a6f17f312dd76668f0c48ed406", + "notes": [], + "params": { + "configurationParams": { + "backLeftNozzle": "G1", + "frontRightNozzle": "H1", + "primaryNozzle": "H1", + "style": "QUADRANT" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8f1105742fe19ad1e0b7c436509543f3", + "notes": [], + "params": { + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "4" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "51917f4fe2c45a5895dd30e853f4b689", + "notes": [], + "params": { + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "5" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bb4e42ce3a347009d85098cb49c54446", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B1" + }, + "result": { + "position": { + "x": 146.88, + "y": 65.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3e2d6ccf28ac1864869f3fba1e6c918c", + "notes": [], + "params": { + "message": "Tip rack in 2, well A1 has tip: False" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "adb87a628b0270e6b7ea03956c308caf", + "notes": [], + "params": { + "message": "Tip rack in 2, well B1 has tip: False" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d52723fce284549fc5363df14c8af77b", + "notes": [], + "params": { + "message": "Tip rack in 2, well C1 has tip: True" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1eb8c634a559f734e5bf0152943ccfc5", + "notes": [], + "params": { + "message": "Tip rack in 2, well D1 has tip: True" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3e38d3b5e3cfe9ddb63397a97e876ed4", + "notes": [], + "params": { + "message": "Tip rack in 2, well E1 has tip: True" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8c0f1de98d6cbf48fd9e76be1389b807", + "notes": [], + "params": { + "message": "Tip rack in 2, well F1 has tip: True" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "560a90fcbfc35c9f895b03c1d49abd29", + "notes": [], + "params": { + "message": "Tip rack in 2, well G1 has tip: True" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "eb9fed787fef1871ea9fbc3f506af0e6", + "notes": [], + "params": { + "message": "Tip rack in 2, well H1 has tip: True" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "UnexpectedProtocolError [line 150]: Error 4000 GENERAL_ERROR (UnexpectedProtocolError): Cannot return tip to a tiprack while the pipette is configured for partial tip.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "Cannot return tip to a tiprack while the pipette is configured for partial tip.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "UnexpectedProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ], + "files": [ + { + "name": "OT2_X_v2_20_8_Overrides_InvalidConfigs_Override_drop_tip_with_location.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_96_tiprack_20ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_20ul", + "location": { + "slotName": "1" + } + }, + { + "definitionUri": "opentrons/opentrons_96_tiprack_300ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_300ul", + "location": { + "slotName": "2" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "4" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "5" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Invalid tip configs that should error" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p300_multi_gen2" + } + ], + "result": "not-ok", + "robotType": "OT-2 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[bc049301c1][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_transfer_destination_collision].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[bc049301c1][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_transfer_destination_collision].json new file mode 100644 index 00000000000..f0684b8e86d --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[bc049301c1][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_transfer_destination_collision].json @@ -0,0 +1,3930 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "B2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-1000ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 97.47 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_1000ul", + "tipLength": 88, + "tipOverlap": 7.95 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.24, + "z": 9.47 + }, + "A10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.24, + "z": 9.47 + }, + "A11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.24, + "z": 9.47 + }, + "A12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.24, + "z": 9.47 + }, + "A2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.24, + "z": 9.47 + }, + "A3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.24, + "z": 9.47 + }, + "A4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.24, + "z": 9.47 + }, + "A5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.24, + "z": 9.47 + }, + "A6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.24, + "z": 9.47 + }, + "A7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.24, + "z": 9.47 + }, + "A8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.24, + "z": 9.47 + }, + "A9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.24, + "z": 9.47 + }, + "B1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.24, + "z": 9.47 + }, + "B10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.24, + "z": 9.47 + }, + "B11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.24, + "z": 9.47 + }, + "B12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.24, + "z": 9.47 + }, + "B2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.24, + "z": 9.47 + }, + "B3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.24, + "z": 9.47 + }, + "B4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.24, + "z": 9.47 + }, + "B5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.24, + "z": 9.47 + }, + "B6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.24, + "z": 9.47 + }, + "B7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.24, + "z": 9.47 + }, + "B8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.24, + "z": 9.47 + }, + "B9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.24, + "z": 9.47 + }, + "C1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.24, + "z": 9.47 + }, + "C10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.24, + "z": 9.47 + }, + "C11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.24, + "z": 9.47 + }, + "C12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.24, + "z": 9.47 + }, + "C2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.24, + "z": 9.47 + }, + "C3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.24, + "z": 9.47 + }, + "C4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.24, + "z": 9.47 + }, + "C5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.24, + "z": 9.47 + }, + "C6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.24, + "z": 9.47 + }, + "C7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.24, + "z": 9.47 + }, + "C8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.24, + "z": 9.47 + }, + "C9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.24, + "z": 9.47 + }, + "D1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.24, + "z": 9.47 + }, + "D10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.24, + "z": 9.47 + }, + "D11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.24, + "z": 9.47 + }, + "D12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.24, + "z": 9.47 + }, + "D2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.24, + "z": 9.47 + }, + "D3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.24, + "z": 9.47 + }, + "D4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.24, + "z": 9.47 + }, + "D5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.24, + "z": 9.47 + }, + "D6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.24, + "z": 9.47 + }, + "D7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.24, + "z": 9.47 + }, + "D8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.24, + "z": 9.47 + }, + "D9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.24, + "z": 9.47 + }, + "E1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.24, + "z": 9.47 + }, + "E10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.24, + "z": 9.47 + }, + "E11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.24, + "z": 9.47 + }, + "E12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.24, + "z": 9.47 + }, + "E2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.24, + "z": 9.47 + }, + "E3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.24, + "z": 9.47 + }, + "E4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.24, + "z": 9.47 + }, + "E5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.24, + "z": 9.47 + }, + "E6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.24, + "z": 9.47 + }, + "E7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.24, + "z": 9.47 + }, + "E8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.24, + "z": 9.47 + }, + "E9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.24, + "z": 9.47 + }, + "F1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.24, + "z": 9.47 + }, + "F10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.24, + "z": 9.47 + }, + "F11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.24, + "z": 9.47 + }, + "F12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.24, + "z": 9.47 + }, + "F2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.24, + "z": 9.47 + }, + "F3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.24, + "z": 9.47 + }, + "F4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.24, + "z": 9.47 + }, + "F5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.24, + "z": 9.47 + }, + "F6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.24, + "z": 9.47 + }, + "F7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.24, + "z": 9.47 + }, + "F8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.24, + "z": 9.47 + }, + "F9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.24, + "z": 9.47 + }, + "G1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.24, + "z": 9.47 + }, + "G10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.24, + "z": 9.47 + }, + "G11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.24, + "z": 9.47 + }, + "G12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.24, + "z": 9.47 + }, + "G2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.24, + "z": 9.47 + }, + "G3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.24, + "z": 9.47 + }, + "G4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.24, + "z": 9.47 + }, + "G5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.24, + "z": 9.47 + }, + "G6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.24, + "z": 9.47 + }, + "G7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.24, + "z": 9.47 + }, + "G8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.24, + "z": 9.47 + }, + "G9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.24, + "z": 9.47 + }, + "H1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.24, + "z": 9.47 + }, + "H10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.24, + "z": 9.47 + }, + "H11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.24, + "z": 9.47 + }, + "H12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.24, + "z": 9.47 + }, + "H2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.24, + "z": 9.47 + }, + "H3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.24, + "z": 9.47 + }, + "H4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.24, + "z": 9.47 + }, + "H5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.24, + "z": 9.47 + }, + "H6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.24, + "z": 9.47 + }, + "H7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.24, + "z": 9.47 + }, + "H8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.24, + "z": 9.47 + }, + "H9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.24, + "z": 9.47 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "H12", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "691afd54dfa7982fb89e5f77c763bfd4", + "notes": [], + "params": { + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "C3" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 124.35 + }, + "gripperOffsets": {}, + "groups": [ + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352095", + "352096", + "352097", + "352099", + "352196" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 6x15 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A2", + "B1", + "B2", + "C1", + "C2" + ] + }, + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352070", + "352098" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 4x50 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A3", + "A4", + "B3", + "B4" + ] + } + ], + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Opentrons 10 Tube Rack with Falcon 4x50 mL, 6x15 mL Conical", + "displayVolumeUnits": "mL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1" + ], + [ + "A2", + "B2", + "C2" + ], + [ + "A3", + "B3" + ], + [ + "A4", + "B4" + ] + ], + "parameters": { + "format": "irregular", + "isMagneticModuleCompatible": false, + "isTiprack": false, + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical" + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 67.75, + "z": 6.85 + }, + "A2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 67.75, + "z": 6.85 + }, + "A3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 60.25, + "z": 7.3 + }, + "A4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 60.25, + "z": 7.3 + }, + "B1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 42.75, + "z": 6.85 + }, + "B2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 42.75, + "z": 6.85 + }, + "B3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 25.25, + "z": 7.3 + }, + "B4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 25.25, + "z": 7.3 + }, + "C1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 17.75, + "z": 6.85 + }, + "C2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 17.75, + "z": 6.85 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c910be62291bb94458a59cb4185c5180", + "notes": [], + "params": { + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "D2" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d75e38152238e9ad0c18e291fe97e483", + "notes": [], + "params": { + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "D3" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8de5f9595204f05bd1016cce23cd32b9", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 178.38, + "y": 288.24, + "z": 97.47 + }, + "tipDiameter": 7.23, + "tipLength": 77.5, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d770b3dd007307016fd235b6e50d1e5d", + "notes": [], + "params": { + "flowRate": 160.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 178.38, + "y": 74.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "PartialTipMovementNotAllowedError [line 482]: Error 2004 MOTION_PLANNING_FAILURE (PartialTipMovementNotAllowedError): Moving to NEST 96 Well Plate 100 µL PCR Full Skirt in slot D3 with H12 nozzle partial configuration will result in collision with items in deck slot C3.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "Moving to NEST 96 Well Plate 100 µL PCR Full Skirt in slot D3 with H12 nozzle partial configuration will result in collision with items in deck slot C3.", + "errorCode": "2004", + "errorInfo": {}, + "errorType": "PartialTipMovementNotAllowedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_transfer_destination_collision.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "B2" + } + }, + { + "definitionUri": "opentrons/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/1", + "id": "UUID", + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "C3" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "D2" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "D3" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Too tall labware on pickup tip" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_96" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[c0435f08da][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_north].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[c0435f08da][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_north].json new file mode 100644 index 00000000000..67a07aa1297 --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[c0435f08da][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_north].json @@ -0,0 +1,1500 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "C2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-1000ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 97.47 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_1000ul", + "tipLength": 88, + "tipOverlap": 7.95 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.24, + "z": 9.47 + }, + "A10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.24, + "z": 9.47 + }, + "A11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.24, + "z": 9.47 + }, + "A12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.24, + "z": 9.47 + }, + "A2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.24, + "z": 9.47 + }, + "A3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.24, + "z": 9.47 + }, + "A4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.24, + "z": 9.47 + }, + "A5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.24, + "z": 9.47 + }, + "A6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.24, + "z": 9.47 + }, + "A7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.24, + "z": 9.47 + }, + "A8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.24, + "z": 9.47 + }, + "A9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.24, + "z": 9.47 + }, + "B1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.24, + "z": 9.47 + }, + "B10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.24, + "z": 9.47 + }, + "B11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.24, + "z": 9.47 + }, + "B12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.24, + "z": 9.47 + }, + "B2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.24, + "z": 9.47 + }, + "B3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.24, + "z": 9.47 + }, + "B4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.24, + "z": 9.47 + }, + "B5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.24, + "z": 9.47 + }, + "B6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.24, + "z": 9.47 + }, + "B7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.24, + "z": 9.47 + }, + "B8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.24, + "z": 9.47 + }, + "B9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.24, + "z": 9.47 + }, + "C1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.24, + "z": 9.47 + }, + "C10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.24, + "z": 9.47 + }, + "C11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.24, + "z": 9.47 + }, + "C12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.24, + "z": 9.47 + }, + "C2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.24, + "z": 9.47 + }, + "C3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.24, + "z": 9.47 + }, + "C4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.24, + "z": 9.47 + }, + "C5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.24, + "z": 9.47 + }, + "C6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.24, + "z": 9.47 + }, + "C7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.24, + "z": 9.47 + }, + "C8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.24, + "z": 9.47 + }, + "C9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.24, + "z": 9.47 + }, + "D1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.24, + "z": 9.47 + }, + "D10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.24, + "z": 9.47 + }, + "D11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.24, + "z": 9.47 + }, + "D12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.24, + "z": 9.47 + }, + "D2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.24, + "z": 9.47 + }, + "D3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.24, + "z": 9.47 + }, + "D4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.24, + "z": 9.47 + }, + "D5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.24, + "z": 9.47 + }, + "D6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.24, + "z": 9.47 + }, + "D7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.24, + "z": 9.47 + }, + "D8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.24, + "z": 9.47 + }, + "D9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.24, + "z": 9.47 + }, + "E1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.24, + "z": 9.47 + }, + "E10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.24, + "z": 9.47 + }, + "E11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.24, + "z": 9.47 + }, + "E12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.24, + "z": 9.47 + }, + "E2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.24, + "z": 9.47 + }, + "E3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.24, + "z": 9.47 + }, + "E4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.24, + "z": 9.47 + }, + "E5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.24, + "z": 9.47 + }, + "E6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.24, + "z": 9.47 + }, + "E7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.24, + "z": 9.47 + }, + "E8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.24, + "z": 9.47 + }, + "E9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.24, + "z": 9.47 + }, + "F1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.24, + "z": 9.47 + }, + "F10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.24, + "z": 9.47 + }, + "F11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.24, + "z": 9.47 + }, + "F12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.24, + "z": 9.47 + }, + "F2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.24, + "z": 9.47 + }, + "F3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.24, + "z": 9.47 + }, + "F4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.24, + "z": 9.47 + }, + "F5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.24, + "z": 9.47 + }, + "F6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.24, + "z": 9.47 + }, + "F7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.24, + "z": 9.47 + }, + "F8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.24, + "z": 9.47 + }, + "F9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.24, + "z": 9.47 + }, + "G1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.24, + "z": 9.47 + }, + "G10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.24, + "z": 9.47 + }, + "G11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.24, + "z": 9.47 + }, + "G12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.24, + "z": 9.47 + }, + "G2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.24, + "z": 9.47 + }, + "G3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.24, + "z": 9.47 + }, + "G4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.24, + "z": 9.47 + }, + "G5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.24, + "z": 9.47 + }, + "G6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.24, + "z": 9.47 + }, + "G7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.24, + "z": 9.47 + }, + "G8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.24, + "z": 9.47 + }, + "G9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.24, + "z": 9.47 + }, + "H1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.24, + "z": 9.47 + }, + "H10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.24, + "z": 9.47 + }, + "H11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.24, + "z": 9.47 + }, + "H12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.24, + "z": 9.47 + }, + "H2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.24, + "z": 9.47 + }, + "H3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.24, + "z": 9.47 + }, + "H4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.24, + "z": 9.47 + }, + "H5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.24, + "z": 9.47 + }, + "H6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.24, + "z": 9.47 + }, + "H7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.24, + "z": 9.47 + }, + "H8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.24, + "z": 9.47 + }, + "H9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.24, + "z": 9.47 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "H12", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "691afd54dfa7982fb89e5f77c763bfd4", + "notes": [], + "params": { + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "B2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 124.35 + }, + "gripperOffsets": {}, + "groups": [ + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352095", + "352096", + "352097", + "352099", + "352196" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 6x15 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A2", + "B1", + "B2", + "C1", + "C2" + ] + }, + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352070", + "352098" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 4x50 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A3", + "A4", + "B3", + "B4" + ] + } + ], + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Opentrons 10 Tube Rack with Falcon 4x50 mL, 6x15 mL Conical", + "displayVolumeUnits": "mL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1" + ], + [ + "A2", + "B2", + "C2" + ], + [ + "A3", + "B3" + ], + [ + "A4", + "B4" + ] + ], + "parameters": { + "format": "irregular", + "isMagneticModuleCompatible": false, + "isTiprack": false, + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical" + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 67.75, + "z": 6.85 + }, + "A2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 67.75, + "z": 6.85 + }, + "A3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 60.25, + "z": 7.3 + }, + "A4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 60.25, + "z": 7.3 + }, + "B1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 42.75, + "z": 6.85 + }, + "B2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 42.75, + "z": 6.85 + }, + "B3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 25.25, + "z": 7.3 + }, + "B4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 25.25, + "z": 7.3 + }, + "C1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 17.75, + "z": 6.85 + }, + "C2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 17.75, + "z": 6.85 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "PartialTipMovementNotAllowedError [line 479]: Error 2004 MOTION_PLANNING_FAILURE (PartialTipMovementNotAllowedError): Moving to Opentrons OT-2 96 Tip Rack 1000 µL in slot C2 with H12 nozzle partial configuration will result in collision with items in deck slot B2.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "Moving to Opentrons OT-2 96 Tip Rack 1000 µL in slot C2 with H12 nozzle partial configuration will result in collision with items in deck slot B2.", + "errorCode": "2004", + "errorInfo": {}, + "errorType": "PartialTipMovementNotAllowedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_north.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "C2" + } + }, + { + "definitionUri": "opentrons/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/1", + "id": "UUID", + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "B2" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Too tall labware on pickup tip" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_96" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[c343dfb5a0][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_bottom_right_edge].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[c343dfb5a0][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_bottom_right_edge].json new file mode 100644 index 00000000000..4665f21b62e --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[c343dfb5a0][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_bottom_right_edge].json @@ -0,0 +1,1268 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "D3" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-1000ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 97.47 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_1000ul", + "tipLength": 88, + "tipOverlap": 7.95 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.24, + "z": 9.47 + }, + "A10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.24, + "z": 9.47 + }, + "A11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.24, + "z": 9.47 + }, + "A12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.24, + "z": 9.47 + }, + "A2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.24, + "z": 9.47 + }, + "A3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.24, + "z": 9.47 + }, + "A4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.24, + "z": 9.47 + }, + "A5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.24, + "z": 9.47 + }, + "A6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.24, + "z": 9.47 + }, + "A7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.24, + "z": 9.47 + }, + "A8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.24, + "z": 9.47 + }, + "A9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.24, + "z": 9.47 + }, + "B1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.24, + "z": 9.47 + }, + "B10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.24, + "z": 9.47 + }, + "B11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.24, + "z": 9.47 + }, + "B12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.24, + "z": 9.47 + }, + "B2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.24, + "z": 9.47 + }, + "B3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.24, + "z": 9.47 + }, + "B4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.24, + "z": 9.47 + }, + "B5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.24, + "z": 9.47 + }, + "B6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.24, + "z": 9.47 + }, + "B7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.24, + "z": 9.47 + }, + "B8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.24, + "z": 9.47 + }, + "B9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.24, + "z": 9.47 + }, + "C1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.24, + "z": 9.47 + }, + "C10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.24, + "z": 9.47 + }, + "C11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.24, + "z": 9.47 + }, + "C12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.24, + "z": 9.47 + }, + "C2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.24, + "z": 9.47 + }, + "C3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.24, + "z": 9.47 + }, + "C4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.24, + "z": 9.47 + }, + "C5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.24, + "z": 9.47 + }, + "C6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.24, + "z": 9.47 + }, + "C7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.24, + "z": 9.47 + }, + "C8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.24, + "z": 9.47 + }, + "C9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.24, + "z": 9.47 + }, + "D1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.24, + "z": 9.47 + }, + "D10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.24, + "z": 9.47 + }, + "D11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.24, + "z": 9.47 + }, + "D12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.24, + "z": 9.47 + }, + "D2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.24, + "z": 9.47 + }, + "D3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.24, + "z": 9.47 + }, + "D4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.24, + "z": 9.47 + }, + "D5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.24, + "z": 9.47 + }, + "D6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.24, + "z": 9.47 + }, + "D7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.24, + "z": 9.47 + }, + "D8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.24, + "z": 9.47 + }, + "D9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.24, + "z": 9.47 + }, + "E1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.24, + "z": 9.47 + }, + "E10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.24, + "z": 9.47 + }, + "E11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.24, + "z": 9.47 + }, + "E12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.24, + "z": 9.47 + }, + "E2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.24, + "z": 9.47 + }, + "E3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.24, + "z": 9.47 + }, + "E4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.24, + "z": 9.47 + }, + "E5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.24, + "z": 9.47 + }, + "E6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.24, + "z": 9.47 + }, + "E7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.24, + "z": 9.47 + }, + "E8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.24, + "z": 9.47 + }, + "E9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.24, + "z": 9.47 + }, + "F1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.24, + "z": 9.47 + }, + "F10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.24, + "z": 9.47 + }, + "F11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.24, + "z": 9.47 + }, + "F12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.24, + "z": 9.47 + }, + "F2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.24, + "z": 9.47 + }, + "F3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.24, + "z": 9.47 + }, + "F4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.24, + "z": 9.47 + }, + "F5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.24, + "z": 9.47 + }, + "F6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.24, + "z": 9.47 + }, + "F7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.24, + "z": 9.47 + }, + "F8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.24, + "z": 9.47 + }, + "F9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.24, + "z": 9.47 + }, + "G1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.24, + "z": 9.47 + }, + "G10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.24, + "z": 9.47 + }, + "G11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.24, + "z": 9.47 + }, + "G12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.24, + "z": 9.47 + }, + "G2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.24, + "z": 9.47 + }, + "G3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.24, + "z": 9.47 + }, + "G4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.24, + "z": 9.47 + }, + "G5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.24, + "z": 9.47 + }, + "G6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.24, + "z": 9.47 + }, + "G7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.24, + "z": 9.47 + }, + "G8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.24, + "z": 9.47 + }, + "G9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.24, + "z": 9.47 + }, + "H1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.24, + "z": 9.47 + }, + "H10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.24, + "z": 9.47 + }, + "H11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.24, + "z": 9.47 + }, + "H12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.24, + "z": 9.47 + }, + "H2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.24, + "z": 9.47 + }, + "H3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.24, + "z": 9.47 + }, + "H4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.24, + "z": 9.47 + }, + "H5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.24, + "z": 9.47 + }, + "H6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.24, + "z": 9.47 + }, + "H7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.24, + "z": 9.47 + }, + "H8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.24, + "z": 9.47 + }, + "H9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.24, + "z": 9.47 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A1", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "PartialTipMovementNotAllowedError [line 479]: Error 2004 MOTION_PLANNING_FAILURE (PartialTipMovementNotAllowedError): Requested motion with the A1 nozzle partial configuration is outside of robot bounds for the pipette.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "Requested motion with the A1 nozzle partial configuration is outside of robot bounds for the pipette.", + "errorCode": "2004", + "errorInfo": {}, + "errorType": "PartialTipMovementNotAllowedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_bottom_right_edge.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "D3" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Too tall labware on pickup tip" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_96" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[cc26c104b4][Flex_S_v2_20_8_None_SINGLE_HappyPath].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[cc26c104b4][Flex_S_v2_20_8_None_SINGLE_HappyPath].json new file mode 100644 index 00000000000..5edcb1a106c --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[cc26c104b4][Flex_S_v2_20_8_None_SINGLE_HappyPath].json @@ -0,0 +1,7137 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "displayName": "Partial Tip Rack", + "loadName": "opentrons_flex_96_tiprack_50ul", + "location": { + "slotName": "B3" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.75, + "zDimension": 99 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 23.9, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons Flex 96 Tip Rack 50 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_flex_96_tiprack_50ul", + "quirks": [], + "tipLength": 57.9, + "tipOverlap": 10.5 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 121 + } + }, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 74.38, + "z": 1.5 + }, + "A10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 74.38, + "z": 1.5 + }, + "A11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 74.38, + "z": 1.5 + }, + "A12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 74.38, + "z": 1.5 + }, + "A2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 74.38, + "z": 1.5 + }, + "A3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 74.38, + "z": 1.5 + }, + "A4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 74.38, + "z": 1.5 + }, + "A5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 74.38, + "z": 1.5 + }, + "A6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 74.38, + "z": 1.5 + }, + "A7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 74.38, + "z": 1.5 + }, + "A8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 74.38, + "z": 1.5 + }, + "A9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 74.38, + "z": 1.5 + }, + "B1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 65.38, + "z": 1.5 + }, + "B10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 65.38, + "z": 1.5 + }, + "B11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 65.38, + "z": 1.5 + }, + "B12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 65.38, + "z": 1.5 + }, + "B2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 65.38, + "z": 1.5 + }, + "B3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 65.38, + "z": 1.5 + }, + "B4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 65.38, + "z": 1.5 + }, + "B5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 65.38, + "z": 1.5 + }, + "B6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 65.38, + "z": 1.5 + }, + "B7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 65.38, + "z": 1.5 + }, + "B8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 65.38, + "z": 1.5 + }, + "B9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 65.38, + "z": 1.5 + }, + "C1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 56.38, + "z": 1.5 + }, + "C10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 56.38, + "z": 1.5 + }, + "C11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 56.38, + "z": 1.5 + }, + "C12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 56.38, + "z": 1.5 + }, + "C2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 56.38, + "z": 1.5 + }, + "C3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 56.38, + "z": 1.5 + }, + "C4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 56.38, + "z": 1.5 + }, + "C5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 56.38, + "z": 1.5 + }, + "C6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 56.38, + "z": 1.5 + }, + "C7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 56.38, + "z": 1.5 + }, + "C8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 56.38, + "z": 1.5 + }, + "C9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 56.38, + "z": 1.5 + }, + "D1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 47.38, + "z": 1.5 + }, + "D10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 47.38, + "z": 1.5 + }, + "D11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 47.38, + "z": 1.5 + }, + "D12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 47.38, + "z": 1.5 + }, + "D2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 47.38, + "z": 1.5 + }, + "D3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 47.38, + "z": 1.5 + }, + "D4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 47.38, + "z": 1.5 + }, + "D5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 47.38, + "z": 1.5 + }, + "D6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 47.38, + "z": 1.5 + }, + "D7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 47.38, + "z": 1.5 + }, + "D8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 47.38, + "z": 1.5 + }, + "D9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 47.38, + "z": 1.5 + }, + "E1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 38.38, + "z": 1.5 + }, + "E10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 38.38, + "z": 1.5 + }, + "E11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 38.38, + "z": 1.5 + }, + "E12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 38.38, + "z": 1.5 + }, + "E2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 38.38, + "z": 1.5 + }, + "E3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 38.38, + "z": 1.5 + }, + "E4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 38.38, + "z": 1.5 + }, + "E5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 38.38, + "z": 1.5 + }, + "E6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 38.38, + "z": 1.5 + }, + "E7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 38.38, + "z": 1.5 + }, + "E8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 38.38, + "z": 1.5 + }, + "E9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 38.38, + "z": 1.5 + }, + "F1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 29.38, + "z": 1.5 + }, + "F10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 29.38, + "z": 1.5 + }, + "F11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 29.38, + "z": 1.5 + }, + "F12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 29.38, + "z": 1.5 + }, + "F2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 29.38, + "z": 1.5 + }, + "F3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 29.38, + "z": 1.5 + }, + "F4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 29.38, + "z": 1.5 + }, + "F5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 29.38, + "z": 1.5 + }, + "F6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 29.38, + "z": 1.5 + }, + "F7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 29.38, + "z": 1.5 + }, + "F8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 29.38, + "z": 1.5 + }, + "F9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 29.38, + "z": 1.5 + }, + "G1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 20.38, + "z": 1.5 + }, + "G10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 20.38, + "z": 1.5 + }, + "G11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 20.38, + "z": 1.5 + }, + "G12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 20.38, + "z": 1.5 + }, + "G2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 20.38, + "z": 1.5 + }, + "G3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 20.38, + "z": 1.5 + }, + "G4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 20.38, + "z": 1.5 + }, + "G5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 20.38, + "z": 1.5 + }, + "G6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 20.38, + "z": 1.5 + }, + "G7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 20.38, + "z": 1.5 + }, + "G8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 20.38, + "z": 1.5 + }, + "G9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 20.38, + "z": 1.5 + }, + "H1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 11.38, + "z": 1.5 + }, + "H10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 11.38, + "z": 1.5 + }, + "H11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 11.38, + "z": 1.5 + }, + "H12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 11.38, + "z": 1.5 + }, + "H2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 11.38, + "z": 1.5 + }, + "H3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 11.38, + "z": 1.5 + }, + "H4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 11.38, + "z": 1.5 + }, + "H5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 11.38, + "z": 1.5 + }, + "H6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 11.38, + "z": 1.5 + }, + "H7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 11.38, + "z": 1.5 + }, + "H8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 11.38, + "z": 1.5 + }, + "H9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 11.38, + "z": 1.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadModule", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a3a7eed460d8d94a91747f23820a180d", + "notes": [], + "params": { + "location": { + "slotName": "B1" + }, + "model": "thermocyclerModuleV2" + }, + "result": { + "definition": { + "calibrationPoint": { + "x": 14.4, + "y": 64.93, + "z": 97.8 + }, + "compatibleWith": [], + "dimensions": { + "bareOverallHeight": 108.96, + "lidHeight": 61.7, + "overLabwareHeight": 0.0 + }, + "displayName": "Thermocycler Module GEN2", + "gripperOffsets": { + "default": { + "dropOffset": { + "x": 0.0, + "y": 0.0, + "z": 5.6 + }, + "pickUpOffset": { + "x": 0.0, + "y": 0.0, + "z": 4.6 + } + } + }, + "labwareOffset": { + "x": 0.0, + "y": 68.8, + "z": 108.96 + }, + "model": "thermocyclerModuleV2", + "moduleType": "thermocyclerModuleType", + "otSharedSchema": "module/schemas/2", + "quirks": [], + "slotTransforms": { + "ot3_standard": { + "B1": { + "cornerOffsetFromSlot": [ + [ + -98, + 0, + 0, + 1 + ], + [ + -20.005, + 0, + 0, + 1 + ], + [ + -0.84, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0, + 1 + ] + ], + "labwareOffset": [ + [ + -98, + 0, + 0, + 1 + ], + [ + -20.005, + 0, + 0, + 1 + ], + [ + -0.84, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0, + 1 + ] + ] + } + } + } + }, + "model": "thermocyclerModuleV2", + "moduleId": "UUID", + "serialNumber": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8ea59a68b923c7225add6547ba691d34", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "right", + "pipetteName": "p50_multi_flex", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c849833be6f44b56042aca98984638af", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A1", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e427a8e363e7924e22360de365a9ca3b", + "notes": [], + "params": { + "displayName": "B2 Source Labware", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "B2" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "404adaf9f8cf5b42b31bf9f81dfe8746", + "notes": [], + "params": { + "displayName": "C2 Destination Labware", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "C2" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "58fef1af51dc7228051c34fbcd75a2ff", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H1" + }, + "result": { + "position": { + "x": 342.38, + "y": 225.38, + "z": 99.0 + }, + "tipDiameter": 5.58, + "tipLength": 48.62, + "tipVolume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e3ebcb4a881efb6bf7400eed606f2366", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 288.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fce539d97b7a3daa7a6d25257bce6f35", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A4" + }, + "result": { + "position": { + "x": 205.38, + "y": 288.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bce9d3bf890420236c3763d53a3805b3", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 20.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 20.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f0558c62484b029a0cbc2cb0f4249116", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 509.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2492fd04b2eb14d18bf0d7247de1df35", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a9b969b596943b43f87567d8ef58cf7c", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 342.38, + "y": 234.38, + "z": 99.0 + }, + "tipDiameter": 5.58, + "tipLength": 48.62, + "tipVolume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1e5fd4aec2ffe66cc8554c40cefe4f41", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 223.38, + "y": 288.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "681e921d03210756c142949d294b2bd8", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 223.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6ff28a05904431af4a9c45926cb27321", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 359.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f2d120dec0962e6d72b1a329ff609a73", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6ea07ad2b65da3dbae05915e57dfb588", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F1" + }, + "result": { + "position": { + "x": 342.38, + "y": 243.38, + "z": 99.0 + }, + "tipDiameter": 5.58, + "tipLength": 48.62, + "tipVolume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "64b038168ab3597a946133a748d2d5ec", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 15.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 232.38, + "y": 288.24, + "z": 1.92 + }, + "volume": 15.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "660882c6c1b31a6e0d6712a369f435fb", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 5.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 232.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 5.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d9be788c4a914e3511492dcebb8fee55", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 5.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A8" + }, + "result": { + "position": { + "x": 241.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 5.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3c38e87d3897b4ccb92da8c0ba2aa41f", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 434.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowOutInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2431973ade142063fce9392c2facd38d", + "notes": [], + "params": { + "flowRate": 57.0, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "21e3f5172069f1420441da46936708df", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 509.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f4cb7fe6500787b8b275b4af99cae20a", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a336a2fdf18991ff8b5e942731c6a3eb", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E1" + }, + "result": { + "position": { + "x": 342.38, + "y": 252.38, + "z": 99.0 + }, + "tipDiameter": 5.58, + "tipLength": 48.62, + "tipVolume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "touchTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b3932aef649a54f6dff065787b29d837", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "radius": 1.0, + "speed": 60.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -1.0 + }, + "origin": "top" + }, + "wellName": "B1" + }, + "result": { + "position": { + "x": 178.38, + "y": 279.24, + "z": 14.7 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "46e774a80f21bb16f781dc54a2aefd04", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 359.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d72aefe7ebc858059cd87ea6fc40bce5", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ba7e242940add23f6ba76c467860a0cf", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 342.38, + "y": 261.38, + "z": 99.0 + }, + "tipDiameter": 5.58, + "tipLength": 48.62, + "tipVolume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e4cd728baac276ab40a909864c6b7385", + "notes": [], + "params": { + "axes": [ + "rightPlunger", + "rightZ" + ] + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8aa3598a7e6baf6e15d00d9cf6e0e3a2", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 509.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a9609b7c5335265267ac6bd1e223676b", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e979c23f20333291739978a067171ea6", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C1" + }, + "result": { + "position": { + "x": 342.38, + "y": 270.38, + "z": 99.0 + }, + "tipDiameter": 5.58, + "tipLength": 48.62, + "tipVolume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "166fccb4a0375074923bd82de44f5bbf", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "277df9b98cea0310cacb9d0aa8e762d4", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e66935905062a60ac0e21803624f6152", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5f8e04268c990c0b6d19533b2acfe6ba", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "395de29f563bdb0c5dbf6c99a2e1c592", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "337c0d0731a240af2ec03e30c1bfe6ea", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "54003221f4dc68e69d9ad279efe90fcd", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "edf7e1a217e733e34c1106243ccc52ab", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5f2b86bb262a8981e3c8688f8be2e098", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f07ca1665d9f532e3e2bb1ed78896ed7", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "48901ec2b8fd08e20f676527032b760d", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "278dc462230e546d9cff4d68184c0ee8", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c57ecaf3c06dad7de6d21089c8471dd3", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1c40558e2060144208a1d6ebdc915eb6", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ce3f13e5bef1af4b923f316c1919847b", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3bcf1b2f20a083421f967da66a0d7899", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6fd4cb9b2bb17f89720633d458eecdba", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dd0bffd334b8f32aa4f082f145bd79c6", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3638cb0e7ed5dabcb954607390536db5", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "81e57845e15e2f1e087bbb13a2c9e96a", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7534004fa7b77da76840085c6d93efc2", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e61635e5d9ccc963e5c97e5210ef3b43", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 5.0000000000000036 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 20.700000000000003 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "46c2a34323000fb4208b0ada66a7b54c", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 5.0000000000000036 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 20.700000000000003 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "prepareToAspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b5ac508ea268740a7c96b385cbbdc1f1", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5d30f15f4da6445dcff27681726f4562", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3cab660778769fc443fa7b9c948cd90f", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "86a0571c1d17be65c4f069e6de2b0da8", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0d7f59e88cc75d805484e710016c5fcb", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 359.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7bd22e430622757c2ea7395fea0abf68", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "edae468719a1aeee4f0695f0fb94d999", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "H1", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b125c37b00c9a6463e85ef31f4420970", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 342.38, + "y": 288.38, + "z": 99.0 + }, + "tipDiameter": 5.58, + "tipLength": 48.62, + "tipVolume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "071b1a4cec94d9884920b0ae300164c6", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 288.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "088aa2286b82ad9c6dceb964bc8cce9b", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A4" + }, + "result": { + "position": { + "x": 205.38, + "y": 288.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d2d504a6a52593062645e6043155c2a5", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 20.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 196.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 20.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "19885230f7ff209e00b955b529301431", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 509.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "30c6447822967532d34d3124ff02d8e6", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3f9fee68cf5a8bea26f6398d96f90287", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B1" + }, + "result": { + "position": { + "x": 342.38, + "y": 279.38, + "z": 99.0 + }, + "tipDiameter": 5.58, + "tipLength": 48.62, + "tipVolume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4eb274e055ece3e6fb7bde1d3ca3552d", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 223.38, + "y": 288.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b537b35b01dc7d99e0ccf43c0a5321e1", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 223.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "04460c954e84932b5d47955e312dea21", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 359.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ca054494dbf04a512764c721074a4d0d", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a6fbf79dd23b7a077bc6b6200b67b1c1", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A2" + }, + "result": { + "position": { + "x": 351.38, + "y": 288.38, + "z": 99.0 + }, + "tipDiameter": 5.58, + "tipLength": 48.62, + "tipVolume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7ea836949df13fe70f57be392c6b08ef", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 15.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 232.38, + "y": 288.24, + "z": 1.92 + }, + "volume": 15.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bac51a5fe8d75761820897e3cce18da2", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 5.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 232.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 5.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7ead5f2f2abd9c503078cac4da336e0b", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 5.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A8" + }, + "result": { + "position": { + "x": 241.38, + "y": 181.24, + "z": 1.92 + }, + "volume": 5.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a60adc4fe71bc85c1379bcb00492211c", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 434.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowOutInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d275595eacc17f85ec9cfde66be45122", + "notes": [], + "params": { + "flowRate": 57.0, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "df53aeedb76a5476c510252fb2f5a5f7", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 509.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3d470209a5c7399dfc41b69da3f94e9b", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c866a9e418db87af1a1da159586d53cc", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B2" + }, + "result": { + "position": { + "x": 351.38, + "y": 279.38, + "z": 99.0 + }, + "tipDiameter": 5.58, + "tipLength": 48.62, + "tipVolume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "touchTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "730da8f01d4338f51cef8ddb645b1c92", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "radius": 1.0, + "speed": 60.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -1.0 + }, + "origin": "top" + }, + "wellName": "B1" + }, + "result": { + "position": { + "x": 178.38, + "y": 279.24, + "z": 14.7 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fb39bb5dab7645090df3f770f6ff5eaa", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 359.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6de02322b063f53fc17822a5e3a165dd", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c2afe8249d76bfd3f365ce607cb7da55", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C2" + }, + "result": { + "position": { + "x": 351.38, + "y": 270.38, + "z": 99.0 + }, + "tipDiameter": 5.58, + "tipLength": 48.62, + "tipVolume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1db58030512ddeb5528ab92338a1987a", + "notes": [], + "params": { + "axes": [ + "rightPlunger", + "rightZ" + ] + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f67aee2a0e4af89e3b516feba1aed132", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 509.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3d15c69f475c6a8bd5b3aa7ca4ddefe3", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "370bea73c760ab4217fe1bc8fa5a3d79", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D2" + }, + "result": { + "position": { + "x": 351.38, + "y": 261.38, + "z": 99.0 + }, + "tipDiameter": 5.58, + "tipLength": 48.62, + "tipVolume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a82953f0bc3646436c60e8b171aefa74", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0a9b50542395f231fbfa815117b361b8", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e65b3f1d497c2bb139199aec737df17e", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2b98d9ff67ef30514a2533adf6ff6879", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b89d395e96cd4eeee44be438cecd43d1", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "38858e6b33348a2f85612110c8e4f579", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0267b163687393bfef244066ce3907f1", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "171e60766b79993909e9ac8fbbcee7ce", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a39565525131dcf374765728a5d26afa", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "debb970a9560e6d440c0da22b0ecc64e", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3660aaa9cba97f02464697b91b66a366", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "59b9a2a3807c22f2ab27c0be35e584bc", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1d8b25b3f0c0f46e38121049d5e56bae", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9cbb25d683b57c7182f77bc36f7a4f52", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "77f621eac8fdc458aeb004ad98ebdfe7", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0bd40686919fc4a3de7e92e94a7786f2", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0cb76f19d99236435e46da44245b4d5c", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "37b2b4c92a8236f7b61f651c3f58cc0b", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "de4268df4b51eb0cb5a8e08cef5bbe39", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bbdbcfd6b38415f6170cfcd5e4038a93", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e34ac3384b12530622bc4e94daf3e978", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "52e16b89b1ab16d76b38e3e296da0a94", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 5.0000000000000036 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 20.700000000000003 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a9d3f9c2811db1fc586589e3c1c6d1cb", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 5.0000000000000036 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 20.700000000000003 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "prepareToAspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "aff74009e6502ca0ccceb9fd79a0dd12", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c157a882862ad34268f9db642ae7d2f6", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3de9510942adb48de0d7e022a7ce0ff0", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d44591710a9846ae9b7fe0973e1421f4", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b9183eeb2c4cd08719aad433be253e77", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 359.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ba7e34a7ba3b6bd01d4d95a0a10d3c38", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [], + "files": [ + { + "name": "Flex_S_v2_20_8_None_SINGLE_HappyPath.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_flex_96_tiprack_50ul/1", + "displayName": "Partial Tip Rack", + "id": "UUID", + "loadName": "opentrons_flex_96_tiprack_50ul", + "location": { + "slotName": "B3" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "displayName": "B2 Source Labware", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "B2" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "displayName": "C2 Destination Labware", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "C2" + } + } + ], + "liquids": [], + "metadata": { + "description": "Tip Rack South Clearance for the 8 Channel pipette and a SINGLE partial tip configuration.", + "protocolName": "8 Channel SINGLE Happy Path A1 or H1" + }, + "modules": [ + { + "id": "UUID", + "location": { + "slotName": "B1" + }, + "model": "thermocyclerModuleV2", + "serialNumber": "UUID" + } + ], + "pipettes": [ + { + "id": "UUID", + "mount": "right", + "pipetteName": "p50_multi_flex" + } + ], + "result": "ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[d0154b1493][Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_eight_partial_column_bottom_right].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[d0154b1493][Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_eight_partial_column_bottom_right].json new file mode 100644 index 00000000000..13e42d0bd8b --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[d0154b1493][Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_eight_partial_column_bottom_right].json @@ -0,0 +1,1326 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "B2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.75, + "zDimension": 99 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 23.9, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons Flex 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_flex_96_tiprack_1000ul", + "quirks": [], + "tipLength": 95.6, + "tipOverlap": 10.5 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 121 + } + }, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.38, + "z": 1.5 + }, + "A10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.38, + "z": 1.5 + }, + "A11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.38, + "z": 1.5 + }, + "A12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.38, + "z": 1.5 + }, + "A2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.38, + "z": 1.5 + }, + "A3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.38, + "z": 1.5 + }, + "A4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.38, + "z": 1.5 + }, + "A5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.38, + "z": 1.5 + }, + "A6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.38, + "z": 1.5 + }, + "A7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.38, + "z": 1.5 + }, + "A8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.38, + "z": 1.5 + }, + "A9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.38, + "z": 1.5 + }, + "B1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.38, + "z": 1.5 + }, + "B10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.38, + "z": 1.5 + }, + "B11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.38, + "z": 1.5 + }, + "B12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.38, + "z": 1.5 + }, + "B2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.38, + "z": 1.5 + }, + "B3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.38, + "z": 1.5 + }, + "B4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.38, + "z": 1.5 + }, + "B5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.38, + "z": 1.5 + }, + "B6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.38, + "z": 1.5 + }, + "B7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.38, + "z": 1.5 + }, + "B8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.38, + "z": 1.5 + }, + "B9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.38, + "z": 1.5 + }, + "C1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.38, + "z": 1.5 + }, + "C10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.38, + "z": 1.5 + }, + "C11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.38, + "z": 1.5 + }, + "C12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.38, + "z": 1.5 + }, + "C2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.38, + "z": 1.5 + }, + "C3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.38, + "z": 1.5 + }, + "C4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.38, + "z": 1.5 + }, + "C5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.38, + "z": 1.5 + }, + "C6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.38, + "z": 1.5 + }, + "C7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.38, + "z": 1.5 + }, + "C8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.38, + "z": 1.5 + }, + "C9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.38, + "z": 1.5 + }, + "D1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.38, + "z": 1.5 + }, + "D10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.38, + "z": 1.5 + }, + "D11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.38, + "z": 1.5 + }, + "D12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.38, + "z": 1.5 + }, + "D2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.38, + "z": 1.5 + }, + "D3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.38, + "z": 1.5 + }, + "D4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.38, + "z": 1.5 + }, + "D5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.38, + "z": 1.5 + }, + "D6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.38, + "z": 1.5 + }, + "D7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.38, + "z": 1.5 + }, + "D8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.38, + "z": 1.5 + }, + "D9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.38, + "z": 1.5 + }, + "E1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.38, + "z": 1.5 + }, + "E10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.38, + "z": 1.5 + }, + "E11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.38, + "z": 1.5 + }, + "E12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.38, + "z": 1.5 + }, + "E2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.38, + "z": 1.5 + }, + "E3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.38, + "z": 1.5 + }, + "E4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.38, + "z": 1.5 + }, + "E5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.38, + "z": 1.5 + }, + "E6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.38, + "z": 1.5 + }, + "E7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.38, + "z": 1.5 + }, + "E8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.38, + "z": 1.5 + }, + "E9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.38, + "z": 1.5 + }, + "F1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.38, + "z": 1.5 + }, + "F10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.38, + "z": 1.5 + }, + "F11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.38, + "z": 1.5 + }, + "F12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.38, + "z": 1.5 + }, + "F2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.38, + "z": 1.5 + }, + "F3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.38, + "z": 1.5 + }, + "F4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.38, + "z": 1.5 + }, + "F5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.38, + "z": 1.5 + }, + "F6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.38, + "z": 1.5 + }, + "F7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.38, + "z": 1.5 + }, + "F8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.38, + "z": 1.5 + }, + "F9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.38, + "z": 1.5 + }, + "G1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.38, + "z": 1.5 + }, + "G10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.38, + "z": 1.5 + }, + "G11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.38, + "z": 1.5 + }, + "G12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.38, + "z": 1.5 + }, + "G2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.38, + "z": 1.5 + }, + "G3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.38, + "z": 1.5 + }, + "G4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.38, + "z": 1.5 + }, + "G5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.38, + "z": 1.5 + }, + "G6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.38, + "z": 1.5 + }, + "G7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.38, + "z": 1.5 + }, + "G8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.38, + "z": 1.5 + }, + "G9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.38, + "z": 1.5 + }, + "H1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.38, + "z": 1.5 + }, + "H10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.38, + "z": 1.5 + }, + "H11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.38, + "z": 1.5 + }, + "H12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.38, + "z": 1.5 + }, + "H2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.38, + "z": 1.5 + }, + "H3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.38, + "z": 1.5 + }, + "H4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.38, + "z": 1.5 + }, + "H5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.38, + "z": 1.5 + }, + "H6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.38, + "z": 1.5 + }, + "H7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.38, + "z": 1.5 + }, + "H8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.38, + "z": 1.5 + }, + "H9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.38, + "z": 1.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_multi_flex", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "error": { + "createdAt": "TIMESTAMP", + "detail": "No entry for back left nozzle 'G12' in pipette", + "errorCode": "4007", + "errorInfo": {}, + "errorType": "IncompatibleNozzleConfiguration", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "KeyError: 'G12'", + "errorCode": "4000", + "errorInfo": { + "args": "('G12',)", + "class": "KeyError", + "traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/hardware_control/nozzle_manager.py\", line N, in build\n back_left_row_index, back_left_column_index = _row_col_indices_for_nozzle(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/hardware_control/nozzle_manager.py\", line N, in _row_col_indices_for_nozzle\n return _row_or_col_index_for_nozzle(rows, nozzle), _row_or_col_index_for_nozzle(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/hardware_control/nozzle_manager.py\", line N, in _row_or_col_index_for_nozzle\n raise KeyError(nozzle)\n" + }, + "errorType": "PythonException", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + }, + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "backLeftNozzle": "G12", + "frontRightNozzle": "H1", + "primaryNozzle": "H1", + "style": "QUADRANT" + }, + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "failed" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "ProtocolCommandFailedError [line 167]: Error 4000 GENERAL_ERROR (ProtocolCommandFailedError): IncompatibleNozzleConfiguration: No entry for back left nozzle 'G12' in pipette", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "IncompatibleNozzleConfiguration: No entry for back left nozzle 'G12' in pipette", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ProtocolCommandFailedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "No entry for back left nozzle 'G12' in pipette", + "errorCode": "4007", + "errorInfo": {}, + "errorType": "IncompatibleNozzleConfiguration", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "KeyError: 'G12'", + "errorCode": "4000", + "errorInfo": { + "args": "('G12',)", + "class": "KeyError", + "traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/hardware_control/nozzle_manager.py\", line N, in build\n back_left_row_index, back_left_column_index = _row_col_indices_for_nozzle(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/hardware_control/nozzle_manager.py\", line N, in _row_col_indices_for_nozzle\n return _row_or_col_index_for_nozzle(rows, nozzle), _row_or_col_index_for_nozzle(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/hardware_control/nozzle_manager.py\", line N, in _row_or_col_index_for_nozzle\n raise KeyError(nozzle)\n" + }, + "errorType": "PythonException", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_eight_partial_column_bottom_right.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_flex_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "B2" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Invalid tip configs that should error" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_multi_flex" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[d2c818bf00][Flex_S_v2_20_P50_LPD].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[d2c818bf00][Flex_S_v2_20_P50_LPD].json new file mode 100644 index 00000000000..0e914568a92 --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[d2c818bf00][Flex_S_v2_20_P50_LPD].json @@ -0,0 +1,5125 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "A2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.75, + "zDimension": 99 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 23.9, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons Flex 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_flex_96_tiprack_1000ul", + "quirks": [], + "tipLength": 95.6, + "tipOverlap": 10.5 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 121 + } + }, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.38, + "z": 1.5 + }, + "A10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.38, + "z": 1.5 + }, + "A11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.38, + "z": 1.5 + }, + "A12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.38, + "z": 1.5 + }, + "A2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.38, + "z": 1.5 + }, + "A3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.38, + "z": 1.5 + }, + "A4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.38, + "z": 1.5 + }, + "A5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.38, + "z": 1.5 + }, + "A6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.38, + "z": 1.5 + }, + "A7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.38, + "z": 1.5 + }, + "A8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.38, + "z": 1.5 + }, + "A9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.38, + "z": 1.5 + }, + "B1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.38, + "z": 1.5 + }, + "B10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.38, + "z": 1.5 + }, + "B11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.38, + "z": 1.5 + }, + "B12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.38, + "z": 1.5 + }, + "B2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.38, + "z": 1.5 + }, + "B3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.38, + "z": 1.5 + }, + "B4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.38, + "z": 1.5 + }, + "B5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.38, + "z": 1.5 + }, + "B6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.38, + "z": 1.5 + }, + "B7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.38, + "z": 1.5 + }, + "B8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.38, + "z": 1.5 + }, + "B9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.38, + "z": 1.5 + }, + "C1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.38, + "z": 1.5 + }, + "C10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.38, + "z": 1.5 + }, + "C11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.38, + "z": 1.5 + }, + "C12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.38, + "z": 1.5 + }, + "C2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.38, + "z": 1.5 + }, + "C3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.38, + "z": 1.5 + }, + "C4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.38, + "z": 1.5 + }, + "C5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.38, + "z": 1.5 + }, + "C6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.38, + "z": 1.5 + }, + "C7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.38, + "z": 1.5 + }, + "C8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.38, + "z": 1.5 + }, + "C9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.38, + "z": 1.5 + }, + "D1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.38, + "z": 1.5 + }, + "D10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.38, + "z": 1.5 + }, + "D11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.38, + "z": 1.5 + }, + "D12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.38, + "z": 1.5 + }, + "D2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.38, + "z": 1.5 + }, + "D3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.38, + "z": 1.5 + }, + "D4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.38, + "z": 1.5 + }, + "D5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.38, + "z": 1.5 + }, + "D6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.38, + "z": 1.5 + }, + "D7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.38, + "z": 1.5 + }, + "D8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.38, + "z": 1.5 + }, + "D9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.38, + "z": 1.5 + }, + "E1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.38, + "z": 1.5 + }, + "E10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.38, + "z": 1.5 + }, + "E11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.38, + "z": 1.5 + }, + "E12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.38, + "z": 1.5 + }, + "E2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.38, + "z": 1.5 + }, + "E3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.38, + "z": 1.5 + }, + "E4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.38, + "z": 1.5 + }, + "E5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.38, + "z": 1.5 + }, + "E6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.38, + "z": 1.5 + }, + "E7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.38, + "z": 1.5 + }, + "E8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.38, + "z": 1.5 + }, + "E9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.38, + "z": 1.5 + }, + "F1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.38, + "z": 1.5 + }, + "F10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.38, + "z": 1.5 + }, + "F11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.38, + "z": 1.5 + }, + "F12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.38, + "z": 1.5 + }, + "F2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.38, + "z": 1.5 + }, + "F3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.38, + "z": 1.5 + }, + "F4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.38, + "z": 1.5 + }, + "F5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.38, + "z": 1.5 + }, + "F6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.38, + "z": 1.5 + }, + "F7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.38, + "z": 1.5 + }, + "F8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.38, + "z": 1.5 + }, + "F9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.38, + "z": 1.5 + }, + "G1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.38, + "z": 1.5 + }, + "G10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.38, + "z": 1.5 + }, + "G11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.38, + "z": 1.5 + }, + "G12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.38, + "z": 1.5 + }, + "G2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.38, + "z": 1.5 + }, + "G3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.38, + "z": 1.5 + }, + "G4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.38, + "z": 1.5 + }, + "G5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.38, + "z": 1.5 + }, + "G6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.38, + "z": 1.5 + }, + "G7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.38, + "z": 1.5 + }, + "G8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.38, + "z": 1.5 + }, + "G9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.38, + "z": 1.5 + }, + "H1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.38, + "z": 1.5 + }, + "H10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.38, + "z": 1.5 + }, + "H11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.38, + "z": 1.5 + }, + "H12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.38, + "z": 1.5 + }, + "H2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.38, + "z": 1.5 + }, + "H3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.38, + "z": 1.5 + }, + "H4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.38, + "z": 1.5 + }, + "H5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.38, + "z": 1.5 + }, + "H6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.38, + "z": 1.5 + }, + "H7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.38, + "z": 1.5 + }, + "H8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.38, + "z": 1.5 + }, + "H9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.38, + "z": 1.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50de88d471ad3910c29207fb6df4502e", + "notes": [], + "params": { + "loadName": "opentrons_flex_96_tiprack_50ul", + "location": { + "slotName": "B2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.75, + "zDimension": 99 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 23.9, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons Flex 96 Tip Rack 50 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_flex_96_tiprack_50ul", + "quirks": [], + "tipLength": 57.9, + "tipOverlap": 10.5 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 121 + } + }, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 74.38, + "z": 1.5 + }, + "A10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 74.38, + "z": 1.5 + }, + "A11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 74.38, + "z": 1.5 + }, + "A12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 74.38, + "z": 1.5 + }, + "A2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 74.38, + "z": 1.5 + }, + "A3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 74.38, + "z": 1.5 + }, + "A4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 74.38, + "z": 1.5 + }, + "A5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 74.38, + "z": 1.5 + }, + "A6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 74.38, + "z": 1.5 + }, + "A7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 74.38, + "z": 1.5 + }, + "A8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 74.38, + "z": 1.5 + }, + "A9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 74.38, + "z": 1.5 + }, + "B1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 65.38, + "z": 1.5 + }, + "B10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 65.38, + "z": 1.5 + }, + "B11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 65.38, + "z": 1.5 + }, + "B12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 65.38, + "z": 1.5 + }, + "B2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 65.38, + "z": 1.5 + }, + "B3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 65.38, + "z": 1.5 + }, + "B4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 65.38, + "z": 1.5 + }, + "B5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 65.38, + "z": 1.5 + }, + "B6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 65.38, + "z": 1.5 + }, + "B7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 65.38, + "z": 1.5 + }, + "B8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 65.38, + "z": 1.5 + }, + "B9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 65.38, + "z": 1.5 + }, + "C1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 56.38, + "z": 1.5 + }, + "C10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 56.38, + "z": 1.5 + }, + "C11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 56.38, + "z": 1.5 + }, + "C12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 56.38, + "z": 1.5 + }, + "C2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 56.38, + "z": 1.5 + }, + "C3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 56.38, + "z": 1.5 + }, + "C4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 56.38, + "z": 1.5 + }, + "C5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 56.38, + "z": 1.5 + }, + "C6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 56.38, + "z": 1.5 + }, + "C7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 56.38, + "z": 1.5 + }, + "C8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 56.38, + "z": 1.5 + }, + "C9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 56.38, + "z": 1.5 + }, + "D1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 47.38, + "z": 1.5 + }, + "D10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 47.38, + "z": 1.5 + }, + "D11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 47.38, + "z": 1.5 + }, + "D12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 47.38, + "z": 1.5 + }, + "D2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 47.38, + "z": 1.5 + }, + "D3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 47.38, + "z": 1.5 + }, + "D4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 47.38, + "z": 1.5 + }, + "D5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 47.38, + "z": 1.5 + }, + "D6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 47.38, + "z": 1.5 + }, + "D7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 47.38, + "z": 1.5 + }, + "D8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 47.38, + "z": 1.5 + }, + "D9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 47.38, + "z": 1.5 + }, + "E1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 38.38, + "z": 1.5 + }, + "E10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 38.38, + "z": 1.5 + }, + "E11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 38.38, + "z": 1.5 + }, + "E12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 38.38, + "z": 1.5 + }, + "E2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 38.38, + "z": 1.5 + }, + "E3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 38.38, + "z": 1.5 + }, + "E4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 38.38, + "z": 1.5 + }, + "E5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 38.38, + "z": 1.5 + }, + "E6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 38.38, + "z": 1.5 + }, + "E7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 38.38, + "z": 1.5 + }, + "E8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 38.38, + "z": 1.5 + }, + "E9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 38.38, + "z": 1.5 + }, + "F1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 29.38, + "z": 1.5 + }, + "F10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 29.38, + "z": 1.5 + }, + "F11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 29.38, + "z": 1.5 + }, + "F12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 29.38, + "z": 1.5 + }, + "F2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 29.38, + "z": 1.5 + }, + "F3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 29.38, + "z": 1.5 + }, + "F4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 29.38, + "z": 1.5 + }, + "F5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 29.38, + "z": 1.5 + }, + "F6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 29.38, + "z": 1.5 + }, + "F7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 29.38, + "z": 1.5 + }, + "F8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 29.38, + "z": 1.5 + }, + "F9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 29.38, + "z": 1.5 + }, + "G1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 20.38, + "z": 1.5 + }, + "G10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 20.38, + "z": 1.5 + }, + "G11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 20.38, + "z": 1.5 + }, + "G12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 20.38, + "z": 1.5 + }, + "G2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 20.38, + "z": 1.5 + }, + "G3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 20.38, + "z": 1.5 + }, + "G4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 20.38, + "z": 1.5 + }, + "G5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 20.38, + "z": 1.5 + }, + "G6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 20.38, + "z": 1.5 + }, + "G7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 20.38, + "z": 1.5 + }, + "G8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 20.38, + "z": 1.5 + }, + "G9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 20.38, + "z": 1.5 + }, + "H1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 11.38, + "z": 1.5 + }, + "H10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 11.38, + "z": 1.5 + }, + "H11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 11.38, + "z": 1.5 + }, + "H12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 11.38, + "z": 1.5 + }, + "H2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 11.38, + "z": 1.5 + }, + "H3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 11.38, + "z": 1.5 + }, + "H4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 11.38, + "z": 1.5 + }, + "H5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 11.38, + "z": 1.5 + }, + "H6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 11.38, + "z": 1.5 + }, + "H7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 11.38, + "z": 1.5 + }, + "H8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 11.38, + "z": 1.5 + }, + "H9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 11.38, + "z": 1.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a83392f86baf8cd5b4f0157c89d31dbd", + "notes": [], + "params": { + "loadName": "armadillo_96_wellplate_200ul_pcr_full_skirt", + "location": { + "slotName": "C3" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Thermo Scientific", + "brandId": [ + "AB2396" + ], + "links": [ + "https://www.fishersci.com/shop/products/armadillo-96-well-pcr-plate-1/AB2396" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 16.0 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.0, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "Armadillo 96 Well Plate 200 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "armadillo_96_wellplate_200ul_pcr_full_skirt" + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.95 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 11.91 + } + }, + "stackingOffsetWithModule": { + "magneticBlockV1": { + "x": 0, + "y": 0, + "z": 3.54 + }, + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.7 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.38, + "y": 74.24, + "z": 1.05 + }, + "A10": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.38, + "y": 74.24, + "z": 1.05 + }, + "A11": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.38, + "y": 74.24, + "z": 1.05 + }, + "A12": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.38, + "y": 74.24, + "z": 1.05 + }, + "A2": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.38, + "y": 74.24, + "z": 1.05 + }, + "A3": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.38, + "y": 74.24, + "z": 1.05 + }, + "A4": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.38, + "y": 74.24, + "z": 1.05 + }, + "A5": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.38, + "y": 74.24, + "z": 1.05 + }, + "A6": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.38, + "y": 74.24, + "z": 1.05 + }, + "A7": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.38, + "y": 74.24, + "z": 1.05 + }, + "A8": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.38, + "y": 74.24, + "z": 1.05 + }, + "A9": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.38, + "y": 74.24, + "z": 1.05 + }, + "B1": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.38, + "y": 65.24, + "z": 1.05 + }, + "B10": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.38, + "y": 65.24, + "z": 1.05 + }, + "B11": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.38, + "y": 65.24, + "z": 1.05 + }, + "B12": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.38, + "y": 65.24, + "z": 1.05 + }, + "B2": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.38, + "y": 65.24, + "z": 1.05 + }, + "B3": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.38, + "y": 65.24, + "z": 1.05 + }, + "B4": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.38, + "y": 65.24, + "z": 1.05 + }, + "B5": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.38, + "y": 65.24, + "z": 1.05 + }, + "B6": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.38, + "y": 65.24, + "z": 1.05 + }, + "B7": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.38, + "y": 65.24, + "z": 1.05 + }, + "B8": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.38, + "y": 65.24, + "z": 1.05 + }, + "B9": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.38, + "y": 65.24, + "z": 1.05 + }, + "C1": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.38, + "y": 56.24, + "z": 1.05 + }, + "C10": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.38, + "y": 56.24, + "z": 1.05 + }, + "C11": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.38, + "y": 56.24, + "z": 1.05 + }, + "C12": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.38, + "y": 56.24, + "z": 1.05 + }, + "C2": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.38, + "y": 56.24, + "z": 1.05 + }, + "C3": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.38, + "y": 56.24, + "z": 1.05 + }, + "C4": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.38, + "y": 56.24, + "z": 1.05 + }, + "C5": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.38, + "y": 56.24, + "z": 1.05 + }, + "C6": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.38, + "y": 56.24, + "z": 1.05 + }, + "C7": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.38, + "y": 56.24, + "z": 1.05 + }, + "C8": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.38, + "y": 56.24, + "z": 1.05 + }, + "C9": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.38, + "y": 56.24, + "z": 1.05 + }, + "D1": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.38, + "y": 47.24, + "z": 1.05 + }, + "D10": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.38, + "y": 47.24, + "z": 1.05 + }, + "D11": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.38, + "y": 47.24, + "z": 1.05 + }, + "D12": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.38, + "y": 47.24, + "z": 1.05 + }, + "D2": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.38, + "y": 47.24, + "z": 1.05 + }, + "D3": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.38, + "y": 47.24, + "z": 1.05 + }, + "D4": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.38, + "y": 47.24, + "z": 1.05 + }, + "D5": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.38, + "y": 47.24, + "z": 1.05 + }, + "D6": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.38, + "y": 47.24, + "z": 1.05 + }, + "D7": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.38, + "y": 47.24, + "z": 1.05 + }, + "D8": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.38, + "y": 47.24, + "z": 1.05 + }, + "D9": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.38, + "y": 47.24, + "z": 1.05 + }, + "E1": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.38, + "y": 38.24, + "z": 1.05 + }, + "E10": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.38, + "y": 38.24, + "z": 1.05 + }, + "E11": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.38, + "y": 38.24, + "z": 1.05 + }, + "E12": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.38, + "y": 38.24, + "z": 1.05 + }, + "E2": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.38, + "y": 38.24, + "z": 1.05 + }, + "E3": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.38, + "y": 38.24, + "z": 1.05 + }, + "E4": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.38, + "y": 38.24, + "z": 1.05 + }, + "E5": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.38, + "y": 38.24, + "z": 1.05 + }, + "E6": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.38, + "y": 38.24, + "z": 1.05 + }, + "E7": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.38, + "y": 38.24, + "z": 1.05 + }, + "E8": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.38, + "y": 38.24, + "z": 1.05 + }, + "E9": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.38, + "y": 38.24, + "z": 1.05 + }, + "F1": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.38, + "y": 29.24, + "z": 1.05 + }, + "F10": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.38, + "y": 29.24, + "z": 1.05 + }, + "F11": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.38, + "y": 29.24, + "z": 1.05 + }, + "F12": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.38, + "y": 29.24, + "z": 1.05 + }, + "F2": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.38, + "y": 29.24, + "z": 1.05 + }, + "F3": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.38, + "y": 29.24, + "z": 1.05 + }, + "F4": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.38, + "y": 29.24, + "z": 1.05 + }, + "F5": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.38, + "y": 29.24, + "z": 1.05 + }, + "F6": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.38, + "y": 29.24, + "z": 1.05 + }, + "F7": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.38, + "y": 29.24, + "z": 1.05 + }, + "F8": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.38, + "y": 29.24, + "z": 1.05 + }, + "F9": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.38, + "y": 29.24, + "z": 1.05 + }, + "G1": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.38, + "y": 20.24, + "z": 1.05 + }, + "G10": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.38, + "y": 20.24, + "z": 1.05 + }, + "G11": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.38, + "y": 20.24, + "z": 1.05 + }, + "G12": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.38, + "y": 20.24, + "z": 1.05 + }, + "G2": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.38, + "y": 20.24, + "z": 1.05 + }, + "G3": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.38, + "y": 20.24, + "z": 1.05 + }, + "G4": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.38, + "y": 20.24, + "z": 1.05 + }, + "G5": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.38, + "y": 20.24, + "z": 1.05 + }, + "G6": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.38, + "y": 20.24, + "z": 1.05 + }, + "G7": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.38, + "y": 20.24, + "z": 1.05 + }, + "G8": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.38, + "y": 20.24, + "z": 1.05 + }, + "G9": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.38, + "y": 20.24, + "z": 1.05 + }, + "H1": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.38, + "y": 11.24, + "z": 1.05 + }, + "H10": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.38, + "y": 11.24, + "z": 1.05 + }, + "H11": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.38, + "y": 11.24, + "z": 1.05 + }, + "H12": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.38, + "y": 11.24, + "z": 1.05 + }, + "H2": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.38, + "y": 11.24, + "z": 1.05 + }, + "H3": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.38, + "y": 11.24, + "z": 1.05 + }, + "H4": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.38, + "y": 11.24, + "z": 1.05 + }, + "H5": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.38, + "y": 11.24, + "z": 1.05 + }, + "H6": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.38, + "y": 11.24, + "z": 1.05 + }, + "H7": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.38, + "y": 11.24, + "z": 1.05 + }, + "H8": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.38, + "y": 11.24, + "z": 1.05 + }, + "H9": { + "depth": 14.95, + "diameter": 5.5, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.38, + "y": 11.24, + "z": 1.05 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "596b975cce05f1835b73fd3e2e9c04b0", + "notes": [], + "params": { + "loadName": "nest_1_reservoir_290ml", + "location": { + "slotName": "D3" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "360206", + "360266" + ], + "links": [ + "https://www.nest-biotech.com/reagent-reserviors" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.47, + "zDimension": 44.4 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1" + ] + } + ], + "metadata": { + "displayCategory": "reservoir", + "displayName": "NEST 1 Well Reservoir 290 mL", + "displayVolumeUnits": "mL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1" + ] + ], + "parameters": { + "format": "trough", + "isMagneticModuleCompatible": false, + "isTiprack": false, + "loadName": "nest_1_reservoir_290ml", + "quirks": [ + "centerMultichannelOnWells", + "touchTipDisabled" + ] + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 39.55, + "shape": "rectangular", + "totalLiquidVolume": 290000, + "x": 63.88, + "xDimension": 106.8, + "y": 42.74, + "yDimension": 71.2, + "z": 4.85 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "43c0dcf1828d77562caa82b5e8a8c91e", + "notes": [], + "params": { + "loadName": "nest_12_reservoir_15ml", + "location": { + "slotName": "B3" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "360102" + ], + "links": [ + "https://www.nest-biotech.com/reagent-reserviors/59178414.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 31.4 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9" + ] + } + ], + "metadata": { + "displayCategory": "reservoir", + "displayName": "NEST 12 Well Reservoir 15 mL", + "displayVolumeUnits": "mL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1" + ], + [ + "A10" + ], + [ + "A11" + ], + [ + "A12" + ], + [ + "A2" + ], + [ + "A3" + ], + [ + "A4" + ], + [ + "A5" + ], + [ + "A6" + ], + [ + "A7" + ], + [ + "A8" + ], + [ + "A9" + ] + ], + "parameters": { + "format": "trough", + "isMagneticModuleCompatible": false, + "isTiprack": false, + "loadName": "nest_12_reservoir_15ml", + "quirks": [ + "centerMultichannelOnWells", + "touchTipDisabled" + ] + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 14.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + }, + "A10": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 95.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + }, + "A11": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 104.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + }, + "A12": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 113.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + }, + "A2": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 23.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + }, + "A3": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 32.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + }, + "A4": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 41.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + }, + "A5": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 50.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + }, + "A6": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 59.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + }, + "A7": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 68.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + }, + "A8": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 77.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + }, + "A9": { + "depth": 26.85, + "shape": "rectangular", + "totalLiquidVolume": 15000, + "x": 86.38, + "xDimension": 8.2, + "y": 42.78, + "yDimension": 71.2, + "z": 4.55 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLiquid", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5d3ae21e7b20c8d594290fcda36e0906", + "notes": [], + "params": { + "labwareId": "UUID", + "liquidId": "UUID", + "volumeByWell": { + "A1": 15000.0 + } + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLiquid", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "660a0039e8fc361930633bfde72e7048", + "notes": [], + "params": { + "labwareId": "UUID", + "liquidId": "UUID", + "volumeByWell": { + "A2": 15000.0 + } + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLiquid", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a2f86d0e4b58ed0924647422f6c09a19", + "notes": [], + "params": { + "labwareId": "UUID", + "liquidId": "UUID", + "volumeByWell": { + "A3": 15000.0 + } + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLiquid", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a060ac035737079606f40e32760f0433", + "notes": [], + "params": { + "labwareId": "UUID", + "liquidId": "UUID", + "volumeByWell": { + "A4": 15000.0 + } + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLiquid", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8f2290bcbb0d7f518924bfed155dc229", + "notes": [], + "params": { + "labwareId": "UUID", + "liquidId": "UUID", + "volumeByWell": { + "A5": 15000.0 + } + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLiquid", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd4f8f7f1a936fe3448b5eee40843272", + "notes": [], + "params": { + "labwareId": "UUID", + "liquidId": "UUID", + "volumeByWell": { + "A6": 15000.0 + } + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLiquid", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "701101b75d324afe841abfa3582e43d3", + "notes": [], + "params": { + "labwareId": "UUID", + "liquidId": "UUID", + "volumeByWell": { + "A7": 15000.0 + } + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLiquid", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d2adfadb3040917b299226cda9e05360", + "notes": [], + "params": { + "labwareId": "UUID", + "liquidId": "UUID", + "volumeByWell": { + "A8": 15000.0 + } + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLiquid", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "78cf87d9fcf2945246fe2082eb1345e1", + "notes": [], + "params": { + "labwareId": "UUID", + "liquidId": "UUID", + "volumeByWell": { + "A9": 15000.0 + } + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLiquid", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b568e2c5aa432ef1a7721ec51166eb88", + "notes": [], + "params": { + "labwareId": "UUID", + "liquidId": "UUID", + "volumeByWell": { + "A10": 15000.0 + } + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLiquid", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "97a948c60b7d36455d148bdf36d5eb38", + "notes": [], + "params": { + "labwareId": "UUID", + "liquidId": "UUID", + "volumeByWell": { + "A11": 15000.0 + } + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLiquid", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "86d4bfc615a089999c84d7cd5705e698", + "notes": [], + "params": { + "labwareId": "UUID", + "liquidId": "UUID", + "volumeByWell": { + "A12": 15000.0 + } + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fe99a456f4af16d7fc512769957a6be0", + "notes": [], + "params": { + "liquidPresenceDetection": true, + "mount": "right", + "pipetteName": "p50_single_flex", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "284d3678bb2e1cf23a240af047b6a825", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 178.38, + "y": 288.38, + "z": 99.0 + }, + "tipDiameter": 5.58, + "tipLength": 47.81, + "tipVolume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "liquidProbe", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "09178fc46f5d9d43c93ba8e69b385101", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 2.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 342.38, + "y": 256.78, + "z": 33.4 + }, + "z_position": 0.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a144c088e27010f598d36cd00669b2b1", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 50.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 342.38, + "y": 256.78, + "z": 5.55 + }, + "volume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1d3ef34219675c06b73ee7756ae312a0", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 50.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 342.38, + "y": 181.24, + "z": 2.05 + }, + "volume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c7b3377a5521a396130f3fe9115525d6", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 509.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c22ff0689e4c0f9b11fcdb54e102152b", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "31c1579fe54b0a711b77b111c0c8ba1d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B1" + }, + "result": { + "position": { + "x": 178.38, + "y": 279.38, + "z": 99.0 + }, + "tipDiameter": 5.58, + "tipLength": 47.81, + "tipVolume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "liquidProbe", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c5bb1e6ec1d2ac5a4c350faf3672245a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 2.0 + }, + "origin": "top" + }, + "wellName": "A2" + }, + "result": { + "position": { + "x": 351.38, + "y": 256.78, + "z": 33.4 + }, + "z_position": 0.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "722a3e6de657c77d721895d8badab9b4", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 50.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A2" + }, + "result": { + "position": { + "x": 351.38, + "y": 256.78, + "z": 5.55 + }, + "volume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5ac05e6cf96a720c066e94aca5045d24", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 50.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "A2" + }, + "result": { + "position": { + "x": 351.38, + "y": 181.24, + "z": 2.05 + }, + "volume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "liquidProbe", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8a6371348d39f444fc65e7304dde52ce", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 2.0 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 360.38, + "y": 256.78, + "z": 33.4 + }, + "z_position": 0.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b22e2f859d148b4dfdb91b3e43ddd7c0", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 50.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -25.85 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 360.38, + "y": 256.78, + "z": 5.55 + }, + "volume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d7b826433bfc2c5dd7650b7f64de4387", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 50.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.95 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 360.38, + "y": 181.24, + "z": 2.05 + }, + "volume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "45c70122bf33abff61217f0c752c06a4", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 359.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "440594c1295a83478b3bf55db1efc12d", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dbeb059b62f722adf17e49167171024f", + "notes": [], + "params": { + "message": "Reservoir in D3 is to have NO liquid" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "04ea53a488348ffb1688af708b65f7e4", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C1" + }, + "result": { + "position": { + "x": 178.38, + "y": 270.38, + "z": 99.0 + }, + "tipDiameter": 5.58, + "tipLength": 47.81, + "tipVolume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e94242544868a35ba08cec280d753bc6", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 50.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -38.55 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 5.85 + }, + "volume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ef6736559fde071db453f5eab377a125", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 434.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowOutInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "57ecb3ed1ba19f712a64f34d0098c991", + "notes": [], + "params": { + "flowRate": 57.0, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ff5d401da9025c5e29c5687c101a5e3d", + "notes": [], + "params": { + "message": "Current volume in pipette: 0" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "prepareToAspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d4d7653c4ef95313ee313641835096ad", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "tryLiquidProbe", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "572506e8a901de4c31b05824435605e3", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "z_position": 0.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "99ff896a8dd377c6b88d73e413dd83fb", + "notes": [], + "params": { + "message": "Is there liquid in the reservoir? True" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f3ad90410318c85bdafc440398099b1c", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 509.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5f601c702191a47b8e0e0d99ae514a34", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3d627373932d2d82fdee646567e0aa8e", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 178.38, + "y": 261.38, + "z": 99.0 + }, + "tipDiameter": 5.58, + "tipLength": 47.81, + "tipVolume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "286f5eaff085f0888fa20b1f7e6ea0d8", + "notes": [], + "params": { + "message": "We expect an error on the next line" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "liquidProbe", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f0ce6617868dd419408be36fa2c9b687", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 2.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 46.4 + }, + "z_position": 0.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d184edc87ae8067624e33f43a08fe0c3", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 50.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -38.55 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 5.85 + }, + "volume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7e96f475215267b1f53e6431009b68f9", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA3", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 359.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "36e0b46690493b64dea41f3d6c27e266", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c58bd55bfad83d78f2859e636ee2723", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E1" + }, + "result": { + "position": { + "x": 178.38, + "y": 252.38, + "z": 99.0 + }, + "tipDiameter": 5.58, + "tipLength": 47.81, + "tipVolume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c713a0160a4176161ba486b32b07d0dd", + "notes": [], + "params": { + "message": "Reservoir in D3 is to have NO liquid" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "tryLiquidProbe", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ecd85454102ce7575176fc1430b9854f", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "z_position": 0.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "tryLiquidProbe", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1bae2c05e983ffa93cb1e081d438f8ef", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 391.88, + "y": 42.74, + "z": 44.4 + }, + "z_position": 0.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "comment", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d249c3b29b22c37a6412d69a4c83b5c7", + "notes": [], + "params": { + "message": "Is there liquid in the reservoir? True" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [], + "files": [ + { + "name": "Flex_S_v2_20_P50_LPD.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_flex_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "A2" + } + }, + { + "definitionUri": "opentrons/opentrons_flex_96_tiprack_50ul/1", + "id": "UUID", + "loadName": "opentrons_flex_96_tiprack_50ul", + "location": { + "slotName": "B2" + } + }, + { + "definitionUri": "opentrons/armadillo_96_wellplate_200ul_pcr_full_skirt/2", + "id": "UUID", + "loadName": "armadillo_96_wellplate_200ul_pcr_full_skirt", + "location": { + "slotName": "C3" + } + }, + { + "definitionUri": "opentrons/nest_1_reservoir_290ml/1", + "id": "UUID", + "loadName": "nest_1_reservoir_290ml", + "location": { + "slotName": "D3" + } + }, + { + "definitionUri": "opentrons/nest_12_reservoir_15ml/1", + "id": "UUID", + "loadName": "nest_12_reservoir_15ml", + "location": { + "slotName": "B3" + } + } + ], + "liquids": [ + { + "description": "Test this wet!!!", + "displayColor": "#0077b6", + "displayName": "H20", + "id": "UUID" + } + ], + "metadata": { + "author": "Josh McVey", + "description": "http://sandbox.docs.opentrons.com/edge/v2/pipettes/loading.html#liquid-presence-detection", + "protocolName": "Wet test for LPD" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "right", + "pipetteName": "p50_single_flex" + } + ], + "result": "ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[d979799443][OT2_S_v2_20_8_None_SINGLE_HappyPath].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[d979799443][OT2_S_v2_20_8_None_SINGLE_HappyPath].json new file mode 100644 index 00000000000..48690ed2bb8 --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[d979799443][OT2_S_v2_20_8_None_SINGLE_HappyPath].json @@ -0,0 +1,8190 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "displayName": "Partial Tip Rack", + "loadName": "opentrons_96_tiprack_300ul", + "location": { + "slotName": "8" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-300ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 64.49 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 300 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_300ul", + "tipLength": 59.3, + "tipOverlap": 7.47 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 74.24, + "z": 5.39 + }, + "A10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 74.24, + "z": 5.39 + }, + "A11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 74.24, + "z": 5.39 + }, + "A12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 74.24, + "z": 5.39 + }, + "A2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 74.24, + "z": 5.39 + }, + "A3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 74.24, + "z": 5.39 + }, + "A4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 74.24, + "z": 5.39 + }, + "A5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 74.24, + "z": 5.39 + }, + "A6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 74.24, + "z": 5.39 + }, + "A7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 74.24, + "z": 5.39 + }, + "A8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 74.24, + "z": 5.39 + }, + "A9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 74.24, + "z": 5.39 + }, + "B1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 65.24, + "z": 5.39 + }, + "B10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 65.24, + "z": 5.39 + }, + "B11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 65.24, + "z": 5.39 + }, + "B12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 65.24, + "z": 5.39 + }, + "B2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 65.24, + "z": 5.39 + }, + "B3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 65.24, + "z": 5.39 + }, + "B4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 65.24, + "z": 5.39 + }, + "B5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 65.24, + "z": 5.39 + }, + "B6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 65.24, + "z": 5.39 + }, + "B7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 65.24, + "z": 5.39 + }, + "B8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 65.24, + "z": 5.39 + }, + "B9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 65.24, + "z": 5.39 + }, + "C1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 56.24, + "z": 5.39 + }, + "C10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 56.24, + "z": 5.39 + }, + "C11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 56.24, + "z": 5.39 + }, + "C12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 56.24, + "z": 5.39 + }, + "C2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 56.24, + "z": 5.39 + }, + "C3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 56.24, + "z": 5.39 + }, + "C4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 56.24, + "z": 5.39 + }, + "C5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 56.24, + "z": 5.39 + }, + "C6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 56.24, + "z": 5.39 + }, + "C7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 56.24, + "z": 5.39 + }, + "C8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 56.24, + "z": 5.39 + }, + "C9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 56.24, + "z": 5.39 + }, + "D1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 47.24, + "z": 5.39 + }, + "D10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 47.24, + "z": 5.39 + }, + "D11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 47.24, + "z": 5.39 + }, + "D12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 47.24, + "z": 5.39 + }, + "D2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 47.24, + "z": 5.39 + }, + "D3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 47.24, + "z": 5.39 + }, + "D4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 47.24, + "z": 5.39 + }, + "D5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 47.24, + "z": 5.39 + }, + "D6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 47.24, + "z": 5.39 + }, + "D7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 47.24, + "z": 5.39 + }, + "D8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 47.24, + "z": 5.39 + }, + "D9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 47.24, + "z": 5.39 + }, + "E1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 38.24, + "z": 5.39 + }, + "E10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 38.24, + "z": 5.39 + }, + "E11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 38.24, + "z": 5.39 + }, + "E12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 38.24, + "z": 5.39 + }, + "E2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 38.24, + "z": 5.39 + }, + "E3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 38.24, + "z": 5.39 + }, + "E4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 38.24, + "z": 5.39 + }, + "E5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 38.24, + "z": 5.39 + }, + "E6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 38.24, + "z": 5.39 + }, + "E7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 38.24, + "z": 5.39 + }, + "E8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 38.24, + "z": 5.39 + }, + "E9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 38.24, + "z": 5.39 + }, + "F1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 29.24, + "z": 5.39 + }, + "F10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 29.24, + "z": 5.39 + }, + "F11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 29.24, + "z": 5.39 + }, + "F12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 29.24, + "z": 5.39 + }, + "F2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 29.24, + "z": 5.39 + }, + "F3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 29.24, + "z": 5.39 + }, + "F4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 29.24, + "z": 5.39 + }, + "F5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 29.24, + "z": 5.39 + }, + "F6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 29.24, + "z": 5.39 + }, + "F7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 29.24, + "z": 5.39 + }, + "F8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 29.24, + "z": 5.39 + }, + "F9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 29.24, + "z": 5.39 + }, + "G1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 20.24, + "z": 5.39 + }, + "G10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 20.24, + "z": 5.39 + }, + "G11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 20.24, + "z": 5.39 + }, + "G12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 20.24, + "z": 5.39 + }, + "G2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 20.24, + "z": 5.39 + }, + "G3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 20.24, + "z": 5.39 + }, + "G4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 20.24, + "z": 5.39 + }, + "G5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 20.24, + "z": 5.39 + }, + "G6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 20.24, + "z": 5.39 + }, + "G7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 20.24, + "z": 5.39 + }, + "G8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 20.24, + "z": 5.39 + }, + "G9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 20.24, + "z": 5.39 + }, + "H1": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 14.38, + "y": 11.24, + "z": 5.39 + }, + "H10": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 95.38, + "y": 11.24, + "z": 5.39 + }, + "H11": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 104.38, + "y": 11.24, + "z": 5.39 + }, + "H12": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 113.38, + "y": 11.24, + "z": 5.39 + }, + "H2": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 23.38, + "y": 11.24, + "z": 5.39 + }, + "H3": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 32.38, + "y": 11.24, + "z": 5.39 + }, + "H4": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 41.38, + "y": 11.24, + "z": 5.39 + }, + "H5": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 50.38, + "y": 11.24, + "z": 5.39 + }, + "H6": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 59.38, + "y": 11.24, + "z": 5.39 + }, + "H7": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 68.38, + "y": 11.24, + "z": 5.39 + }, + "H8": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 77.38, + "y": 11.24, + "z": 5.39 + }, + "H9": { + "depth": 59.3, + "diameter": 5.23, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 86.38, + "y": 11.24, + "z": 5.39 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p300_multi_gen2", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A1", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "691afd54dfa7982fb89e5f77c763bfd4", + "notes": [], + "params": { + "displayName": "2 Source Labware", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "2" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c910be62291bb94458a59cb4185c5180", + "notes": [], + "params": { + "displayName": "3 Destination Labware", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "3" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2f59e0552969594ba6ab06f03af324e1", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H1" + }, + "result": { + "position": { + "x": 146.88, + "y": 192.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6b0053809cc5ea894449b20181bda1d6", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 164.88, + "y": 74.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9d2ba7d37a294b62afe4d91153783e8d", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A4" + }, + "result": { + "position": { + "x": 173.88, + "y": 74.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e8ce83939641089264883e922565169e", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 20.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 297.38, + "y": 74.24, + "z": 1.92 + }, + "volume": 20.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bc7a3401208e1ebbf2ef653b39f7ec05", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "71264e0d8f121750fadffa4de419d934", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "957785aca5143d6556af5c2cb3c59297", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 146.88, + "y": 201.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4d87d61c6915c64c29bf9601dce504d6", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 191.88, + "y": 74.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a6b3ab33bb429b17ddfcfa80e4795882", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 324.38, + "y": 74.24, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ad078a7983560bdf409c3fafb76a20df", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dc80dca10e7a8e4eb0148afda35d9f7f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "47e2a6e4e082a3edcd417887da1391ea", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F1" + }, + "result": { + "position": { + "x": 146.88, + "y": 210.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8fcfb95fb44994648ec969a5fcc049df", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 30.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 200.88, + "y": 74.24, + "z": 1.92 + }, + "volume": 30.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d5419055b04d30ef91ae9ad466be6814", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 5.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 333.38, + "y": 74.24, + "z": 1.92 + }, + "volume": 5.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "beb80898b59a1324e0cab2e514684044", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 5.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A8" + }, + "result": { + "position": { + "x": 342.38, + "y": 74.24, + "z": 1.92 + }, + "volume": 5.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b189af8f175fc84c04677212be3713cd", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 347.84000000000003, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowOutInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "70fbf1f310a94ff9a76abbf78aed0f5d", + "notes": [], + "params": { + "flowRate": 94.0, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "98e8fdad613e2394706e4ed69bcacd5a", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "02ddfbbad3a85f2dea9649b185df31c0", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d4b54bd1cc3ea0b0f00c771f6d069552", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E1" + }, + "result": { + "position": { + "x": 146.88, + "y": 219.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "touchTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8d44ea65bcbbc368be1bc486199c5c36", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "radius": 1.0, + "speed": 60.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -1.0 + }, + "origin": "top" + }, + "wellName": "B1" + }, + "result": { + "position": { + "x": 146.88, + "y": 65.24, + "z": 14.7 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ff637cfa2197a46f886f9a8f430cba99", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "05e32557ff805e84d62ca868c9d3ffb9", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "09a9af20ba5025d9b73f1e8abb0ae921", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 146.88, + "y": 228.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "886acb0a83206c4beffe85c574403c8c", + "notes": [], + "params": { + "axes": [ + "leftPlunger", + "leftZ" + ] + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0be564f428e87599bd9ad2c95132690f", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0d0b65bd3564dcbd484a27851516a8d8", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bc1207d443da2a4be8c29c638ed95832", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C1" + }, + "result": { + "position": { + "x": 146.88, + "y": 237.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "800a566578fc2c77b3ba63a8740bc11d", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 146.88, + "y": 47.24, + "z": 2.92 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7cdd48fe814ff91d04f2541b5bda803f", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 146.88, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b73df6c1dc10a15fccad64146a9253e3", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 146.88, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "303e819bc213e27cd87898f84a0849d8", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 146.88, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "05d169be70745d1a65829f1a968b95f6", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 146.88, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "76cef1507e46661cad77313a0ed3727d", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 146.88, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "77bfe511646e7418f20da0817e3b96e9", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 146.88, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6c13cf87265353a92dc843600b9d9203", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 146.88, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ade2d2d2074263c9dd505940d90c2dfb", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 146.88, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cccc3a958942894e8046f7b40e5ca74f", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 146.88, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e9c371bfd5e628a170bfbecb5db3a9fd", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 146.88, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7de6a6935a0a885c8bbcaf24d799c23a", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 146.88, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "663261a619fb3978db881c0b49ee5757", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 146.88, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "23b170d0f6b4310456e22bff31768726", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 146.88, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ca000faa3e0a7c16d820dba7f034ea17", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 146.88, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "358e3d9564fef6580430c29ec1abc8be", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 146.88, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5ae5e07479909c02ab7c3380f3d6831c", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 146.88, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "aba2f3c1667e265516ba1b2f7a70bd9b", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 146.88, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e4401c648a31e63d991b887e1e967edf", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 146.88, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8653a8d80a26e9ae5e402cbbf005314c", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 146.88, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "79f12967defc4069a8c9957178510267", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 146.88, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d42541fb8e9dad7fd6df764276d97e85", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 5.0000000000000036 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 146.88, + "y": 47.24, + "z": 20.700000000000003 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a5fe690c7ee2e46760c78e76c1799e32", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 5.0000000000000036 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 146.88, + "y": 47.24, + "z": 20.700000000000003 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "prepareToAspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "147f19190dec5bb7e8082142106cdba8", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b0f86fda12faff8a53661cffc418a681", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 146.88, + "y": 47.24, + "z": 2.92 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "27b170cfd7791ee5264cd8360381fc14", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 146.88, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c580bea6ba31532addf5ce76c8b0aa63", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 146.88, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3a50114af65ad0ce2b5e517279c3a5b6", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d370233cdd09b4925594d9f78744c355", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "492f10d86634ba52387d3434a2c96163", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "H1", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b485fe600db6f864ef8a02a863d2f2df", + "notes": [], + "params": { + "displayName": "4 Source Labware", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "4" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d342a7a2f2d899e4ba66723854c7ac1c", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 146.88, + "y": 255.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "02260787a80fe7fe99e23ac1fca8da38", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 32.38, + "y": 164.74, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd2bb421a55653e63dc6e6b099db9ed2", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A4" + }, + "result": { + "position": { + "x": 41.38, + "y": 164.74, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1d82060c5d578b28bb8742629681ee06", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 20.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 297.38, + "y": 74.24, + "z": 1.92 + }, + "volume": 20.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a5ac2cddaae59eceac79585766284669", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "99295ecf85a0cf8d016bd17b601324fe", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a369fddbe8c5d53e319616b9b2bab53a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B1" + }, + "result": { + "position": { + "x": 146.88, + "y": 246.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5e88ca16149d637e8176d3a1400ab9c9", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 59.38, + "y": 164.74, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "885e2d386d79566126acfb1b1f67fcf1", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 59.38, + "y": 164.74, + "z": 1.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "45f1aca48183f0e7195311f34d496160", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3c8459ed43bae008bb7ab9f21ff42e7b", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d8e8437d353c7e28e01b69748e6922ce", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A2" + }, + "result": { + "position": { + "x": 155.88, + "y": 255.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d1ca4f52dc8c202b1b6e6f0e3daf5701", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 30.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 68.38, + "y": 164.74, + "z": 1.92 + }, + "volume": 30.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c8923d71e8c46050219eb612600dea5a", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 5.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 333.38, + "y": 74.24, + "z": 1.92 + }, + "volume": 5.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3e3f3ed4d9a0428d5a32f1636f928e91", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 5.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -13.78 + }, + "origin": "top" + }, + "wellName": "A8" + }, + "result": { + "position": { + "x": 342.38, + "y": 74.24, + "z": 1.92 + }, + "volume": 5.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "023f69c7021c531af4d4fda2f9387b50", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": false, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 347.84000000000003, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowOutInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bc69177b8a2a770ff7605145761fff5d", + "notes": [], + "params": { + "flowRate": 94.0, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "51975e367416e2f6c1d2a522150b3500", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d3bbbb8214d81f471444571dfb2dc3a2", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9dabbd470c235976667f28d0444dd3dc", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B2" + }, + "result": { + "position": { + "x": 155.88, + "y": 246.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "touchTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b26a3c132f8ad3706405bfd0c2f7e551", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "radius": 1.0, + "speed": 60.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -1.0 + }, + "origin": "top" + }, + "wellName": "B1" + }, + "result": { + "position": { + "x": 279.38, + "y": 65.24, + "z": 14.7 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cd63b658ce3fcddaa1ad64e6bc0ae46d", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "17ca68e5c158de12859b20cb7544b5db", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "240dd94e8911c623b8ac0c62a5dbf42d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C2" + }, + "result": { + "position": { + "x": 155.88, + "y": 237.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "10048f466a9c345ca8123a5b66e4d1a4", + "notes": [], + "params": { + "axes": [ + "leftPlunger", + "leftZ" + ] + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e6ba244c71314bb7c6728c4c9040b773", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 363.89500000000004, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c29530b269acd8ca7ae19bd3827db60d", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7c3557cb39beec1a448812ae0e9d8caf", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D2" + }, + "result": { + "position": { + "x": 155.88, + "y": 228.24, + "z": 64.69 + }, + "tipDiameter": 5.23, + "tipLength": 51.099999999999994, + "tipVolume": 300.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "23f4e567a15a351a336a65387550c6fb", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 279.38, + "y": 47.24, + "z": 2.92 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f2758b7979d09db42c526e37ad996ce7", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 279.38, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8ebe6d7fb82b01a1a40863975097487b", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 279.38, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cdb131745372c3f23f795b8b6c8e3a27", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 279.38, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ffa7e9319827cf7160a227f55a5044e1", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 279.38, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5090e2ec6f1af16b3ad782af703fab3b", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 279.38, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f3c375ef10c41708becdf325ad99c66e", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 279.38, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3c99b73256ef0546bf970558fea377d9", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 279.38, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "14b31f7e50d50cc2a1fa62ffff4dea73", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 279.38, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "48495414937db819949301728ed14335", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 279.38, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b4c832b00b05cd24adb5de47460414e7", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 279.38, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8911314efdc1b5b2ad34e31851319ed8", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 279.38, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c648d8fbb5c317dee166662efb023ed8", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 279.38, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9e2b3d6d808e30892b38343c98a3188d", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 279.38, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7ec0e675702e7c0de055e628d30f98ad", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 279.38, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "16e8c93ac034471d25dfdd5f4daf5f2c", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 279.38, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "52e6d8801aa49ddc3e9ab9bb5bacf501", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 279.38, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b5b598a56f39cc2b5276b4dddc00b284", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 279.38, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e2d6c04a26fb8bd4cf5d757ef1c4712f", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "pushOut": 0.0, + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 279.38, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "622b545e9dd3846a153993d91f7b5c05", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 279.38, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "51100f9df2c951cf0ce7ded1c52509e2", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 279.38, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2d8c06eb56aad35557edf58cd6014e81", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 5.0000000000000036 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 279.38, + "y": 47.24, + "z": 20.700000000000003 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "blowout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "142753a1e2a3a2f44806a9fca2cde945", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 5.0000000000000036 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 279.38, + "y": 47.24, + "z": 20.700000000000003 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "prepareToAspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8b59b2d67c8199cc77856f982a528565", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToWell", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "44d4da57eafecbbfd7d9862645284458", + "notes": [], + "params": { + "forceDirect": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 279.38, + "y": 47.24, + "z": 2.92 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0a8b0de159b4f9afd550efc670b6fde4", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 279.38, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5d769cef47874e6bfa53fe86a15f64d9", + "notes": [], + "params": { + "flowRate": 94.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 10.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -12.78 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 279.38, + "y": 47.24, + "z": 2.92 + }, + "volume": 10.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4d6c3e50d408e00ae799218a23732825", + "notes": [], + "params": { + "addressableAreaName": "fixedTrash", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 331.785, + "y": 351.5, + "z": 82.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "943db37c01519ce052292fdf7485a6e1", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [], + "files": [ + { + "name": "OT2_S_v2_20_8_None_SINGLE_HappyPath.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_96_tiprack_300ul/1", + "displayName": "Partial Tip Rack", + "id": "UUID", + "loadName": "opentrons_96_tiprack_300ul", + "location": { + "slotName": "8" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "displayName": "2 Source Labware", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "2" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "displayName": "3 Destination Labware", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "3" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "displayName": "4 Source Labware", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "4" + } + } + ], + "liquids": [], + "metadata": { + "description": "OT2 8 Channel pipette and a SINGLE partial tip configuration.", + "protocolName": "OT2 8 Channel SINGLE Happy Path A1 and H1" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p300_multi_gen2" + } + ], + "result": "ok", + "robotType": "OT-2 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[db1fae41ec][Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_ninety_six_partial_column_3].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[db1fae41ec][Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_ninety_six_partial_column_3].json new file mode 100644 index 00000000000..beb0aa09c29 --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[db1fae41ec][Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_ninety_six_partial_column_3].json @@ -0,0 +1,1260 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "B2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.75, + "zDimension": 99 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 23.9, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons Flex 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_flex_96_tiprack_1000ul", + "quirks": [], + "tipLength": 95.6, + "tipOverlap": 10.5 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 121 + } + }, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.38, + "z": 1.5 + }, + "A10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.38, + "z": 1.5 + }, + "A11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.38, + "z": 1.5 + }, + "A12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.38, + "z": 1.5 + }, + "A2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.38, + "z": 1.5 + }, + "A3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.38, + "z": 1.5 + }, + "A4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.38, + "z": 1.5 + }, + "A5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.38, + "z": 1.5 + }, + "A6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.38, + "z": 1.5 + }, + "A7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.38, + "z": 1.5 + }, + "A8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.38, + "z": 1.5 + }, + "A9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.38, + "z": 1.5 + }, + "B1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.38, + "z": 1.5 + }, + "B10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.38, + "z": 1.5 + }, + "B11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.38, + "z": 1.5 + }, + "B12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.38, + "z": 1.5 + }, + "B2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.38, + "z": 1.5 + }, + "B3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.38, + "z": 1.5 + }, + "B4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.38, + "z": 1.5 + }, + "B5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.38, + "z": 1.5 + }, + "B6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.38, + "z": 1.5 + }, + "B7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.38, + "z": 1.5 + }, + "B8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.38, + "z": 1.5 + }, + "B9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.38, + "z": 1.5 + }, + "C1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.38, + "z": 1.5 + }, + "C10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.38, + "z": 1.5 + }, + "C11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.38, + "z": 1.5 + }, + "C12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.38, + "z": 1.5 + }, + "C2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.38, + "z": 1.5 + }, + "C3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.38, + "z": 1.5 + }, + "C4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.38, + "z": 1.5 + }, + "C5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.38, + "z": 1.5 + }, + "C6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.38, + "z": 1.5 + }, + "C7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.38, + "z": 1.5 + }, + "C8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.38, + "z": 1.5 + }, + "C9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.38, + "z": 1.5 + }, + "D1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.38, + "z": 1.5 + }, + "D10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.38, + "z": 1.5 + }, + "D11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.38, + "z": 1.5 + }, + "D12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.38, + "z": 1.5 + }, + "D2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.38, + "z": 1.5 + }, + "D3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.38, + "z": 1.5 + }, + "D4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.38, + "z": 1.5 + }, + "D5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.38, + "z": 1.5 + }, + "D6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.38, + "z": 1.5 + }, + "D7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.38, + "z": 1.5 + }, + "D8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.38, + "z": 1.5 + }, + "D9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.38, + "z": 1.5 + }, + "E1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.38, + "z": 1.5 + }, + "E10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.38, + "z": 1.5 + }, + "E11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.38, + "z": 1.5 + }, + "E12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.38, + "z": 1.5 + }, + "E2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.38, + "z": 1.5 + }, + "E3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.38, + "z": 1.5 + }, + "E4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.38, + "z": 1.5 + }, + "E5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.38, + "z": 1.5 + }, + "E6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.38, + "z": 1.5 + }, + "E7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.38, + "z": 1.5 + }, + "E8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.38, + "z": 1.5 + }, + "E9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.38, + "z": 1.5 + }, + "F1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.38, + "z": 1.5 + }, + "F10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.38, + "z": 1.5 + }, + "F11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.38, + "z": 1.5 + }, + "F12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.38, + "z": 1.5 + }, + "F2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.38, + "z": 1.5 + }, + "F3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.38, + "z": 1.5 + }, + "F4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.38, + "z": 1.5 + }, + "F5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.38, + "z": 1.5 + }, + "F6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.38, + "z": 1.5 + }, + "F7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.38, + "z": 1.5 + }, + "F8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.38, + "z": 1.5 + }, + "F9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.38, + "z": 1.5 + }, + "G1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.38, + "z": 1.5 + }, + "G10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.38, + "z": 1.5 + }, + "G11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.38, + "z": 1.5 + }, + "G12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.38, + "z": 1.5 + }, + "G2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.38, + "z": 1.5 + }, + "G3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.38, + "z": 1.5 + }, + "G4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.38, + "z": 1.5 + }, + "G5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.38, + "z": 1.5 + }, + "G6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.38, + "z": 1.5 + }, + "G7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.38, + "z": 1.5 + }, + "G8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.38, + "z": 1.5 + }, + "G9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.38, + "z": 1.5 + }, + "H1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.38, + "z": 1.5 + }, + "H10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.38, + "z": 1.5 + }, + "H11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.38, + "z": 1.5 + }, + "H12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.38, + "z": 1.5 + }, + "H2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.38, + "z": 1.5 + }, + "H3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.38, + "z": 1.5 + }, + "H4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.38, + "z": 1.5 + }, + "H5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.38, + "z": 1.5 + }, + "H6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.38, + "z": 1.5 + }, + "H7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.38, + "z": 1.5 + }, + "H8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.38, + "z": 1.5 + }, + "H9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.38, + "z": 1.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "ValueError [line 167]: Partial column configuration is only supported on 8-Channel pipettes.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "ValueError: Partial column configuration is only supported on 8-Channel pipettes.", + "errorCode": "4000", + "errorInfo": { + "args": "('Partial column configuration is only supported on 8-Channel pipettes.',)", + "class": "ValueError", + "traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/execution/execute_python.py\", line N, in exec_run\n exec(\"run(__context)\", new_globs)\n\n File \"\", line N, in \n\n File \"Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_ninety_six_partial_column_3.py\", line N, in run\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/api_support/util.py\", line N, in _check_version_wrapper\n return decorated_obj(*args, **kwargs)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_api/instrument_context.py\", line N, in configure_nozzle_layout\n self._raise_if_configuration_not_supported_by_pipette(style)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_api/instrument_context.py\", line N, in _raise_if_configuration_not_supported_by_pipette\n raise ValueError(\n" + }, + "errorType": "PythonException", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_20_96_and_8_Overrides_InvalidConfigs_Override_ninety_six_partial_column_3.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_flex_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "B2" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Invalid tip configs that should error" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_96" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[e84e23a4ea][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_top_edge].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[e84e23a4ea][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_top_edge].json new file mode 100644 index 00000000000..3ab5889bbf7 --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[e84e23a4ea][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_top_edge].json @@ -0,0 +1,1268 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "A1" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-1000ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 97.47 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_1000ul", + "tipLength": 88, + "tipOverlap": 7.95 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.24, + "z": 9.47 + }, + "A10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.24, + "z": 9.47 + }, + "A11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.24, + "z": 9.47 + }, + "A12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.24, + "z": 9.47 + }, + "A2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.24, + "z": 9.47 + }, + "A3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.24, + "z": 9.47 + }, + "A4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.24, + "z": 9.47 + }, + "A5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.24, + "z": 9.47 + }, + "A6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.24, + "z": 9.47 + }, + "A7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.24, + "z": 9.47 + }, + "A8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.24, + "z": 9.47 + }, + "A9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.24, + "z": 9.47 + }, + "B1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.24, + "z": 9.47 + }, + "B10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.24, + "z": 9.47 + }, + "B11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.24, + "z": 9.47 + }, + "B12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.24, + "z": 9.47 + }, + "B2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.24, + "z": 9.47 + }, + "B3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.24, + "z": 9.47 + }, + "B4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.24, + "z": 9.47 + }, + "B5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.24, + "z": 9.47 + }, + "B6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.24, + "z": 9.47 + }, + "B7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.24, + "z": 9.47 + }, + "B8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.24, + "z": 9.47 + }, + "B9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.24, + "z": 9.47 + }, + "C1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.24, + "z": 9.47 + }, + "C10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.24, + "z": 9.47 + }, + "C11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.24, + "z": 9.47 + }, + "C12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.24, + "z": 9.47 + }, + "C2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.24, + "z": 9.47 + }, + "C3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.24, + "z": 9.47 + }, + "C4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.24, + "z": 9.47 + }, + "C5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.24, + "z": 9.47 + }, + "C6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.24, + "z": 9.47 + }, + "C7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.24, + "z": 9.47 + }, + "C8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.24, + "z": 9.47 + }, + "C9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.24, + "z": 9.47 + }, + "D1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.24, + "z": 9.47 + }, + "D10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.24, + "z": 9.47 + }, + "D11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.24, + "z": 9.47 + }, + "D12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.24, + "z": 9.47 + }, + "D2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.24, + "z": 9.47 + }, + "D3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.24, + "z": 9.47 + }, + "D4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.24, + "z": 9.47 + }, + "D5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.24, + "z": 9.47 + }, + "D6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.24, + "z": 9.47 + }, + "D7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.24, + "z": 9.47 + }, + "D8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.24, + "z": 9.47 + }, + "D9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.24, + "z": 9.47 + }, + "E1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.24, + "z": 9.47 + }, + "E10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.24, + "z": 9.47 + }, + "E11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.24, + "z": 9.47 + }, + "E12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.24, + "z": 9.47 + }, + "E2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.24, + "z": 9.47 + }, + "E3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.24, + "z": 9.47 + }, + "E4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.24, + "z": 9.47 + }, + "E5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.24, + "z": 9.47 + }, + "E6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.24, + "z": 9.47 + }, + "E7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.24, + "z": 9.47 + }, + "E8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.24, + "z": 9.47 + }, + "E9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.24, + "z": 9.47 + }, + "F1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.24, + "z": 9.47 + }, + "F10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.24, + "z": 9.47 + }, + "F11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.24, + "z": 9.47 + }, + "F12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.24, + "z": 9.47 + }, + "F2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.24, + "z": 9.47 + }, + "F3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.24, + "z": 9.47 + }, + "F4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.24, + "z": 9.47 + }, + "F5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.24, + "z": 9.47 + }, + "F6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.24, + "z": 9.47 + }, + "F7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.24, + "z": 9.47 + }, + "F8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.24, + "z": 9.47 + }, + "F9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.24, + "z": 9.47 + }, + "G1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.24, + "z": 9.47 + }, + "G10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.24, + "z": 9.47 + }, + "G11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.24, + "z": 9.47 + }, + "G12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.24, + "z": 9.47 + }, + "G2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.24, + "z": 9.47 + }, + "G3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.24, + "z": 9.47 + }, + "G4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.24, + "z": 9.47 + }, + "G5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.24, + "z": 9.47 + }, + "G6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.24, + "z": 9.47 + }, + "G7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.24, + "z": 9.47 + }, + "G8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.24, + "z": 9.47 + }, + "G9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.24, + "z": 9.47 + }, + "H1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.24, + "z": 9.47 + }, + "H10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.24, + "z": 9.47 + }, + "H11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.24, + "z": 9.47 + }, + "H12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.24, + "z": 9.47 + }, + "H2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.24, + "z": 9.47 + }, + "H3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.24, + "z": 9.47 + }, + "H4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.24, + "z": 9.47 + }, + "H5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.24, + "z": 9.47 + }, + "H6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.24, + "z": 9.47 + }, + "H7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.24, + "z": 9.47 + }, + "H8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.24, + "z": 9.47 + }, + "H9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.24, + "z": 9.47 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "H12", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "PartialTipMovementNotAllowedError [line 479]: Error 2004 MOTION_PLANNING_FAILURE (PartialTipMovementNotAllowedError): Requested motion with the H12 nozzle partial configuration is outside of robot bounds for the pipette.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "Requested motion with the H12 nozzle partial configuration is outside of robot bounds for the pipette.", + "errorCode": "2004", + "errorInfo": {}, + "errorType": "PartialTipMovementNotAllowedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_top_edge.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "A1" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Too tall labware on pickup tip" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_96" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[e8f451df45][Flex_S_v2_20_96_None_Column3_SINGLE_].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[e8f451df45][Flex_S_v2_20_96_None_Column3_SINGLE_].json new file mode 100644 index 00000000000..ca6f70d1692 --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[e8f451df45][Flex_S_v2_20_96_None_Column3_SINGLE_].json @@ -0,0 +1,26859 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0c3bb3b5f63458c1ff149d26e64d98b5", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "80976ce3dffe6efe69a8b26c3c4a1f4b", + "notes": [], + "params": { + "displayName": "Partial Tip Rack", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "A2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.75, + "zDimension": 99 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 23.9, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons Flex 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_flex_96_tiprack_1000ul", + "quirks": [], + "tipLength": 95.6, + "tipOverlap": 10.5 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 121 + } + }, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.38, + "z": 1.5 + }, + "A10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.38, + "z": 1.5 + }, + "A11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.38, + "z": 1.5 + }, + "A12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.38, + "z": 1.5 + }, + "A2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.38, + "z": 1.5 + }, + "A3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.38, + "z": 1.5 + }, + "A4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.38, + "z": 1.5 + }, + "A5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.38, + "z": 1.5 + }, + "A6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.38, + "z": 1.5 + }, + "A7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.38, + "z": 1.5 + }, + "A8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.38, + "z": 1.5 + }, + "A9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.38, + "z": 1.5 + }, + "B1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.38, + "z": 1.5 + }, + "B10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.38, + "z": 1.5 + }, + "B11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.38, + "z": 1.5 + }, + "B12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.38, + "z": 1.5 + }, + "B2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.38, + "z": 1.5 + }, + "B3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.38, + "z": 1.5 + }, + "B4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.38, + "z": 1.5 + }, + "B5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.38, + "z": 1.5 + }, + "B6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.38, + "z": 1.5 + }, + "B7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.38, + "z": 1.5 + }, + "B8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.38, + "z": 1.5 + }, + "B9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.38, + "z": 1.5 + }, + "C1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.38, + "z": 1.5 + }, + "C10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.38, + "z": 1.5 + }, + "C11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.38, + "z": 1.5 + }, + "C12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.38, + "z": 1.5 + }, + "C2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.38, + "z": 1.5 + }, + "C3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.38, + "z": 1.5 + }, + "C4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.38, + "z": 1.5 + }, + "C5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.38, + "z": 1.5 + }, + "C6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.38, + "z": 1.5 + }, + "C7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.38, + "z": 1.5 + }, + "C8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.38, + "z": 1.5 + }, + "C9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.38, + "z": 1.5 + }, + "D1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.38, + "z": 1.5 + }, + "D10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.38, + "z": 1.5 + }, + "D11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.38, + "z": 1.5 + }, + "D12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.38, + "z": 1.5 + }, + "D2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.38, + "z": 1.5 + }, + "D3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.38, + "z": 1.5 + }, + "D4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.38, + "z": 1.5 + }, + "D5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.38, + "z": 1.5 + }, + "D6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.38, + "z": 1.5 + }, + "D7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.38, + "z": 1.5 + }, + "D8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.38, + "z": 1.5 + }, + "D9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.38, + "z": 1.5 + }, + "E1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.38, + "z": 1.5 + }, + "E10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.38, + "z": 1.5 + }, + "E11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.38, + "z": 1.5 + }, + "E12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.38, + "z": 1.5 + }, + "E2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.38, + "z": 1.5 + }, + "E3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.38, + "z": 1.5 + }, + "E4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.38, + "z": 1.5 + }, + "E5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.38, + "z": 1.5 + }, + "E6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.38, + "z": 1.5 + }, + "E7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.38, + "z": 1.5 + }, + "E8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.38, + "z": 1.5 + }, + "E9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.38, + "z": 1.5 + }, + "F1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.38, + "z": 1.5 + }, + "F10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.38, + "z": 1.5 + }, + "F11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.38, + "z": 1.5 + }, + "F12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.38, + "z": 1.5 + }, + "F2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.38, + "z": 1.5 + }, + "F3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.38, + "z": 1.5 + }, + "F4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.38, + "z": 1.5 + }, + "F5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.38, + "z": 1.5 + }, + "F6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.38, + "z": 1.5 + }, + "F7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.38, + "z": 1.5 + }, + "F8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.38, + "z": 1.5 + }, + "F9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.38, + "z": 1.5 + }, + "G1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.38, + "z": 1.5 + }, + "G10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.38, + "z": 1.5 + }, + "G11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.38, + "z": 1.5 + }, + "G12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.38, + "z": 1.5 + }, + "G2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.38, + "z": 1.5 + }, + "G3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.38, + "z": 1.5 + }, + "G4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.38, + "z": 1.5 + }, + "G5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.38, + "z": 1.5 + }, + "G6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.38, + "z": 1.5 + }, + "G7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.38, + "z": 1.5 + }, + "G8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.38, + "z": 1.5 + }, + "G9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.38, + "z": 1.5 + }, + "H1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.38, + "z": 1.5 + }, + "H10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.38, + "z": 1.5 + }, + "H11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.38, + "z": 1.5 + }, + "H12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.38, + "z": 1.5 + }, + "H2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.38, + "z": 1.5 + }, + "H3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.38, + "z": 1.5 + }, + "H4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.38, + "z": 1.5 + }, + "H5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.38, + "z": 1.5 + }, + "H6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.38, + "z": 1.5 + }, + "H7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.38, + "z": 1.5 + }, + "H8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.38, + "z": 1.5 + }, + "H9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.38, + "z": 1.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d89b7e852badd592f2c16cd019f596b5", + "notes": [], + "params": { + "displayName": "Partial Tip Rack", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "B2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.75, + "zDimension": 99 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 23.9, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons Flex 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_flex_96_tiprack_1000ul", + "quirks": [], + "tipLength": 95.6, + "tipOverlap": 10.5 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 121 + } + }, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.38, + "z": 1.5 + }, + "A10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.38, + "z": 1.5 + }, + "A11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.38, + "z": 1.5 + }, + "A12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.38, + "z": 1.5 + }, + "A2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.38, + "z": 1.5 + }, + "A3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.38, + "z": 1.5 + }, + "A4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.38, + "z": 1.5 + }, + "A5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.38, + "z": 1.5 + }, + "A6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.38, + "z": 1.5 + }, + "A7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.38, + "z": 1.5 + }, + "A8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.38, + "z": 1.5 + }, + "A9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.38, + "z": 1.5 + }, + "B1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.38, + "z": 1.5 + }, + "B10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.38, + "z": 1.5 + }, + "B11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.38, + "z": 1.5 + }, + "B12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.38, + "z": 1.5 + }, + "B2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.38, + "z": 1.5 + }, + "B3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.38, + "z": 1.5 + }, + "B4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.38, + "z": 1.5 + }, + "B5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.38, + "z": 1.5 + }, + "B6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.38, + "z": 1.5 + }, + "B7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.38, + "z": 1.5 + }, + "B8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.38, + "z": 1.5 + }, + "B9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.38, + "z": 1.5 + }, + "C1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.38, + "z": 1.5 + }, + "C10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.38, + "z": 1.5 + }, + "C11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.38, + "z": 1.5 + }, + "C12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.38, + "z": 1.5 + }, + "C2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.38, + "z": 1.5 + }, + "C3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.38, + "z": 1.5 + }, + "C4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.38, + "z": 1.5 + }, + "C5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.38, + "z": 1.5 + }, + "C6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.38, + "z": 1.5 + }, + "C7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.38, + "z": 1.5 + }, + "C8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.38, + "z": 1.5 + }, + "C9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.38, + "z": 1.5 + }, + "D1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.38, + "z": 1.5 + }, + "D10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.38, + "z": 1.5 + }, + "D11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.38, + "z": 1.5 + }, + "D12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.38, + "z": 1.5 + }, + "D2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.38, + "z": 1.5 + }, + "D3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.38, + "z": 1.5 + }, + "D4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.38, + "z": 1.5 + }, + "D5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.38, + "z": 1.5 + }, + "D6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.38, + "z": 1.5 + }, + "D7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.38, + "z": 1.5 + }, + "D8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.38, + "z": 1.5 + }, + "D9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.38, + "z": 1.5 + }, + "E1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.38, + "z": 1.5 + }, + "E10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.38, + "z": 1.5 + }, + "E11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.38, + "z": 1.5 + }, + "E12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.38, + "z": 1.5 + }, + "E2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.38, + "z": 1.5 + }, + "E3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.38, + "z": 1.5 + }, + "E4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.38, + "z": 1.5 + }, + "E5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.38, + "z": 1.5 + }, + "E6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.38, + "z": 1.5 + }, + "E7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.38, + "z": 1.5 + }, + "E8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.38, + "z": 1.5 + }, + "E9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.38, + "z": 1.5 + }, + "F1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.38, + "z": 1.5 + }, + "F10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.38, + "z": 1.5 + }, + "F11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.38, + "z": 1.5 + }, + "F12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.38, + "z": 1.5 + }, + "F2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.38, + "z": 1.5 + }, + "F3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.38, + "z": 1.5 + }, + "F4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.38, + "z": 1.5 + }, + "F5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.38, + "z": 1.5 + }, + "F6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.38, + "z": 1.5 + }, + "F7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.38, + "z": 1.5 + }, + "F8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.38, + "z": 1.5 + }, + "F9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.38, + "z": 1.5 + }, + "G1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.38, + "z": 1.5 + }, + "G10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.38, + "z": 1.5 + }, + "G11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.38, + "z": 1.5 + }, + "G12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.38, + "z": 1.5 + }, + "G2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.38, + "z": 1.5 + }, + "G3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.38, + "z": 1.5 + }, + "G4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.38, + "z": 1.5 + }, + "G5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.38, + "z": 1.5 + }, + "G6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.38, + "z": 1.5 + }, + "G7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.38, + "z": 1.5 + }, + "G8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.38, + "z": 1.5 + }, + "G9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.38, + "z": 1.5 + }, + "H1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.38, + "z": 1.5 + }, + "H10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.38, + "z": 1.5 + }, + "H11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.38, + "z": 1.5 + }, + "H12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.38, + "z": 1.5 + }, + "H2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.38, + "z": 1.5 + }, + "H3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.38, + "z": 1.5 + }, + "H4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.38, + "z": 1.5 + }, + "H5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.38, + "z": 1.5 + }, + "H6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.38, + "z": 1.5 + }, + "H7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.38, + "z": 1.5 + }, + "H8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.38, + "z": 1.5 + }, + "H9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.38, + "z": 1.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "440fd5d4d25f78376014c66392a18e38", + "notes": [], + "params": { + "displayName": "Partial Tip Rack", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "C2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.75, + "zDimension": 99 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 23.9, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons Flex 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_flex_96_tiprack_1000ul", + "quirks": [], + "tipLength": 95.6, + "tipOverlap": 10.5 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 121 + } + }, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.38, + "z": 1.5 + }, + "A10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.38, + "z": 1.5 + }, + "A11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.38, + "z": 1.5 + }, + "A12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.38, + "z": 1.5 + }, + "A2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.38, + "z": 1.5 + }, + "A3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.38, + "z": 1.5 + }, + "A4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.38, + "z": 1.5 + }, + "A5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.38, + "z": 1.5 + }, + "A6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.38, + "z": 1.5 + }, + "A7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.38, + "z": 1.5 + }, + "A8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.38, + "z": 1.5 + }, + "A9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.38, + "z": 1.5 + }, + "B1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.38, + "z": 1.5 + }, + "B10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.38, + "z": 1.5 + }, + "B11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.38, + "z": 1.5 + }, + "B12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.38, + "z": 1.5 + }, + "B2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.38, + "z": 1.5 + }, + "B3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.38, + "z": 1.5 + }, + "B4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.38, + "z": 1.5 + }, + "B5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.38, + "z": 1.5 + }, + "B6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.38, + "z": 1.5 + }, + "B7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.38, + "z": 1.5 + }, + "B8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.38, + "z": 1.5 + }, + "B9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.38, + "z": 1.5 + }, + "C1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.38, + "z": 1.5 + }, + "C10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.38, + "z": 1.5 + }, + "C11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.38, + "z": 1.5 + }, + "C12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.38, + "z": 1.5 + }, + "C2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.38, + "z": 1.5 + }, + "C3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.38, + "z": 1.5 + }, + "C4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.38, + "z": 1.5 + }, + "C5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.38, + "z": 1.5 + }, + "C6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.38, + "z": 1.5 + }, + "C7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.38, + "z": 1.5 + }, + "C8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.38, + "z": 1.5 + }, + "C9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.38, + "z": 1.5 + }, + "D1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.38, + "z": 1.5 + }, + "D10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.38, + "z": 1.5 + }, + "D11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.38, + "z": 1.5 + }, + "D12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.38, + "z": 1.5 + }, + "D2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.38, + "z": 1.5 + }, + "D3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.38, + "z": 1.5 + }, + "D4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.38, + "z": 1.5 + }, + "D5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.38, + "z": 1.5 + }, + "D6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.38, + "z": 1.5 + }, + "D7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.38, + "z": 1.5 + }, + "D8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.38, + "z": 1.5 + }, + "D9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.38, + "z": 1.5 + }, + "E1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.38, + "z": 1.5 + }, + "E10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.38, + "z": 1.5 + }, + "E11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.38, + "z": 1.5 + }, + "E12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.38, + "z": 1.5 + }, + "E2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.38, + "z": 1.5 + }, + "E3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.38, + "z": 1.5 + }, + "E4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.38, + "z": 1.5 + }, + "E5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.38, + "z": 1.5 + }, + "E6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.38, + "z": 1.5 + }, + "E7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.38, + "z": 1.5 + }, + "E8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.38, + "z": 1.5 + }, + "E9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.38, + "z": 1.5 + }, + "F1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.38, + "z": 1.5 + }, + "F10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.38, + "z": 1.5 + }, + "F11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.38, + "z": 1.5 + }, + "F12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.38, + "z": 1.5 + }, + "F2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.38, + "z": 1.5 + }, + "F3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.38, + "z": 1.5 + }, + "F4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.38, + "z": 1.5 + }, + "F5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.38, + "z": 1.5 + }, + "F6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.38, + "z": 1.5 + }, + "F7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.38, + "z": 1.5 + }, + "F8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.38, + "z": 1.5 + }, + "F9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.38, + "z": 1.5 + }, + "G1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.38, + "z": 1.5 + }, + "G10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.38, + "z": 1.5 + }, + "G11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.38, + "z": 1.5 + }, + "G12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.38, + "z": 1.5 + }, + "G2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.38, + "z": 1.5 + }, + "G3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.38, + "z": 1.5 + }, + "G4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.38, + "z": 1.5 + }, + "G5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.38, + "z": 1.5 + }, + "G6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.38, + "z": 1.5 + }, + "G7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.38, + "z": 1.5 + }, + "G8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.38, + "z": 1.5 + }, + "G9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.38, + "z": 1.5 + }, + "H1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.38, + "z": 1.5 + }, + "H10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.38, + "z": 1.5 + }, + "H11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.38, + "z": 1.5 + }, + "H12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.38, + "z": 1.5 + }, + "H2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.38, + "z": 1.5 + }, + "H3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.38, + "z": 1.5 + }, + "H4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.38, + "z": 1.5 + }, + "H5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.38, + "z": 1.5 + }, + "H6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.38, + "z": 1.5 + }, + "H7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.38, + "z": 1.5 + }, + "H8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.38, + "z": 1.5 + }, + "H9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.38, + "z": 1.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d18d39c6822ff1cd6ce2fd098338c7f0", + "notes": [], + "params": { + "displayName": "Partial Tip Rack", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "D2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.75, + "zDimension": 99 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 23.9, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons Flex 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_flex_96_tiprack_1000ul", + "quirks": [], + "tipLength": 95.6, + "tipOverlap": 10.5 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 121 + } + }, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.38, + "z": 1.5 + }, + "A10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.38, + "z": 1.5 + }, + "A11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.38, + "z": 1.5 + }, + "A12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.38, + "z": 1.5 + }, + "A2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.38, + "z": 1.5 + }, + "A3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.38, + "z": 1.5 + }, + "A4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.38, + "z": 1.5 + }, + "A5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.38, + "z": 1.5 + }, + "A6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.38, + "z": 1.5 + }, + "A7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.38, + "z": 1.5 + }, + "A8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.38, + "z": 1.5 + }, + "A9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.38, + "z": 1.5 + }, + "B1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.38, + "z": 1.5 + }, + "B10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.38, + "z": 1.5 + }, + "B11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.38, + "z": 1.5 + }, + "B12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.38, + "z": 1.5 + }, + "B2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.38, + "z": 1.5 + }, + "B3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.38, + "z": 1.5 + }, + "B4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.38, + "z": 1.5 + }, + "B5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.38, + "z": 1.5 + }, + "B6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.38, + "z": 1.5 + }, + "B7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.38, + "z": 1.5 + }, + "B8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.38, + "z": 1.5 + }, + "B9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.38, + "z": 1.5 + }, + "C1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.38, + "z": 1.5 + }, + "C10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.38, + "z": 1.5 + }, + "C11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.38, + "z": 1.5 + }, + "C12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.38, + "z": 1.5 + }, + "C2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.38, + "z": 1.5 + }, + "C3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.38, + "z": 1.5 + }, + "C4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.38, + "z": 1.5 + }, + "C5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.38, + "z": 1.5 + }, + "C6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.38, + "z": 1.5 + }, + "C7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.38, + "z": 1.5 + }, + "C8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.38, + "z": 1.5 + }, + "C9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.38, + "z": 1.5 + }, + "D1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.38, + "z": 1.5 + }, + "D10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.38, + "z": 1.5 + }, + "D11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.38, + "z": 1.5 + }, + "D12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.38, + "z": 1.5 + }, + "D2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.38, + "z": 1.5 + }, + "D3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.38, + "z": 1.5 + }, + "D4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.38, + "z": 1.5 + }, + "D5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.38, + "z": 1.5 + }, + "D6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.38, + "z": 1.5 + }, + "D7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.38, + "z": 1.5 + }, + "D8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.38, + "z": 1.5 + }, + "D9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.38, + "z": 1.5 + }, + "E1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.38, + "z": 1.5 + }, + "E10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.38, + "z": 1.5 + }, + "E11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.38, + "z": 1.5 + }, + "E12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.38, + "z": 1.5 + }, + "E2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.38, + "z": 1.5 + }, + "E3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.38, + "z": 1.5 + }, + "E4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.38, + "z": 1.5 + }, + "E5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.38, + "z": 1.5 + }, + "E6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.38, + "z": 1.5 + }, + "E7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.38, + "z": 1.5 + }, + "E8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.38, + "z": 1.5 + }, + "E9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.38, + "z": 1.5 + }, + "F1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.38, + "z": 1.5 + }, + "F10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.38, + "z": 1.5 + }, + "F11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.38, + "z": 1.5 + }, + "F12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.38, + "z": 1.5 + }, + "F2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.38, + "z": 1.5 + }, + "F3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.38, + "z": 1.5 + }, + "F4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.38, + "z": 1.5 + }, + "F5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.38, + "z": 1.5 + }, + "F6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.38, + "z": 1.5 + }, + "F7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.38, + "z": 1.5 + }, + "F8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.38, + "z": 1.5 + }, + "F9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.38, + "z": 1.5 + }, + "G1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.38, + "z": 1.5 + }, + "G10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.38, + "z": 1.5 + }, + "G11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.38, + "z": 1.5 + }, + "G12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.38, + "z": 1.5 + }, + "G2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.38, + "z": 1.5 + }, + "G3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.38, + "z": 1.5 + }, + "G4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.38, + "z": 1.5 + }, + "G5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.38, + "z": 1.5 + }, + "G6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.38, + "z": 1.5 + }, + "G7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.38, + "z": 1.5 + }, + "G8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.38, + "z": 1.5 + }, + "G9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.38, + "z": 1.5 + }, + "H1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.38, + "z": 1.5 + }, + "H10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.38, + "z": 1.5 + }, + "H11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.38, + "z": 1.5 + }, + "H12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.38, + "z": 1.5 + }, + "H2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.38, + "z": 1.5 + }, + "H3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.38, + "z": 1.5 + }, + "H4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.38, + "z": 1.5 + }, + "H5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.38, + "z": 1.5 + }, + "H6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.38, + "z": 1.5 + }, + "H7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.38, + "z": 1.5 + }, + "H8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.38, + "z": 1.5 + }, + "H9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.38, + "z": 1.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b6efdcae1de4652876acdceb946f6692", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A1", + "style": "COLUMN" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5bc9abd9f14d07e28f9cecca475da8a3", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A12" + }, + "result": { + "position": { + "x": 277.38, + "y": 288.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a4f444f152515360572079abf7863e95", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "502a9d204218937bcf43d1e7b5475293", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a60f35d02f683a4e2472c915344791c4", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A11" + }, + "result": { + "position": { + "x": 268.38, + "y": 288.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cc8abf10cd822f1d06db718ec939adf2", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d14725befda2dd788a93b7a995d6dacc", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "91b745adb911d1f673c03955516fd87d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A10" + }, + "result": { + "position": { + "x": 259.38, + "y": 288.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "40ded0ae6a5486523468e4bd6a91ded3", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dd4fbe929710a88be37d111653ca573b", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "91d94a0dcabc958f668fb083e4fd7c6e", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A1", + "style": "COLUMN" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9ca947f79f13e6e7a9fbec11d114373a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A12" + }, + "result": { + "position": { + "x": 277.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "692930ab666db5afd67c1ec3af4d94fc", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "784a63247d6f46dc9ad7d660d93b8a01", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "75edff5509a595e978075cb8dab532b6", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A11" + }, + "result": { + "position": { + "x": 268.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c3b8dfc4cfc1a5df0bdd42f092fb5f76", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c38d2097124174a70b6b54eea4bfa2a5", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "40336a475e1102b09006284cd9d62668", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A10" + }, + "result": { + "position": { + "x": 259.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b8dc8bb60876663445da4ec4088f7c0d", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a8c2320724f48c318fcd9f1f8a886de3", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "714e1a2765cc1935fca513103751606a", + "notes": [], + "params": { + "labwareId": "UUID", + "newLocation": { + "slotName": "A3" + }, + "strategy": "usingGripper" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "22d0afb4175f4ed79ef197eadeed41ca", + "notes": [], + "params": { + "labwareId": "UUID", + "newLocation": { + "slotName": "C3" + }, + "strategy": "usingGripper" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2297d27cdbccb5c764c02f18b5292151", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A1", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "54e9d9197241ef086a4b6e48f8927361", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H9" + }, + "result": { + "position": { + "x": 414.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4b88a02e961691f8ebff189ddc039573", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3e434153309994faaf71006688cfc4b8", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "932cf057ad044c18b1039faf8635dbf8", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G9" + }, + "result": { + "position": { + "x": 414.38, + "y": 341.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "07ffaf02f6ec33f425106087ddc304d2", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c98d0505c74c6de696661cde5211dd7c", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "731e217391cad22580d4df5b4a02b0c7", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F9" + }, + "result": { + "position": { + "x": 414.38, + "y": 350.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cd172dbe1f919ab09c3a587b49072b7c", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ea31f8a9982f9280b21106ad37dc5a8f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "69685add4ae50a9f9c78d4ceb5f993a1", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E9" + }, + "result": { + "position": { + "x": 414.38, + "y": 359.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "debd684a32918e206fe26ac6f437aae5", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a988c6623f277e374ba0f163497fb4b4", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f93396445090258205cc446a89272c8d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D9" + }, + "result": { + "position": { + "x": 414.38, + "y": 368.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "048ff299b38ccdaba087f315468cd73f", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "135a6f5e359e285d0b1391f68e60fe09", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f6b6b831cb57b0fbcc238aeb3e457960", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C9" + }, + "result": { + "position": { + "x": 414.38, + "y": 377.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ec08811892c83571923e73cac5e80c3d", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "52fbfeb9de7a4b6b6a50e4efc7213e89", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8b43cdd4022399ec6fd853add66a8735", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B9" + }, + "result": { + "position": { + "x": 414.38, + "y": 386.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "46915ea4baa9076288f180ece20f4283", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ec8e8fc2edddb95c2ff7fd6cecc91233", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d8c73ce30e25cd05c24fdd7ae4ebc60c", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A9" + }, + "result": { + "position": { + "x": 414.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5c41321b175b4557c44ebd44970fedf2", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "655ad4f48ee770487a4723def4e579d2", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1f716948e6c5d7b0a8deb1bd9c595862", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H8" + }, + "result": { + "position": { + "x": 405.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4321b6f6dcb03761cbdad4c0adfd1571", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "05ffe6f06eae3a0dd6940496c38c9617", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "21b83917c3f887b120a79c5c321de5ac", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G8" + }, + "result": { + "position": { + "x": 405.38, + "y": 341.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8fdb540e97465443b10d50176382ca04", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1b6b917582f9b135fb419a740b14aed3", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1679db6b9a444fe0fb55cb0eaa615e49", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F8" + }, + "result": { + "position": { + "x": 405.38, + "y": 350.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6d415f1240152c022b2550e4cef4c4de", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ea8b799af31510bed37f7adb3f789935", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "02f9a0dac1c9f39c9d96ec42c17c39c6", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E8" + }, + "result": { + "position": { + "x": 405.38, + "y": 359.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fea08f05b4d8ad8c37a6d9e574df4c8a", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2f700bb0ba56c7c6ccb9b1154ce9501c", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5f427af3404c8b7ae4f49187d3492c6d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D8" + }, + "result": { + "position": { + "x": 405.38, + "y": 368.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "80955bbae54de714887e70c81c736b9c", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ca88268ddd6ccdb514b0837f9868dc46", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9f28758630d49a4e113a85ca517e48d6", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C8" + }, + "result": { + "position": { + "x": 405.38, + "y": 377.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "637e5599fd395282f0fffc80a0bfb45b", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e4019a9180787c9b998ba12594bbcb74", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "64443a6d5d239210874b4ac77c844f5f", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B8" + }, + "result": { + "position": { + "x": 405.38, + "y": 386.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "70fdf379a1bf76674e185db549b0d510", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a51dc03d193c172bfe95c785ee41d4d4", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0dd3b3bb991dc43cde2f6b820ca83479", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A8" + }, + "result": { + "position": { + "x": 405.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f2a16c707278f7568971c5e9177e0a6a", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "90468394954561b552ca1f47e1fb4d2a", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cf70be9645a01bbe03ea99af916dff4a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H7" + }, + "result": { + "position": { + "x": 396.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b10114bf44059f800af792ff5144f80a", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "103c4ffc5a8fe951d30de0baa4f2fb64", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a39308bd7ae558eee5cd9ca849ea2681", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G7" + }, + "result": { + "position": { + "x": 396.38, + "y": 341.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8058b8f5f268e2ccdb018d159745c2ac", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "71fb6613a355791cbbb2773eea81a980", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9e3e0061571b92c7b48560cb9a30c6e6", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F7" + }, + "result": { + "position": { + "x": 396.38, + "y": 350.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c55272acb65e4f2214c2d868bb52641b", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a8cc34ee79320f265db60371d52a24c1", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c7f34eb1492e60cf56a8313dc3bac656", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E7" + }, + "result": { + "position": { + "x": 396.38, + "y": 359.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b336b9b0c3bbed2b80f5868bf6cbda0e", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4bd5666c35bbf102c5db48597462297a", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "41d4f91976463b7ab5c71bded0b2aa87", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D7" + }, + "result": { + "position": { + "x": 396.38, + "y": 368.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bcec596ce9c46300d46c8508419d681b", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ed9ef033a042335305ef2a3c8f9a3a1f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f67dfd76f99da0133251783c24d64bff", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C7" + }, + "result": { + "position": { + "x": 396.38, + "y": 377.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dd44faac7d16d6385a1ded842a91b31a", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2935fe8d8666add784998fb1a61702d7", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0486f7d05d5e8b9cd0b290cd5f3da409", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B7" + }, + "result": { + "position": { + "x": 396.38, + "y": 386.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a7329c37bf7cb732dceb839898d775dd", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f17434ff7c94786b699b40f237420302", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c413754090a2b5820becf7a84841912e", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 396.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9f2a0e3e101161c96ebb312be4c25717", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b30444d7d2682f94be6822d89f800cd3", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "65bb51277863d6e209c415c40dd061eb", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H6" + }, + "result": { + "position": { + "x": 387.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a403552e46f0a141577cb88738a8d2d8", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f86aeaa05438e2394dd7c3218456ddc6", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0670d817c658a4724d4177ba6df01b96", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G6" + }, + "result": { + "position": { + "x": 387.38, + "y": 341.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c62a9e1d13cb991c23e57a5b520b8f7e", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3856ed457394dcfb7697ab3ac5e0e47c", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e261dd3c58a6c8531aca1c09898a5529", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F6" + }, + "result": { + "position": { + "x": 387.38, + "y": 350.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0967876f96d6d05787351d511f1e3664", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2ce1f70488e339bd395a227bd88307d4", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "29207b4620ee28a2e56041936db48a53", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E6" + }, + "result": { + "position": { + "x": 387.38, + "y": 359.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c5268cb02ac85326aa386c8fd97ef0fa", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9f0ae1ac6998842c5689166586fceeb7", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "212b1845afbbd3bc73802cc24f3db754", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D6" + }, + "result": { + "position": { + "x": 387.38, + "y": 368.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8d0702bc30bc9958fe988d4a6e3d66f8", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e015d1976bd3633d5d3c2f8335552e3a", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0146a6dafae43740586edd70504b0995", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C6" + }, + "result": { + "position": { + "x": 387.38, + "y": 377.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50d857587fd67821672ba2509e89f6f1", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5150dbec5cda034ca738568bcac66816", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dd3803b071c0f0918da50e4bdfbb9b4c", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B6" + }, + "result": { + "position": { + "x": 387.38, + "y": 386.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a4031b1343cb0397b32c658e631b2859", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b159d8622264704ebcaa38b6410474c0", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e9aba6d831dc1570b5b2f3e9f7b11784", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 387.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "75e3483b3ce72c5d954dcbe3c3f1f7eb", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b8fea1a8c84441eee58172decb633947", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "02a3562695ec7b8977d2588f2e1f709e", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H5" + }, + "result": { + "position": { + "x": 378.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b1f82f5af4d2dda52bac5695608e9e75", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "899d2be6b32460492421eefd96bc158e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6b53b643004c65114d607e7ace7ef089", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G5" + }, + "result": { + "position": { + "x": 378.38, + "y": 341.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ab9d983841f2df4a74bd4a36aa5a868d", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "acb70a2259f9ae99d481042913f8208e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "04691d958f66f1c3745b753a2bd1dd2d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F5" + }, + "result": { + "position": { + "x": 378.38, + "y": 350.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "54a31a0461bd75adeab3fc30aea547ea", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "996c6aba327206752b57d90403d26e96", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5781695f9827a7ad22230f5a1a68483a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E5" + }, + "result": { + "position": { + "x": 378.38, + "y": 359.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "83e40205fc9e522f4d4d127d1a76f7d6", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2dd454233d3db5c8602dab04b04b7a0c", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "89d66ffe8fa00ccbf2060c53e711a7c9", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D5" + }, + "result": { + "position": { + "x": 378.38, + "y": 368.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0d758bd2da0c911bc1ec65cc9d4f0227", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ec75015cc3b75fed5acdcf592eb79467", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f930eb611ce56feec900208ce4b927d0", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C5" + }, + "result": { + "position": { + "x": 378.38, + "y": 377.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f4a4983b1803d340ea4d509155507e71", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9528842017410222266a091086b1eee3", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5e939aa95aca7d57f603f25c230c9825", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B5" + }, + "result": { + "position": { + "x": 378.38, + "y": 386.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ff32175d2554f457203a865ba2d65f58", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e63e7caedd108aaad225d530fd1bcde3", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7dcb389cd91f670f446233f7206713a3", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A5" + }, + "result": { + "position": { + "x": 378.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1597c02abecbcd1bcc02cf11adc23746", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "48992b109939025fd4f4e4ad27e66db2", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ff62f78826955ea38b9e9a4d84c3b5ac", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H4" + }, + "result": { + "position": { + "x": 369.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "172f72f1bf86d3f2df64061bfa436917", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cfc01f516890d08249e8d9a84fdeb080", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "57c74e8d128f95d31efc056bf218a507", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G4" + }, + "result": { + "position": { + "x": 369.38, + "y": 341.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "69f875d719841f347b6260a707c807f1", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e840e303eab1902848c4722031650506", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6a4763419b122bd2484a9a2d3a230b6a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F4" + }, + "result": { + "position": { + "x": 369.38, + "y": 350.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "77c89e063598014e3c07f47c03aae352", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9504dd36bd2cc6417e2bdd4e30870441", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8f652ed82e2856c15cd0714df3b0e837", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E4" + }, + "result": { + "position": { + "x": 369.38, + "y": 359.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4a2170fb933646cb62ef442c91f5c0f1", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "26a27bdbc94b940e9d4db504aa9953b2", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b33d2a68668d20256f0c2f85c6be32e4", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D4" + }, + "result": { + "position": { + "x": 369.38, + "y": 368.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4754f6db1a9e2eae6f37e78d5a154d8c", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "640fef2d2f88b4eee21f34201fffce39", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3b470c474177d94c7bad23c62bcea81a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C4" + }, + "result": { + "position": { + "x": 369.38, + "y": 377.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73a6fb8ab15b70264be77c0f900377db", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73f5d8ca41803cf21a4ae96c0c155864", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5894159875a85d431945e63c214f72e8", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B4" + }, + "result": { + "position": { + "x": 369.38, + "y": 386.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0cd1dcad2b16164d9f7e3bfdbf07bc02", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bc3d3b50f617fe1ac48a1fdeab47f2d3", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f0c3d2a0efbee739b1fd1b17c71ccdb4", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A4" + }, + "result": { + "position": { + "x": 369.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b036b8b53c734da7292f23104ed86697", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2dc25da724e5dfbb84803323d3fd2d17", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "35d46e5cce6ba950e38259b09ddcd06e", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H3" + }, + "result": { + "position": { + "x": 360.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4c3cd74c0c570ee5247e47d873d248e4", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dd119db5687443db2a6d387054d4af50", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "eac306c0a48389a481ff6dc0eecbdb4a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G3" + }, + "result": { + "position": { + "x": 360.38, + "y": 341.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a8b894b69f5fee6b117ae030d310693f", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2bf113e6ca043ed1b9acb66bb92bf556", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6f277ce22ccd8b53397a18da730524e6", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F3" + }, + "result": { + "position": { + "x": 360.38, + "y": 350.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "865b8ab47b0e9be74f5e93fba6280dcb", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ab8384ef86b8a15ae1e0c33e5f077024", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0be59ad6be0f40eb5574aa28990fe6c0", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E3" + }, + "result": { + "position": { + "x": 360.38, + "y": 359.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "af80df10e86848bda315d49ec6018991", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "02a55c07d7d4c90fc33cf01785879bdc", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f3733e30ae59f2435b8ed706a96116d5", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D3" + }, + "result": { + "position": { + "x": 360.38, + "y": 368.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cd9422115b6d027a5de83f788ad62d81", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "56a74429c7b8ff69c6d8c9e4958134de", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2ce3addd57a8fcf4f4b86f86da7e5ef6", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C3" + }, + "result": { + "position": { + "x": 360.38, + "y": 377.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4f6c54f71687d9d686e435447e1310fc", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0774996f7d026d69fac4c2ad530a8cec", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d3455961f93fbda95ba1ec8726c460a9", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B3" + }, + "result": { + "position": { + "x": 360.38, + "y": 386.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7e17d1ce94564ba05c40335eefa4c83b", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "86a7680162019acbc7cc537ad3dfa12d", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d1acab75e2b9c0f369833513185487b6", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 360.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a33c6db563ee1b1e54dc909f85ebef13", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6fa9584686660e52a37c474ffb54e882", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ec76652e2ee6bc9909b915ad40e35412", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H2" + }, + "result": { + "position": { + "x": 351.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e06988620f6a8846f5134e079b9fa24c", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6fc9dc6ad4421e92bce2c7b49d47f8d9", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7abe0dfb79191439797bf23da3eb9284", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G2" + }, + "result": { + "position": { + "x": 351.38, + "y": 341.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "580fc2882a125768c0775b6c82029ccc", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d6219ae9af04c69c685fe430b2910910", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1f0dc78454b12ffab5b254a9d7c74bf6", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F2" + }, + "result": { + "position": { + "x": 351.38, + "y": 350.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7f7c4235712fd6d84f39d86f435f5c7f", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b74801b3060c6b24b4a89e9c4d7856fc", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "634d707d4ff99412ce47d411d010e29a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E2" + }, + "result": { + "position": { + "x": 351.38, + "y": 359.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "64dda0d53089ab7d5ecac55928dc8b37", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c955dfed4a808f2580de3248fee6794c", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ae9197920e709cf0ec2bfedd29924357", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D2" + }, + "result": { + "position": { + "x": 351.38, + "y": 368.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c1623a292ff5f30fda1ccb3c656f45ab", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e85ce349c25fd477670f128b02194605", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ff2266e5abcf32882191e5ea0cb51b61", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C2" + }, + "result": { + "position": { + "x": 351.38, + "y": 377.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4a1afbd1518758bb3feb24e692a670d8", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b5920a799c5523edfc722d4d9932c8da", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0c94ac66df5e01097559557f4cf0f7f6", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B2" + }, + "result": { + "position": { + "x": 351.38, + "y": 386.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "24658bc8b74b3dc607864ded58da3247", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "54cccfa43cca6caeb66eee2ffccab9ae", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4d17c39dd29ddbd2b65bcc70e71a8a95", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A2" + }, + "result": { + "position": { + "x": 351.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bc4595c5b3ff90e8de204aac92b5a4ef", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "60f5c44d93cbe59a5af14cd603b22e9a", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6861d19493e4bfb3ebaadd3f6f49cf66", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H1" + }, + "result": { + "position": { + "x": 342.38, + "y": 332.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dffea8ca35c31930985989ce59d7f0bf", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1e0c4e7eb3bab5b4851e6715ec472967", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3520d1b665841acc620fe8646c7ff258", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 342.38, + "y": 341.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9ce42f22b6f407824d0ee6d425792863", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "78d179cf2e830e3f465103a68fd4a2af", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f27b4979c2e141855355a1cb8ee9f500", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F1" + }, + "result": { + "position": { + "x": 342.38, + "y": 350.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ff7b9de2e4dfd98750ac26288bf4df7f", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c1c61d5c5d9caaf4e5710fe523f8ca69", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "14af71723bc10434cff4fb170a79fa69", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E1" + }, + "result": { + "position": { + "x": 342.38, + "y": 359.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3a76842ad36bc38e887f0898c5d26530", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "16d40ef0935ffdf7c69e620cf08179dd", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "509c39aef8d5f103da774ef5ce81f0fb", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 342.38, + "y": 368.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d871b8d32a51b5f4d677ec05a64b7960", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b0789c110d346969d20c2c16a80f68b7", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0fd2751960af1ebc42ef585d9f9c1f69", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C1" + }, + "result": { + "position": { + "x": 342.38, + "y": 377.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fa497367f5924dc829aa5b94305bc8a3", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b07406d1494f5b71455327c4c195cddc", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e70be18f0d51e2263443c0ba9bf4f00d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B1" + }, + "result": { + "position": { + "x": 342.38, + "y": 386.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd97b6f4079d89a07965116e97bc2076", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f12fbedd8f6eb04d516d552c01c67de2", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f231ce1e3d7447dab9fc3d5fed6e852d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 342.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "959ff2ab7b19c2dbd54442090a7956c2", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "02fc30dc5cfa9efc1c567cac62f02b60", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6c98a1d6e7967d7bcae5f8d2260e5249", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H9" + }, + "result": { + "position": { + "x": 414.38, + "y": 118.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "09f645ff68e674325097b2ad2d864f1e", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "82c91cc026c6401f16859a25f0c900ae", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cc0e5358e19fd4286df339e45a1ec337", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G9" + }, + "result": { + "position": { + "x": 414.38, + "y": 127.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f254122eaf7ddec05a7fe64bac48d611", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "25f1c6ba4633dd38b7e27150634c6aa1", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "335f332a1d584af9d7ff63d84bd72004", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F9" + }, + "result": { + "position": { + "x": 414.38, + "y": 136.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "00a4634463725ec22a3d35f0aeabe422", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "11dba9d6074db2db7d2581e0752921d4", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9a5bbbb50eba769906b7e277b3fdf904", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E9" + }, + "result": { + "position": { + "x": 414.38, + "y": 145.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "19d21b6938613bb755a97aa19f1b2b4f", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6c5bb501b3c8254d8e880dc623f73c95", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8ce33e1c1cedb7c888709e90924a7f31", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D9" + }, + "result": { + "position": { + "x": 414.38, + "y": 154.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "18e87404610ed62327f42539da78f49d", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e8cc48bdd26a20c396aaf0ce08876269", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d17054cb1f763b256518e46cc3e5f55a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C9" + }, + "result": { + "position": { + "x": 414.38, + "y": 163.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ed0ffece76923615a45db3a90dcc3ef3", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ade8173fa8cba9bdbb65309c7b8ee76a", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "23e86986f74ae06eb3b168ca48e520ee", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B9" + }, + "result": { + "position": { + "x": 414.38, + "y": 172.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "06850f83b85809f1117db1a4bc9a9265", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e2fe836ce6d699289e082f776992c4a2", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5ec029bdbe2f68323f72b02fd1dfbc25", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A9" + }, + "result": { + "position": { + "x": 414.38, + "y": 181.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b0b5dd0b54a48a22e3a330dcfa045767", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f564503077efd83b676efa4365380f00", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d71d29324d9c98753f3cc1ff34a30e73", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H8" + }, + "result": { + "position": { + "x": 405.38, + "y": 118.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "676857dd62a900b58d90eaac4088fe00", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "570c61ca4949a6345db1538d056922de", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7d297ac4bc4022dedbd71462a3099a4c", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G8" + }, + "result": { + "position": { + "x": 405.38, + "y": 127.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "355908b7bb9756d5cb8917d3fd40c784", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2a4f9909eacf82fb6dc11588462e4bba", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cdfb04be600138f33591fef5a90a9879", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F8" + }, + "result": { + "position": { + "x": 405.38, + "y": 136.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "96f46034dbc7d5b7e42c3c74b180d28a", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9097e77871fc8af0069ce2a04c4fb277", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5fad1eef655f99e9a248238b93f31242", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E8" + }, + "result": { + "position": { + "x": 405.38, + "y": 145.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "efc053f2dd11d1330c834a0fbd2ce22f", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c5deff98ff717b98eacd4a400945e384", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3468fd9a9f43203d993a3e4a347df37e", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D8" + }, + "result": { + "position": { + "x": 405.38, + "y": 154.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "77bed7e561fbbe5b5f08ba8efa9556fb", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5e69a708143e0af947f27ac6027a8ae7", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dca5e5dd4e5521f9df8e769010689406", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C8" + }, + "result": { + "position": { + "x": 405.38, + "y": 163.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cd4902f9fc36021dc6ca882500604a8e", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e40afb8bb621a9cc225f274b18c0ba78", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "498cbf85c9df2fc506ddfaff3d8cfd09", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B8" + }, + "result": { + "position": { + "x": 405.38, + "y": 172.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cfd88885fbb8a31ecc8196de335c205c", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9c7e52c4c9f9014b2f56a469d5de24fe", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4dc92a08039495e9266ecd64e314df36", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A8" + }, + "result": { + "position": { + "x": 405.38, + "y": 181.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fb89bed3c3ce1bbf474a7c8abcf982fe", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f73786d5b387e335b929fae1fe28e96a", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1d1598fbc751d810123abc88a626d521", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H7" + }, + "result": { + "position": { + "x": 396.38, + "y": 118.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1fda8961d1288fcb2af36d1c08ef29ea", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5eb4bbcddbd15fea8d651268ea1b687f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4fcebbe6cac7d3610c182b975f8f2f9e", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G7" + }, + "result": { + "position": { + "x": 396.38, + "y": 127.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6a69a5d00a72ddd6eb9c05327860b634", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ca37a3b2be20b02f6d073bd25db150cc", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0cad081378fdbf0030288b61286945e8", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F7" + }, + "result": { + "position": { + "x": 396.38, + "y": 136.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9ea1e8d86fffe904b209b95fd0458ab9", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a736ce0b42b3c6cab1515e0212d53e14", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c907e81c6947ae84998c6787509db6e2", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E7" + }, + "result": { + "position": { + "x": 396.38, + "y": 145.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "39554fcfa898892afecf01d7528e7c8d", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a7f160155658d99cf1f13a563fa4b14c", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a931888071e277021bbecc9acdbd06f1", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D7" + }, + "result": { + "position": { + "x": 396.38, + "y": 154.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ba0498b9386d5bd2da4e758b902fa7dc", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ab0d9bdeb50618244237b25e09f82c8c", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "aeeda1fc0978ee6772726b61834d421e", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C7" + }, + "result": { + "position": { + "x": 396.38, + "y": 163.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ac38d5bdf7db82af4921a1e7580cc2b3", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5325dcc7cffb14762b94a60971a7f9d6", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3c23824a3b357e22afc486539ecfa207", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B7" + }, + "result": { + "position": { + "x": 396.38, + "y": 172.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f7e2c7be5182d6d125ff2dfe25348fb3", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7ccb2b30c968dc3888d54fe1c0d3c563", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7020c43bfc297519cdac6e558de1e09c", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 396.38, + "y": 181.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "29cfd4288362bd3888b5962700aedd2f", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "905ba1dcb9676c4eff70ec6a196695cc", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "02d3dfe0ffb695947501a9fcabd53237", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H6" + }, + "result": { + "position": { + "x": 387.38, + "y": 118.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "746c3fd8903bff3e9797faed017b1652", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "643f0e2a01164c97b8de8d691db0b220", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9a09ba2aee2b02de3dee38d84db717e0", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G6" + }, + "result": { + "position": { + "x": 387.38, + "y": 127.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a8fa70b1eee43676ad5b1f19c41c7903", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0e0a2be6c326ba4465842f7b0832c553", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6b23786edb28411966a15d6ee9f22e1d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F6" + }, + "result": { + "position": { + "x": 387.38, + "y": 136.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "abb0e930a2f9ea8c3923c8b5826d6cca", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "407274aac420d5a3e892f23ca0ffeb3f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bed2002c80ddc9bdebbf7f55fdb44c19", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E6" + }, + "result": { + "position": { + "x": 387.38, + "y": 145.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c5ca27488bbea76317f52784a988cc0b", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2fc5d940edb053ac41dcb8f50c4005b7", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3a3ba1da97ca9f7c39ebda6fb18d8ca2", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D6" + }, + "result": { + "position": { + "x": 387.38, + "y": 154.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "30a4243456444fd6c30f452a80598d72", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ff3e4811195f72124c5ccd0fd0dd3587", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2adb73ae3dd4cb397c9f98f153997084", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C6" + }, + "result": { + "position": { + "x": 387.38, + "y": 163.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "821caf8c3d04a6cdd47ae576cc89f614", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "de0f1d37ac9fb26ec6b68b5354a96673", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "68efdce02f71577c7a8300a5d63574bb", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B6" + }, + "result": { + "position": { + "x": 387.38, + "y": 172.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4b6698b689540d85a3aa7eda4ffac3cd", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f6c16d560748f925da4f8dbabf94d690", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "78b604f7fb1306c758ef08983f1f8e0a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 387.38, + "y": 181.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cf852a713466efe9621ba1e48f86a70c", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8050d68611b2c6e21cc22b10ca8fe9d9", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5c3d85979ee1762c38329edf3006753c", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H5" + }, + "result": { + "position": { + "x": 378.38, + "y": 118.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "beeb1384a066084e7f8d0afc2c5d5809", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "168ae8caa1b39815ddbe2d059f9b06ea", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b4635132ab044bda6c9370637a366049", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G5" + }, + "result": { + "position": { + "x": 378.38, + "y": 127.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "79886be6c3f2bac1fe3813e05d83e053", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fd94fbd3b14b1a7da747addd7cca01ac", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5b25917bae9f3a6a771876ceb4188096", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F5" + }, + "result": { + "position": { + "x": 378.38, + "y": 136.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8ffdfc416e246392de03dbb83f7a1b61", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a87ed74a14ae673f98aba760c3153c1e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9a45915902b015f83b6428af0afa5619", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E5" + }, + "result": { + "position": { + "x": 378.38, + "y": 145.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a07cf43bac38971a798482b663908d73", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d33893f4e532a71cd247ab513cd6cfff", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1031facd8fc260a451d5fd6af068b4c9", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D5" + }, + "result": { + "position": { + "x": 378.38, + "y": 154.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "75ee7c815ab39ca12fdbfa9c66422397", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "442a54f51a4faae797053baa6bebb9bc", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "34609dcfb227977ed156d05cfc521a7c", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C5" + }, + "result": { + "position": { + "x": 378.38, + "y": 163.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d6b8ec19c0714ba00490210c44dc3a82", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e328e5ed8db7a5704594902a23041e27", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0fffff47107ea2229ecba02b2aa1ec7c", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B5" + }, + "result": { + "position": { + "x": 378.38, + "y": 172.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0b614755e624cc6f354921a166742eb2", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "69201ca1502c01012de33829a93aa047", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "41bd0a0167d4e4b607ac2966b231adb1", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A5" + }, + "result": { + "position": { + "x": 378.38, + "y": 181.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7762bf3be43234e5a7762ab79fb14c73", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "97c680d0ea7f63df30127ae0e85c3ab1", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5c4e6c353fc06b57750906c985e25b19", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H4" + }, + "result": { + "position": { + "x": 369.38, + "y": 118.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7941f12b0343df2846267e00883ade64", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "47d7474b790a61303755ab709a8008c8", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7fcf036df36c202a2cc66bedca4f471d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G4" + }, + "result": { + "position": { + "x": 369.38, + "y": 127.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "77ced35ad47fdfbddbcb81f1ad688144", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "431f8559c4c166db86bda7676415d326", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "06ca64ddc6ba06f4c2efd7a87c4b5b58", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F4" + }, + "result": { + "position": { + "x": 369.38, + "y": 136.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2bb6862202b11778a3a3c19cd3c5d986", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "541dc0ea7260fdec2fe62e3cf38fd57d", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a8cc1e16e7885c4e17c38561c59605db", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E4" + }, + "result": { + "position": { + "x": 369.38, + "y": 145.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "35af7032e0a7b89a7de257d7015761da", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c7e207def8167c19ae97a7fadbe980cd", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c5e2db95d6927dba5c4e03b8e609b256", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D4" + }, + "result": { + "position": { + "x": 369.38, + "y": 154.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4024c7b641cfcc06e8fa13ee8cac38e5", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1cd753b3389001ed2ac45780af12afb6", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0e0bb90eed5ed73b08c14ea449cfa01a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C4" + }, + "result": { + "position": { + "x": 369.38, + "y": 163.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4ca453b5eececc4220fcdd908d3b6ed2", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "23ff017728314cb963031f0864094a4f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3c161c9f1b7dbc07b512e77cd8e7cb6d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B4" + }, + "result": { + "position": { + "x": 369.38, + "y": 172.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "98c54b166a3cbb09c07ceb5b76fa25ab", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "20ee90f7bb3742af2f9c3647b7592018", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "74a16b23ff85426b52d0082824b5d082", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A4" + }, + "result": { + "position": { + "x": 369.38, + "y": 181.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d30221c34a97db4ba75ea750fac1d6ce", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4dd6f55723192a4f488d9d129ba9d1ef", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b7c8de9979cdd07b62322dfeea53f5ff", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H3" + }, + "result": { + "position": { + "x": 360.38, + "y": 118.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dc8fce620b0725de3c81d12b66527479", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "501ccdac51728a548574a96a69e0a452", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2571ecf58421e8ab8679b4844e83b09e", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G3" + }, + "result": { + "position": { + "x": 360.38, + "y": 127.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "480558d29646e919e32bdb7ff39de631", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e1d52bfc78a375249d68b19fbb58052e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fcdb3e8c2fb5918abeb9d34bb45e2b0b", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F3" + }, + "result": { + "position": { + "x": 360.38, + "y": 136.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c37e1795e6b97f076e7dcc8c28b934d7", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f270a51b193fbd3094472bde165506d7", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "da91ae5f6ba893c3dca9cfea73aaabe8", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E3" + }, + "result": { + "position": { + "x": 360.38, + "y": 145.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7c00d73797be284f9f8f77b1d17b5c7b", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2299498f450189cddaed485bd520bd5b", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c7818c4bf1d2975e4520f78667d5543b", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D3" + }, + "result": { + "position": { + "x": 360.38, + "y": 154.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d9a30429521cdcaabb333d7d19c81523", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f3db8596b9884e076afb47df0d8372f4", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "992c0d65ff87798d0559162a850b7b57", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C3" + }, + "result": { + "position": { + "x": 360.38, + "y": 163.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f4d999f1d5b1107c5397e62ab2d9a2a5", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c956748a71423728e0a80c96128c438e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "eb0e9b252b08f64e9f0a170d0a24b64c", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B3" + }, + "result": { + "position": { + "x": 360.38, + "y": 172.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cf7454d0ae428e7d3a02d9c92c518a95", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fcf76cb038b095383da71da5ba06cc42", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3fcf43e70dca72ffc4afee3833c9c825", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 360.38, + "y": 181.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ac2cb8c4935751b730210a6e349fcfd1", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "32ceb873d6e7fe9de361f5bb48bc8c2d", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5c7f3561d1a45d6a7b5fdf674aff45fd", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H2" + }, + "result": { + "position": { + "x": 351.38, + "y": 118.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "335471ecf828accc5727a98d5169c6ee", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e089f97ef2d56227a5d7887251bdc120", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "93fbd4a5057c4634623eb3018079a624", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G2" + }, + "result": { + "position": { + "x": 351.38, + "y": 127.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7449e33c0b18277dbc269606e7367759", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c8385b24d207acaf78090194a655a056", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4bbb4c1c05362d8689a289e3477051da", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F2" + }, + "result": { + "position": { + "x": 351.38, + "y": 136.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2492c47db2a6817bc245a65410a9a8d1", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1eed7575c2a1e6dcf69c20b74c9148ae", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ff765e97d0974910356d10c9ac5488d5", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E2" + }, + "result": { + "position": { + "x": 351.38, + "y": 145.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d6b39e7882b8df4f1d445bf674c9b8a2", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "64918e6d5def3b22221fa73854699656", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "54c9783a656fd4d05710c40840b9c5ca", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D2" + }, + "result": { + "position": { + "x": 351.38, + "y": 154.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e69e5f4e1c16b0f0e937676d4b932721", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ce2863e400b84005e1cca56457ee0cb4", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3ec31b33c3cafc005249bc76ce26bdda", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C2" + }, + "result": { + "position": { + "x": 351.38, + "y": 163.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5730a79a988f6fd961e5bfabf8f0c92c", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "16ced8823344c2b63a1e68b5dfe2c48d", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0ae8f2bc5ef69eb82fbb1750e701b635", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B2" + }, + "result": { + "position": { + "x": 351.38, + "y": 172.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "042875beaadb18b2285a6165e56f4ace", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ea705d8ace56b0317fd5bc09d03bd122", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2cf579dc80da3cb27384eee00fece36b", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A2" + }, + "result": { + "position": { + "x": 351.38, + "y": 181.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a2c0b6aa148bcf361735b6165e806bc3", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4ff95a3fbdfc0a320bba052969b274af", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "227a00080a91a214dbe6cb1476accc46", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H1" + }, + "result": { + "position": { + "x": 342.38, + "y": 118.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1db11b28ed2d95edb6ced5e75c5f46c1", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8e3d12985e8d157172b011f4f7b36abd", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "942d7f51006d0ff73587d2e26a0342d2", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 342.38, + "y": 127.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cca0d17eec7ca096e9d536aa0c10aef6", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6f705bd949422c03678166bc9cafe80d", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b5bcf6d36bc9a7353ecf84ec1d48c85e", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F1" + }, + "result": { + "position": { + "x": 342.38, + "y": 136.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4b359b8f590bd2108b05d40da842d8c3", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fdd4f84ff4f642246bb1d7293d1a13cc", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3ec3e5c6ed45b3dee4ccb38c87a0541c", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E1" + }, + "result": { + "position": { + "x": 342.38, + "y": 145.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a82cf1f31b6359b412edd7eb77a71b4b", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3d5d8a1eb5c131921e23a036902aefec", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6d0ae84e38bd36e47c45d9aebb42bd34", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 342.38, + "y": 154.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6fd82760cc5f4cff74563783528f4f2e", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f6e666aec71fb42d9118c667b483251b", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "04f88f175c52ad9eb320213b75b81bef", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C1" + }, + "result": { + "position": { + "x": 342.38, + "y": 163.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "848629a3f7dfabe679fd6f832eda5068", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c737fe96a53e27f05f1100d64c94a335", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "53dbaabe4be5b7035ca8374df15d05ae", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B1" + }, + "result": { + "position": { + "x": 342.38, + "y": 172.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ef5b3084ef0634a762ba2ea4e33c3137", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f9a4c9d29ea44028738524fe410fed6e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "834dce2ee0bdac67367dcb4d0fb3f469", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 342.38, + "y": 181.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b154d08b53d6d408d88b2938efcfe0f2", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cbe28ae92197c8ce79c6176e9fa2ddd1", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c8050e6e014d1528b910b2fa3412da5b", + "notes": [], + "params": { + "labwareId": "UUID", + "newLocation": { + "slotName": "B1" + }, + "strategy": "usingGripper" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8ef075c0d7b5a0ee837a6d300f3db722", + "notes": [], + "params": { + "labwareId": "UUID", + "newLocation": { + "slotName": "C1" + }, + "strategy": "usingGripper" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f3c242d47b13d58d37ec2ffcc7892a0a", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A1", + "style": "COLUMN" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "126c5c77025f14b164c897a8d3cd1d1b", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A12" + }, + "result": { + "position": { + "x": 277.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1cca8237ff6a261408e967fda5dd5c17", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c62caae2a676440f8881437366351bd7", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "86e27513b187da071e0eec40eb3e6949", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A11" + }, + "result": { + "position": { + "x": 268.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0da3291a80d60c41d99f6e9f47344338", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8016025dba135726e1471f9f770d4b14", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "16b057662b0b7f5b21cbc5c9c5e0e6cc", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A10" + }, + "result": { + "position": { + "x": 259.38, + "y": 395.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cfe8b09978915a4887c5a1917dd8db97", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0a5ecad8ee8c33416b236c65f2f17042", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "64516540fc10a1d9d92f6e6a0b5e84b6", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A1", + "style": "ROW" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f25bb4d2a464c59d45b5b7c3cb34d1f9", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H1" + }, + "result": { + "position": { + "x": 178.38, + "y": 118.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5db97b51f60160f07eba9a2c4a57b823", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "16f961f2a3fb6779f13c0ca43e4b9ade", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "deafd1d60fa9347c6bb4bf05a782bb9a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 178.38, + "y": 127.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d97e5626fdf4c63c8263f09493397843", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "942bef03eae31a15abfa4aa661fc00dd", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "790d2c6fd15c3362e1811b9fefa589b2", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F1" + }, + "result": { + "position": { + "x": 178.38, + "y": 136.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c6eebd19475379255ffec4ff71d4c4a7", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "997b18db28586b495863dc16506c9829", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "94cfd354e3863d250d0d7bce98197ef6", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A1", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f383727d6a330af69f07de0b5a8dee1b", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E12" + }, + "result": { + "position": { + "x": 277.38, + "y": 145.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5475a2cf244c58885c7a56b3e2e1ab9b", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "961f006f1da77317d99cdb3ce659a900", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e9769b09cd53926aaf180d2dbfe9d1a8", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D12" + }, + "result": { + "position": { + "x": 277.38, + "y": 154.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c9b43ec76ba2d126b154d70548eb9bc1", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9e1c3afd65a0b99fc5a501adcb191556", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9096935e37aa64ebd142eb660a5cd1a3", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C12" + }, + "result": { + "position": { + "x": 277.38, + "y": 163.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d84766085181aa64f590562a745e9698", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fa8bd25b76407d54077d838f3c77e0c0", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3838582180587de8e0f594799bc64117", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B12" + }, + "result": { + "position": { + "x": 277.38, + "y": 172.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b896e33c3975a7aa9ffb7e50eec4b562", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8bbfd10e8030b6b2f56abb6d940dfb46", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0a35f748316bf8e1f025824f8ee0c4ec", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A12" + }, + "result": { + "position": { + "x": 277.38, + "y": 181.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6d31e4d08999e9ceaf274ac45424fba3", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0ce572910f7fc90c514be2f459638b54", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f1312d64708528eef7dc70a6c8814f54", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E11" + }, + "result": { + "position": { + "x": 268.38, + "y": 145.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6c711a4a29c6f0e015e8b3fbe4718e97", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0b43e237a1bdd96dcafba94bca20abfc", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8e2e0508c0dcf0af56479dab096d4fb9", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D11" + }, + "result": { + "position": { + "x": 268.38, + "y": 154.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f71a38cdfe270907939c7b4625e461d8", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f5f9671b93d74fa165c2add8b8e28be2", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "53268795e8690fa7c8654b313647182b", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C11" + }, + "result": { + "position": { + "x": 268.38, + "y": 163.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50763b5797b117f3c03a25f4932f8c99", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "76834fe3475bbe7789e6bae6d0b5cb2e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "815926809dfc56315e8af360f55fef1f", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B11" + }, + "result": { + "position": { + "x": 268.38, + "y": 172.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "444214c72d37b42b8e261f6a4709cfad", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4cabcacf6a35d37fd181e30d85b4862f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6173532284cc66b313606b9b4c3d55fb", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A11" + }, + "result": { + "position": { + "x": 268.38, + "y": 181.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "08bc6986ad89f72b3c535ee23db466ee", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9a7215b248b42a16b8e9478daa41de05", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "732be9df306f12262c509fa3fe8eab38", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E10" + }, + "result": { + "position": { + "x": 259.38, + "y": 145.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a17c63bf09919c4052a49e8b4c546705", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "672b89c13906557e44672646e3188590", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6c2e926df6c753a6f2fc1c6b0b7fd264", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D10" + }, + "result": { + "position": { + "x": 259.38, + "y": 154.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d30848c94367c3d36a1b6b5c15c3ff0a", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ac6160b1905f4ee03d2ce4b1b721f556", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c758bcfefedc75514cb88bfa2918411e", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C10" + }, + "result": { + "position": { + "x": 259.38, + "y": 163.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "37de9390ca5d10fcacfca813cc53d175", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a4ead647e57132b8394a1595d747fca0", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5e8e85da7a1d51b86d1e2f71fe41072e", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B10" + }, + "result": { + "position": { + "x": 259.38, + "y": 172.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a3a85f5a079baff590de4577a7252148", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "049ac70d696ecf3e9e60c4abdb35ac48", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f0aa9ed85730349b9017176ae5ca978d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A10" + }, + "result": { + "position": { + "x": 259.38, + "y": 181.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ebd2fc46d4570a3b7ad7350adbd5989d", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a573b5dce92a03636747fe0720ba6346", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7ef0dc5f256980a9b9dc112b392dec84", + "notes": [], + "params": { + "labwareId": "UUID", + "newLocation": { + "slotName": "B3" + }, + "strategy": "usingGripper" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b24e78f004c33f92cf559c38cf9fcb2a", + "notes": [], + "params": { + "labwareId": "UUID", + "newLocation": { + "slotName": "D3" + }, + "strategy": "usingGripper" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c9ceff7610d98d598d594df5ff2b30e4", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "A1", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "00ce43a8c222e0ddeaf66fb6b40bb3d6", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H9" + }, + "result": { + "position": { + "x": 414.38, + "y": 225.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7a46535206fd461ecab8d2520a6a6bad", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b01f452bef5c3f65ee4e35d647f73750", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f155fe5e7afb1a437d78a9ea9b02d360", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G9" + }, + "result": { + "position": { + "x": 414.38, + "y": 234.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d0399ddef3389e93d74a4c8680ec4943", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ef8fd436a299183c0185bb4e15ee820c", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2fdf26592751a74a80a6a59ec136c6e5", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F9" + }, + "result": { + "position": { + "x": 414.38, + "y": 243.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f2b06dc43712483cf2fc804214a0e611", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6fef2b96c488323ae34072e12a6fe3f9", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3229040f7ba23c32b2f5419ab4c4f4dc", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E9" + }, + "result": { + "position": { + "x": 414.38, + "y": 252.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d0033300b23c5aa1d98777343fc88508", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3feac66c12532663b3bdd49060100eb2", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4ed9a38f7ca85f069ef0f241ea24dbc2", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D9" + }, + "result": { + "position": { + "x": 414.38, + "y": 261.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "aebffbf093ca75d563aceef14bbadb31", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "139435c9c6c4871a308f374e3d46c4c9", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "142a211304cbcb7365b964f6dd96f736", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C9" + }, + "result": { + "position": { + "x": 414.38, + "y": 270.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b217b94b6fd9e5976f286e1eb560b034", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4c55cd40148d2eee041fe96eda3ed333", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c16e6cd523e8885f7fafbadd7f880142", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B9" + }, + "result": { + "position": { + "x": 414.38, + "y": 279.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "642f9ecc83773d8747fac347bac22c09", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ef3f82dbcf7f197c8e05ac8784b9be90", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "81b82466bfb10831d918e467b31107d6", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A9" + }, + "result": { + "position": { + "x": 414.38, + "y": 288.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9974e84e2ee65e046dc3cdb9e44c76f0", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cbf38f73dfbde406c8edd4189fb1c2cf", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5af923c00401375762e241149d535832", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H8" + }, + "result": { + "position": { + "x": 405.38, + "y": 225.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b64ad8409727b8578df89e24378ecb42", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fb5a3c0150d39f74d7af40de65cf4478", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "830de6e99d25638ea76f426136ecd600", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G8" + }, + "result": { + "position": { + "x": 405.38, + "y": 234.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "35ba19e1e4081d5c4a4287b14c8cf82b", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "49f9a5477a244e22da3027c8c7a01e49", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "069a3d08788512c6b7a66203698afec9", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F8" + }, + "result": { + "position": { + "x": 405.38, + "y": 243.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9d4139fee06db3d5b838db402d18dea7", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "04a4253189340c72eb040539f4f2b421", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8f21a3880ad53a4d35907a148e4c43be", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E8" + }, + "result": { + "position": { + "x": 405.38, + "y": 252.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d50d3447f02f5f46db58c047e01500c3", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7b115af7c19e48bdd5a03d2a9e7368e7", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5b7a71965ff7c0e0aa28ed521a650313", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D8" + }, + "result": { + "position": { + "x": 405.38, + "y": 261.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5913c148c11b473a08f1a23a27b20c4b", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e5a057e248cf6e6879245a5080501af7", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "04114466188a269fb0dd2cd90be72157", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C8" + }, + "result": { + "position": { + "x": 405.38, + "y": 270.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7c1d7d7f5141218181b8bb789053fc98", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e31730d77efbcfe3fe41bb2fa8ba11b6", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "56b0f5c77a1f023c11c341d644467ed9", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B8" + }, + "result": { + "position": { + "x": 405.38, + "y": 279.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "79dfd9f6ab448d3e63315536fa17c0e3", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "83f03b862ab3804d1e10c5cb2754eb74", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c635f48d32a9170dca0b5c3184f2fe70", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A8" + }, + "result": { + "position": { + "x": 405.38, + "y": 288.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "05816eae47c25a492f463fd9c10ee288", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "95c6e883abd5f5bfbdd0659a03bb992f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c5f936d6fffc96a0aebdba9bacdd307", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H7" + }, + "result": { + "position": { + "x": 396.38, + "y": 225.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ef8cb98912f96274a11152ebb6b0333a", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "553eefe8a60bc5f9af0b1e2895462065", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6fa5f840439742e70d716d9b4be03015", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G7" + }, + "result": { + "position": { + "x": 396.38, + "y": 234.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6b70c6287dd345eae40c36a940c55eec", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dcce39d6b4c3c0e9a88d4a5da46e1d7c", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "af29dbfa0ecd9bd263bdeed0e8013f15", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F7" + }, + "result": { + "position": { + "x": 396.38, + "y": 243.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f3793ad5199dc95933c9bf8c35ae5fd3", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e785ac169acb121c581eb5267b625f86", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6642b9e93eb5bd4d6834fc9eab3d66c2", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E7" + }, + "result": { + "position": { + "x": 396.38, + "y": 252.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dec7a9f06954ab80cb8e2389143f1d26", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "978c4ee2182ccd06fe966a74cb245e78", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ba5c1d8216409140c97f26d0d6d9b2d4", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D7" + }, + "result": { + "position": { + "x": 396.38, + "y": 261.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4e68d0b404ac4b8a139ba03bd05695d1", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "58aa6d6b2892e8789baee893bbc6ef9e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ddc42dcdbb3c9f89ee77e58050561b3b", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C7" + }, + "result": { + "position": { + "x": 396.38, + "y": 270.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "582c9faca922ea733608317ea28e85b3", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fed8c44bcbc26ddccaff671fd5277faf", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b1329e0308454bec24a4e657c24d661d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B7" + }, + "result": { + "position": { + "x": 396.38, + "y": 279.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f0c05150b60a0246fcfacf070d162b6b", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0ad2956b1b39a5015bc883fef8c7ae2d", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "edaece6d61f0ddb00cb7abb2c34a2069", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 396.38, + "y": 288.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "41242e7281ff7c0eff57a889064dcae0", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "92c1785e5ea8b2bd3e48f749e5258bd7", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e6e7a014e9b92c6dfc17b585f04e69b1", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H6" + }, + "result": { + "position": { + "x": 387.38, + "y": 225.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "02011cc5d5ba5f57a934d1ab9cbb625b", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "694ad83f5e92b31c7c6ab5396e443dbc", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6fde74ef7b06133c8280671bb36bdd96", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G6" + }, + "result": { + "position": { + "x": 387.38, + "y": 234.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "376a9033bb01f5d412e5374b2947f191", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "035e4972e93daa21ba735a393c1987fd", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c3d78fb7a3c90b94fabab444fd581212", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F6" + }, + "result": { + "position": { + "x": 387.38, + "y": 243.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cb1018930eccadc55f33adc0565e5e9b", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0610fd844d1591974789b1c192fca782", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "24900d56d46581b06813dd6765ef0dd6", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E6" + }, + "result": { + "position": { + "x": 387.38, + "y": 252.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "997f1c3d4dedf9e422d09903f69ca2fe", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "14c872ce2ab5d3ce77d6a0f6a2d611b1", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cdc0382e10fa980379a1c70d22ad3d2a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D6" + }, + "result": { + "position": { + "x": 387.38, + "y": 261.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "47d2490341012acba42f439bb3283d87", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2fa8f90bf851328bb5b5e2fb26e29e82", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f7e33196b53e5b29c518f343182f3b72", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C6" + }, + "result": { + "position": { + "x": 387.38, + "y": 270.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f965d4fde16b31f30fc78873e3bede45", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a777637b41a459d960354bc99355aa92", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "adcc865a8528038cfaaf90919d9b63b2", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B6" + }, + "result": { + "position": { + "x": 387.38, + "y": 279.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "91916df40447271d92c30e3ab0e3a5a2", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0569a1b997368e12c29e9a571ccc21b7", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a2ef4a40b91b1bdee500734e6337ce01", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 387.38, + "y": 288.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "00e64a7813af6f95a1220487f1808271", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "573280f99e175fe129e4506ec42e75a4", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6eb3ec369f9e257340f2a5d46f6b9869", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H5" + }, + "result": { + "position": { + "x": 378.38, + "y": 225.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c8a33bdb02320b4c5d892e8765f6e8f3", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bdd39f9d63fd24386206590e685194b8", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b8819a6e5567ab8b252e8182dcbe7f56", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G5" + }, + "result": { + "position": { + "x": 378.38, + "y": 234.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2982e3a3f6a13b996bde37c8a86e82df", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8f3377848cc73fc26c1ab17a44f8359a", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d6821c7091e4d7b4289ed0fb6c31b8bd", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F5" + }, + "result": { + "position": { + "x": 378.38, + "y": 243.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b7c1d0d9e4505bfadcadeb48db7b1be6", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "227819e5e7519f329450ae4ba462b561", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e31e01856d0cc406c9d6ae898f6deaf1", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E5" + }, + "result": { + "position": { + "x": 378.38, + "y": 252.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "57a2c3ff50ac26cb96a25a4c0d0194aa", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a499d669b51e93b91ff2503310c935ec", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2056f57cad76c9797326e899fa7cfcee", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D5" + }, + "result": { + "position": { + "x": 378.38, + "y": 261.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2dc66cacf68b2e44d1e60eb3bd3c2460", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bff745764482e0ccf7ec20b0e64ce3db", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2271a16d806f6ebcc3d35fc99a00dd2d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C5" + }, + "result": { + "position": { + "x": 378.38, + "y": 270.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5465260cb5796b30c2c1629350fa38d7", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c04ec1d0914b87b712f3f448faf5f567", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ecb42d618687f14e841e2e2d990a1680", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B5" + }, + "result": { + "position": { + "x": 378.38, + "y": 279.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "167f9c0c6f34e09045b0d4d67f1a6ab2", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1ace772a545a37a1a88be9e38436d14f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6f25c1b5ed82e1c543aead95540d458f", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A5" + }, + "result": { + "position": { + "x": 378.38, + "y": 288.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "775e04ff0108b9ed2a0c0244b2fb9eed", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "33a8899f32e989ce00fc88de77fd93b7", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7acb65844cd97625fd17b0ec613e9734", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H4" + }, + "result": { + "position": { + "x": 369.38, + "y": 225.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50fd8b5d3f5557dd862436870c97feec", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c05c3e3222f8fdc9fdbc38e290749c8f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d1605603b1ed6dbe9f3004c8802ddfc4", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G4" + }, + "result": { + "position": { + "x": 369.38, + "y": 234.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5e45fdabb709a97bc846559309ddf7d2", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bbc2dc69dfaa97a3dcc52a08b55a9058", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9e2f0be3c21aa5b4196548373e58bf79", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F4" + }, + "result": { + "position": { + "x": 369.38, + "y": 243.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bf5c633e0c1e805b5d2813f14d59676a", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c68522da954ec9c5c969585ad07264f9", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "46688effff308932f830619fde3632e2", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E4" + }, + "result": { + "position": { + "x": 369.38, + "y": 252.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6b01c75efdaa11ee298158fdf62fd562", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "490008051cc4109b69ebb76988686a02", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fc52340619402cc47bd6971ef58751fc", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D4" + }, + "result": { + "position": { + "x": 369.38, + "y": 261.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e2a323013a1606b88a4f6f757b5a5723", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8f0848d682d879172df0710085f34a5f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6ce25c10a61ce05411943ade30ded765", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C4" + }, + "result": { + "position": { + "x": 369.38, + "y": 270.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8f47648d8ea52c274d8b00d030a48a36", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "93acb9bad023faf025679c8b16ccfb60", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c877974627cb210b1415b070dd82cb3c", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B4" + }, + "result": { + "position": { + "x": 369.38, + "y": 279.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5c321d95cd262414cc574380fdbc34f6", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "57f809caf59565c8b2331ac5b7fae631", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "042fab071ad98bb453515fd6ad4dc1be", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A4" + }, + "result": { + "position": { + "x": 369.38, + "y": 288.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "278bab3264080ce0a4dedadfffb0ed70", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3d9f93fd5956b3d4355a11e113c7bc0f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1b89778e18e1422de4937f4fd9fc8a62", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H3" + }, + "result": { + "position": { + "x": 360.38, + "y": 225.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c512eae80aaef17abce12bdb5836d984", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "46926f1231846fd3a83cc84aae1f16ca", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a04ea72eb123cdd900fbbdd0aaff09df", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G3" + }, + "result": { + "position": { + "x": 360.38, + "y": 234.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "39c233c13b60a60dd5ea25a4f7895d46", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9ab2259101883b8631895d45dc3b9629", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bca1592fc885739eee6960af238767f4", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F3" + }, + "result": { + "position": { + "x": 360.38, + "y": 243.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a5d3d21d7ce0fc8148d7f8944f463f08", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "acbe5d508718973aa69240cf3df378dd", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dc21aba9838ef842e6b1edf31586756b", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E3" + }, + "result": { + "position": { + "x": 360.38, + "y": 252.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "436492ca6ffa5de1a924610a369db4bd", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "21157f9d79c30301400a48fff73a4664", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f346f1644569c8d8b1eed0d2c9367a7b", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D3" + }, + "result": { + "position": { + "x": 360.38, + "y": 261.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "726a43623941ee40b683376ae48e41bb", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5fcefcc1491fdb5fa5ffb71df06dc13e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "64518e2b19524f45d539a0a538c3b976", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C3" + }, + "result": { + "position": { + "x": 360.38, + "y": 270.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cf527a16d506365e2750776a2233bbd3", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c09dd58bbd0817f22e9db036eda3b848", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e62d9339999ab2bb3329d6b48e315a21", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B3" + }, + "result": { + "position": { + "x": 360.38, + "y": 279.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8f81ba4e7407c1c2856f6b39156f6a47", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d05ddaea8947b236ba411d4868882670", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9a8c17dba80f717e91dcb5d499ea5d5b", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 360.38, + "y": 288.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1564b0951962dda5979f915fdccbb747", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6a16e002ff187f39866862f93a19ea25", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7d4d96afe72f305657a3b04b3dfe231f", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H2" + }, + "result": { + "position": { + "x": 351.38, + "y": 225.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ec2f775ae713a87aba1cb9270215a464", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1547938206c413f7d78f2d03776de375", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7ad103a2c8fc0011b7a85c9a9e1bf49c", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G2" + }, + "result": { + "position": { + "x": 351.38, + "y": 234.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f094887e9f6970766fcd7a1200207b02", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f45cb7e563625e2e2c63466a374e4571", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dd1127f3d9d034306ae2e9ffdd3a9a92", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F2" + }, + "result": { + "position": { + "x": 351.38, + "y": 243.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f4415d8320996daac4a4ee96ec0bebe6", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7b088a2861f70828fce956738cc046b3", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ad600566117ddc501671df33eb9978e6", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E2" + }, + "result": { + "position": { + "x": 351.38, + "y": 252.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "31408719f70d5db499a7bbf072878fe8", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6f5a1c50a84b1f98ea1c6ca02800ab58", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "15cf5f4f042ab38b8cf6b444dd01d44d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D2" + }, + "result": { + "position": { + "x": 351.38, + "y": 261.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "47e9cba9a29b012c537e7dd22232227c", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2f4b75e6266e942ba2f7d94bf3e18586", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2f8a201aaa0715b83922298aa1f432ec", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C2" + }, + "result": { + "position": { + "x": 351.38, + "y": 270.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9db5738c1bab7713658c4ede609a36db", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ef936de543090ba4338f968317244400", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f652d62b1dc78a1917b97c6affbea49d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B2" + }, + "result": { + "position": { + "x": 351.38, + "y": 279.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e21083bcc8d61ae0c46030430f248ea8", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0c5ba5b1694fe5500d79be0c8543c2b2", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6de5ab7a537b291bcfed37927f661d28", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A2" + }, + "result": { + "position": { + "x": 351.38, + "y": 288.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "88999c4e2f775d2805d49eb2ea1baf8d", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "32318bf6485242269348a0ae991e158c", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "cf34e6584bb97bd9c312a0d26a0aad75", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "H1" + }, + "result": { + "position": { + "x": 342.38, + "y": 225.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f125c2af37329aeb4e85edb01cd8336b", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6b5c064c4eb4410f5594934e71b98a79", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "93caee3e53135e5ecfa3c907d777b9f1", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "G1" + }, + "result": { + "position": { + "x": 342.38, + "y": 234.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c6c923f1909de4b970893823da404e3d", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fd7ae750631717e17be16d7c4411d80e", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fbb0f643bd20399aa11b93dfaf74cee5", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "F1" + }, + "result": { + "position": { + "x": 342.38, + "y": 243.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9781d9ca31a65a561942b172553c1f90", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "294fc156f8bcef3a36886e2c11ad9ad8", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e8f925cc21744a31e907efa9af2f24cd", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E1" + }, + "result": { + "position": { + "x": 342.38, + "y": 252.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "67a0ada0ca14eb69a257eb2493fa0f09", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "907d3d9eaef0f68d6367822da1670637", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e9ffd2c8a4265ca3a83d984778d73d4a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 342.38, + "y": 261.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5662a0c5626afb96cdca5b543b9c5816", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "89d703ca1aa8fe353310b65793c579b6", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3ef272f51419e2b2db849aad46478a1f", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C1" + }, + "result": { + "position": { + "x": 342.38, + "y": 270.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3cd9ba9920f26683d6c62db34b4eea1b", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "741d0430b8ac05059522890fe9562dfd", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1950e443719a1337b9ce6c353fe077dc", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B1" + }, + "result": { + "position": { + "x": 342.38, + "y": 279.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "56bd89917f2d269e8efdf2f7efc7a37b", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e60550c8eae4918291a77f3ebf248f94", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "89149cb7224aa523675da1968431ad13", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 342.38, + "y": 288.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ff6c0211638b7bcf610a6f69b4b93c67", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4f353aad474a330a78d4aa1f83ad964c", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "55dec48470e1371ee6433d757efd030d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E9" + }, + "result": { + "position": { + "x": 414.38, + "y": 38.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1f5bf76302891e285857d54b7b204432", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "250d19ad8a6a57ca81c586d32555b93a", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d70102fc84cb7297a3a6256650b1c858", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D9" + }, + "result": { + "position": { + "x": 414.38, + "y": 47.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c8e2ccedd4677c57d2edae178a768989", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "daa343a2bf6f17e77417c9cf852bf42d", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d92cf0f7b3bedf00fa3db15df128be8e", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C9" + }, + "result": { + "position": { + "x": 414.38, + "y": 56.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "35a828d2454ea143315f279031fa15a6", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "968ff6fd6767f7ebd1df3b64cbb3cedf", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9ac7c04598bff0d25e961700e49cc06d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B9" + }, + "result": { + "position": { + "x": 414.38, + "y": 65.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4335989ce4720c4ae983d2d53a76c3f9", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5d5cb0c60a5f1190cb611c56b88ebe34", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8885bf8a13dd95b2b7c420186cc33abd", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A9" + }, + "result": { + "position": { + "x": 414.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ec79792ffc863f948cd8506f00ec5bbb", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "599739c7d84ec28ab4463ea52e40a8e7", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4bc9aee612387f0623a2c6fbfd5940c4", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E8" + }, + "result": { + "position": { + "x": 405.38, + "y": 38.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "43e7e551b3c284f3594192752895b0da", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e5065ac13956169ce3e68cc59d56d450", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3566ecc8d4b8b48271f3925c28dd8c37", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D8" + }, + "result": { + "position": { + "x": 405.38, + "y": 47.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6862e7a144badc6f7f1565b478b77e0d", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f859fe0f60324ddc65851ff37bcc50ef", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4fcf1992ea40b1326973b9ececafddc0", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C8" + }, + "result": { + "position": { + "x": 405.38, + "y": 56.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1f96535ddca507554eb84c702739c0bc", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6dfd1d178ea113d42922f6659344014f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c84e9673120c89a4dfa0b40851c1fb24", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B8" + }, + "result": { + "position": { + "x": 405.38, + "y": 65.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0a2fb61cf21d6c8cd805723b88f8b6d2", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c721af21df521dcf12cb8038c4526ebc", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8e6ee99477298b89fc141545bda2e46c", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A8" + }, + "result": { + "position": { + "x": 405.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "31cd465454bff519346898323ee286eb", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1568e7ab86e3ff4df786254509457a7c", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3f957c9385fb7ceb823b0e81fee9c20b", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E7" + }, + "result": { + "position": { + "x": 396.38, + "y": 38.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9f2da5c7c116069516da83eed6b009c4", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "20e89a60f5401a3a6855836e78451b58", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d2b1553f68dacd513229b91f43fa91ba", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D7" + }, + "result": { + "position": { + "x": 396.38, + "y": 47.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bc3a7f2c174ffc69db31a41d4e874eaf", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4fa3b1d6bc43dd2914f0dd2b87e20f3f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b6053bb4d079087ece95de378cf5b727", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C7" + }, + "result": { + "position": { + "x": 396.38, + "y": 56.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0900f052b6cf757e7d3ecf9e07cb994f", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4bcc85ca7778bb4883df06ecd4512b9f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2908129f8099d5b72f14c0a72b8304e6", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B7" + }, + "result": { + "position": { + "x": 396.38, + "y": 65.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9a73ed948cae476b2ed8c2a1bed285e5", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "17e6381d39a292a6138319e5317fe7a5", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9524cdfbd41425d33939f7eacbd81f42", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A7" + }, + "result": { + "position": { + "x": 396.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ae52dc8256c332278b26fbd36ea0b3ab", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "993da4ad4b51e359e7289337c7673d58", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6fef63838f4dc6c6a097ddd8de4d4c9b", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E6" + }, + "result": { + "position": { + "x": 387.38, + "y": 38.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9d73d34d68c147da843e6ea78063a4c6", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a7c03bea6e9e710cb267dac20380f555", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "55863a01b067d60f64d14caba6b60de1", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D6" + }, + "result": { + "position": { + "x": 387.38, + "y": 47.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "59eb386c0bac850ac05780da14bdea21", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "606fdb157eac467ecd719b67fe1a5303", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3d5c78d5f8d5a38c315e63d6200afcd0", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C6" + }, + "result": { + "position": { + "x": 387.38, + "y": 56.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f65271774f81b4b588028201714986ad", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "99b5dd74f2acb6a912be3d18cc609de6", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1ed90f0fbb3d039a696556fa64e9b629", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B6" + }, + "result": { + "position": { + "x": 387.38, + "y": 65.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "45238aa5663dcf38d95edfaf06f734fa", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "30385d4a1a0da1b2c058c65b2ee9c2a0", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d287258a9692d664f009c7fb235fb510", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A6" + }, + "result": { + "position": { + "x": 387.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d9fdcbf55c890bef010e4fecaf7d61a0", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "46ce64494de84c0c68cdc693665cf48b", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f13cec355874ada7c03a73131da1f861", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E5" + }, + "result": { + "position": { + "x": 378.38, + "y": 38.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "162ff16402f680de1bf7821c79e84eb3", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fe27bc34a179bccc12876f35063ee29f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "66c3603f0b58daea903d2c9d5f85ccf6", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D5" + }, + "result": { + "position": { + "x": 378.38, + "y": 47.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "87f2aac854f0571cc278dfa4306a3660", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6e4a1a691cb4365e9096243f3eb47a98", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fd604dd452ab5cd3ba829825aa04e5d8", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C5" + }, + "result": { + "position": { + "x": 378.38, + "y": 56.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a6a90c34689d7c3b16c7293e14a0718c", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "98136337fa51333dd86c51af85715bcc", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "17c38c86c5b05362df4463b15f038ae6", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B5" + }, + "result": { + "position": { + "x": 378.38, + "y": 65.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "63d57a8a7a33293d62796e5ff3721c87", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c78dcddf6c8c4e7868d0bffe09d68f50", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "5d343ef467a82920d91b089db97d3753", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A5" + }, + "result": { + "position": { + "x": 378.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fdd3df5ff4b4f864e6cb88e129be3271", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0eb7464513802109fba8ed1a4853fdda", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d2c47846f92511d2b6efd0472948da6a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E4" + }, + "result": { + "position": { + "x": 369.38, + "y": 38.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "92e0d0002802dacad114efd2106ff4c5", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "40b4ccbf9e5e1472e203f1be025a7676", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d16270e8d6ce98ba4ebb6a663544b93a", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D4" + }, + "result": { + "position": { + "x": 369.38, + "y": 47.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f56dafb1fbbe5edd562ac256d7ca3242", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "46f6e272f70b4603c44f160ab7e98af2", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7cd50e07263bfd18a1d73a34570f4aaf", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C4" + }, + "result": { + "position": { + "x": 369.38, + "y": 56.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2f20a212cd8304935925372a04b22c7e", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "167a82136e3635b910ce9f425c48584a", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dd00c2f6c2f080718ccff9871dd17358", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B4" + }, + "result": { + "position": { + "x": 369.38, + "y": 65.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fb2c632066dc638014131a671f2aa346", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6c1de267e419fe5e9bce7fdd6fcad8b0", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fde356b98736b7c025c8fd5457b094d1", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A4" + }, + "result": { + "position": { + "x": 369.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8003d489e65197887659d9dfc6f69b1b", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "74740fd766ede8bf42ee5d1884983ed0", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c8f21d48c354b434f5bf23ea8c71d43", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E3" + }, + "result": { + "position": { + "x": 360.38, + "y": 38.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c68b9921019b4085ff49303759c19285", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2cb79f8131ed6388cb93667791e5a5b6", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1c707af9e766107654ee62234b914189", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D3" + }, + "result": { + "position": { + "x": 360.38, + "y": 47.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4b6ef777054d4f0195bd63e7c2f82cb8", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "68d49f391755644380c64e6f20081e89", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8efad399cbac9030e2130921991ac2b5", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C3" + }, + "result": { + "position": { + "x": 360.38, + "y": 56.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e586dfe750c5c88f6031749fa760ab42", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2aec47f945bcc4e908f1ec7e07c37285", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2f58ddf2f563889f7704ae052f699bbe", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B3" + }, + "result": { + "position": { + "x": 360.38, + "y": 65.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "fe13a5842b1d93e60341f2eda4cd9029", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "785aa47ebdd350ddf692798f187e6bca", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "af7d26a9cbc3e8ec511be657284c4954", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A3" + }, + "result": { + "position": { + "x": 360.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0157cf22b548c55b434e128826f4bdfe", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "85ed33fe317038211c4d1d149968f46a", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bf12e7726001a495b6b36c9439bc70ee", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E2" + }, + "result": { + "position": { + "x": 351.38, + "y": 38.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ec28af958f146bfbfb7f755efe5716ef", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "796730616c86fb5c0c185e506246d634", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b3c2ae5aaddf14104f40a4c58b278f8d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D2" + }, + "result": { + "position": { + "x": 351.38, + "y": 47.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0d1598de6b5846e6511cd24f38057cad", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e99deb933a517de05f73bf900b585136", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "4f5393c0dc68ce06a462b4df918d81ce", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C2" + }, + "result": { + "position": { + "x": 351.38, + "y": 56.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b56d86e8a4dae675b1e8cbfe3d90ad34", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "e94efe742feae0a455eccf3911d37374", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "417002b1a16b37f5cbd7cc0215714fe1", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B2" + }, + "result": { + "position": { + "x": 351.38, + "y": 65.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "7eb10162ab9a2159d36a3a1f08dfa1f6", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "438f59f8c0a8e076551c13002a6e90da", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "538aa4317bd4a323ec2bdbd32783388c", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A2" + }, + "result": { + "position": { + "x": 351.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "63904b45be75e9f4234133b161664dd7", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1551d33d151bef898ed2f4bb4a70d531", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b0a7bf6697e9d87377be6e342d28f53d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "E1" + }, + "result": { + "position": { + "x": 342.38, + "y": 38.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "1ebd8d7b0f1d280779b4ed51e486919b", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "9f70f5cce4a416f11a829ddba6b6c433", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "23916032e4a9b984d8fc108042b08f0d", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "D1" + }, + "result": { + "position": { + "x": 342.38, + "y": 47.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "6fad36620b8b17a757b325833519415d", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "84feac122e64a74f7148a0152f5803a8", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2068d898446e4b881918e8e73554c62c", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "C1" + }, + "result": { + "position": { + "x": 342.38, + "y": 56.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "ce174720155e2bede20044e49a7f7f8e", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "053e7f1a254d774cdffec83971061e96", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "60bd785ca5aa815cb75bdbf05ee0b42e", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "B1" + }, + "result": { + "position": { + "x": 342.38, + "y": 65.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "303172a538e453cb1e05cf3388e39d5c", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": 54.25, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c60dc0f5dfee6efa24f4c75bf5185e0f", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a4e56bfdf549ab141bb6d3c03e6a47f9", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 342.38, + "y": 74.38, + "z": 99.0 + }, + "tipDiameter": 5.47, + "tipLength": 85.38999999999999, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveToAddressableAreaForDropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0b516a1ae89ff38776e2bef00239a2f7", + "notes": [], + "params": { + "addressableAreaName": "movableTrashA1", + "alternateDropLocation": true, + "forceDirect": false, + "ignoreTipConfiguration": true, + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "pipetteId": "UUID" + }, + "result": { + "position": { + "x": -9.75, + "y": 364.0, + "z": 40.0 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTipInPlace", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "a82abfb4983bcc1ddcab203dec854921", + "notes": [], + "params": { + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [], + "files": [ + { + "name": "Flex_S_v2_20_96_None_Column3_SINGLE_.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_flex_96_tiprack_1000ul/1", + "displayName": "Partial Tip Rack", + "id": "UUID", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "B3" + } + }, + { + "definitionUri": "opentrons/opentrons_flex_96_tiprack_1000ul/1", + "displayName": "Partial Tip Rack", + "id": "UUID", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "B1" + } + }, + { + "definitionUri": "opentrons/opentrons_flex_96_tiprack_1000ul/1", + "displayName": "Partial Tip Rack", + "id": "UUID", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "D3" + } + }, + { + "definitionUri": "opentrons/opentrons_flex_96_tiprack_1000ul/1", + "displayName": "Partial Tip Rack", + "id": "UUID", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "C1" + } + } + ], + "liquids": [], + "metadata": {}, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_96" + } + ], + "result": "ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[ed26635ff7][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_consolidate_source_collision].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[ed26635ff7][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_consolidate_source_collision].json new file mode 100644 index 00000000000..61a7e9595ff --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[ed26635ff7][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_consolidate_source_collision].json @@ -0,0 +1,3897 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "B2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-1000ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 97.47 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_1000ul", + "tipLength": 88, + "tipOverlap": 7.95 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.24, + "z": 9.47 + }, + "A10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.24, + "z": 9.47 + }, + "A11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.24, + "z": 9.47 + }, + "A12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.24, + "z": 9.47 + }, + "A2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.24, + "z": 9.47 + }, + "A3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.24, + "z": 9.47 + }, + "A4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.24, + "z": 9.47 + }, + "A5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.24, + "z": 9.47 + }, + "A6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.24, + "z": 9.47 + }, + "A7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.24, + "z": 9.47 + }, + "A8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.24, + "z": 9.47 + }, + "A9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.24, + "z": 9.47 + }, + "B1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.24, + "z": 9.47 + }, + "B10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.24, + "z": 9.47 + }, + "B11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.24, + "z": 9.47 + }, + "B12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.24, + "z": 9.47 + }, + "B2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.24, + "z": 9.47 + }, + "B3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.24, + "z": 9.47 + }, + "B4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.24, + "z": 9.47 + }, + "B5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.24, + "z": 9.47 + }, + "B6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.24, + "z": 9.47 + }, + "B7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.24, + "z": 9.47 + }, + "B8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.24, + "z": 9.47 + }, + "B9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.24, + "z": 9.47 + }, + "C1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.24, + "z": 9.47 + }, + "C10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.24, + "z": 9.47 + }, + "C11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.24, + "z": 9.47 + }, + "C12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.24, + "z": 9.47 + }, + "C2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.24, + "z": 9.47 + }, + "C3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.24, + "z": 9.47 + }, + "C4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.24, + "z": 9.47 + }, + "C5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.24, + "z": 9.47 + }, + "C6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.24, + "z": 9.47 + }, + "C7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.24, + "z": 9.47 + }, + "C8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.24, + "z": 9.47 + }, + "C9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.24, + "z": 9.47 + }, + "D1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.24, + "z": 9.47 + }, + "D10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.24, + "z": 9.47 + }, + "D11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.24, + "z": 9.47 + }, + "D12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.24, + "z": 9.47 + }, + "D2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.24, + "z": 9.47 + }, + "D3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.24, + "z": 9.47 + }, + "D4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.24, + "z": 9.47 + }, + "D5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.24, + "z": 9.47 + }, + "D6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.24, + "z": 9.47 + }, + "D7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.24, + "z": 9.47 + }, + "D8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.24, + "z": 9.47 + }, + "D9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.24, + "z": 9.47 + }, + "E1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.24, + "z": 9.47 + }, + "E10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.24, + "z": 9.47 + }, + "E11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.24, + "z": 9.47 + }, + "E12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.24, + "z": 9.47 + }, + "E2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.24, + "z": 9.47 + }, + "E3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.24, + "z": 9.47 + }, + "E4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.24, + "z": 9.47 + }, + "E5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.24, + "z": 9.47 + }, + "E6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.24, + "z": 9.47 + }, + "E7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.24, + "z": 9.47 + }, + "E8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.24, + "z": 9.47 + }, + "E9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.24, + "z": 9.47 + }, + "F1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.24, + "z": 9.47 + }, + "F10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.24, + "z": 9.47 + }, + "F11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.24, + "z": 9.47 + }, + "F12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.24, + "z": 9.47 + }, + "F2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.24, + "z": 9.47 + }, + "F3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.24, + "z": 9.47 + }, + "F4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.24, + "z": 9.47 + }, + "F5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.24, + "z": 9.47 + }, + "F6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.24, + "z": 9.47 + }, + "F7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.24, + "z": 9.47 + }, + "F8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.24, + "z": 9.47 + }, + "F9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.24, + "z": 9.47 + }, + "G1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.24, + "z": 9.47 + }, + "G10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.24, + "z": 9.47 + }, + "G11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.24, + "z": 9.47 + }, + "G12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.24, + "z": 9.47 + }, + "G2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.24, + "z": 9.47 + }, + "G3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.24, + "z": 9.47 + }, + "G4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.24, + "z": 9.47 + }, + "G5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.24, + "z": 9.47 + }, + "G6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.24, + "z": 9.47 + }, + "G7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.24, + "z": 9.47 + }, + "G8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.24, + "z": 9.47 + }, + "G9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.24, + "z": 9.47 + }, + "H1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.24, + "z": 9.47 + }, + "H10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.24, + "z": 9.47 + }, + "H11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.24, + "z": 9.47 + }, + "H12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.24, + "z": 9.47 + }, + "H2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.24, + "z": 9.47 + }, + "H3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.24, + "z": 9.47 + }, + "H4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.24, + "z": 9.47 + }, + "H5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.24, + "z": 9.47 + }, + "H6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.24, + "z": 9.47 + }, + "H7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.24, + "z": 9.47 + }, + "H8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.24, + "z": 9.47 + }, + "H9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.24, + "z": 9.47 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "H12", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "691afd54dfa7982fb89e5f77c763bfd4", + "notes": [], + "params": { + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "C1" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 124.35 + }, + "gripperOffsets": {}, + "groups": [ + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352095", + "352096", + "352097", + "352099", + "352196" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 6x15 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A2", + "B1", + "B2", + "C1", + "C2" + ] + }, + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352070", + "352098" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 4x50 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A3", + "A4", + "B3", + "B4" + ] + } + ], + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Opentrons 10 Tube Rack with Falcon 4x50 mL, 6x15 mL Conical", + "displayVolumeUnits": "mL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1" + ], + [ + "A2", + "B2", + "C2" + ], + [ + "A3", + "B3" + ], + [ + "A4", + "B4" + ] + ], + "parameters": { + "format": "irregular", + "isMagneticModuleCompatible": false, + "isTiprack": false, + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical" + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 67.75, + "z": 6.85 + }, + "A2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 67.75, + "z": 6.85 + }, + "A3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 60.25, + "z": 7.3 + }, + "A4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 60.25, + "z": 7.3 + }, + "B1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 42.75, + "z": 6.85 + }, + "B2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 42.75, + "z": 6.85 + }, + "B3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 25.25, + "z": 7.3 + }, + "B4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 25.25, + "z": 7.3 + }, + "C1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 17.75, + "z": 6.85 + }, + "C2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 17.75, + "z": 6.85 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c910be62291bb94458a59cb4185c5180", + "notes": [], + "params": { + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "D2" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d75e38152238e9ad0c18e291fe97e483", + "notes": [], + "params": { + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "D3" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8de5f9595204f05bd1016cce23cd32b9", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 178.38, + "y": 288.24, + "z": 97.47 + }, + "tipDiameter": 7.23, + "tipLength": 77.5, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "PartialTipMovementNotAllowedError [line 494]: Error 2004 MOTION_PLANNING_FAILURE (PartialTipMovementNotAllowedError): Moving to NEST 96 Well Plate 100 µL PCR Full Skirt in slot D2 with H12 nozzle partial configuration will result in collision with items in deck slot C1.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "Moving to NEST 96 Well Plate 100 µL PCR Full Skirt in slot D2 with H12 nozzle partial configuration will result in collision with items in deck slot C1.", + "errorCode": "2004", + "errorInfo": {}, + "errorType": "PartialTipMovementNotAllowedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_consolidate_source_collision.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "B2" + } + }, + { + "definitionUri": "opentrons/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/1", + "id": "UUID", + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "C1" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "D2" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "D3" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Too tall labware on pickup tip" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_96" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[f86713b4d4][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_distribute_source_collision].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[f86713b4d4][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_distribute_source_collision].json new file mode 100644 index 00000000000..09e15f48097 --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[f86713b4d4][Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_distribute_source_collision].json @@ -0,0 +1,3897 @@ +{ + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "B2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-1000ul-tips" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 97.47 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons OT-2 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_96_tiprack_1000ul", + "tipLength": 88, + "tipOverlap": 7.95 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.24, + "z": 9.47 + }, + "A10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.24, + "z": 9.47 + }, + "A11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.24, + "z": 9.47 + }, + "A12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.24, + "z": 9.47 + }, + "A2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.24, + "z": 9.47 + }, + "A3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.24, + "z": 9.47 + }, + "A4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.24, + "z": 9.47 + }, + "A5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.24, + "z": 9.47 + }, + "A6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.24, + "z": 9.47 + }, + "A7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.24, + "z": 9.47 + }, + "A8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.24, + "z": 9.47 + }, + "A9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.24, + "z": 9.47 + }, + "B1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.24, + "z": 9.47 + }, + "B10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.24, + "z": 9.47 + }, + "B11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.24, + "z": 9.47 + }, + "B12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.24, + "z": 9.47 + }, + "B2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.24, + "z": 9.47 + }, + "B3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.24, + "z": 9.47 + }, + "B4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.24, + "z": 9.47 + }, + "B5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.24, + "z": 9.47 + }, + "B6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.24, + "z": 9.47 + }, + "B7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.24, + "z": 9.47 + }, + "B8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.24, + "z": 9.47 + }, + "B9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.24, + "z": 9.47 + }, + "C1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.24, + "z": 9.47 + }, + "C10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.24, + "z": 9.47 + }, + "C11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.24, + "z": 9.47 + }, + "C12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.24, + "z": 9.47 + }, + "C2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.24, + "z": 9.47 + }, + "C3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.24, + "z": 9.47 + }, + "C4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.24, + "z": 9.47 + }, + "C5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.24, + "z": 9.47 + }, + "C6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.24, + "z": 9.47 + }, + "C7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.24, + "z": 9.47 + }, + "C8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.24, + "z": 9.47 + }, + "C9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.24, + "z": 9.47 + }, + "D1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.24, + "z": 9.47 + }, + "D10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.24, + "z": 9.47 + }, + "D11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.24, + "z": 9.47 + }, + "D12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.24, + "z": 9.47 + }, + "D2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.24, + "z": 9.47 + }, + "D3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.24, + "z": 9.47 + }, + "D4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.24, + "z": 9.47 + }, + "D5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.24, + "z": 9.47 + }, + "D6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.24, + "z": 9.47 + }, + "D7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.24, + "z": 9.47 + }, + "D8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.24, + "z": 9.47 + }, + "D9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.24, + "z": 9.47 + }, + "E1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.24, + "z": 9.47 + }, + "E10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.24, + "z": 9.47 + }, + "E11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.24, + "z": 9.47 + }, + "E12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.24, + "z": 9.47 + }, + "E2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.24, + "z": 9.47 + }, + "E3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.24, + "z": 9.47 + }, + "E4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.24, + "z": 9.47 + }, + "E5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.24, + "z": 9.47 + }, + "E6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.24, + "z": 9.47 + }, + "E7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.24, + "z": 9.47 + }, + "E8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.24, + "z": 9.47 + }, + "E9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.24, + "z": 9.47 + }, + "F1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.24, + "z": 9.47 + }, + "F10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.24, + "z": 9.47 + }, + "F11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.24, + "z": 9.47 + }, + "F12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.24, + "z": 9.47 + }, + "F2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.24, + "z": 9.47 + }, + "F3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.24, + "z": 9.47 + }, + "F4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.24, + "z": 9.47 + }, + "F5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.24, + "z": 9.47 + }, + "F6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.24, + "z": 9.47 + }, + "F7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.24, + "z": 9.47 + }, + "F8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.24, + "z": 9.47 + }, + "F9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.24, + "z": 9.47 + }, + "G1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.24, + "z": 9.47 + }, + "G10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.24, + "z": 9.47 + }, + "G11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.24, + "z": 9.47 + }, + "G12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.24, + "z": 9.47 + }, + "G2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.24, + "z": 9.47 + }, + "G3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.24, + "z": 9.47 + }, + "G4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.24, + "z": 9.47 + }, + "G5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.24, + "z": 9.47 + }, + "G6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.24, + "z": 9.47 + }, + "G7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.24, + "z": 9.47 + }, + "G8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.24, + "z": 9.47 + }, + "G9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.24, + "z": 9.47 + }, + "H1": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.24, + "z": 9.47 + }, + "H10": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.24, + "z": 9.47 + }, + "H11": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.24, + "z": 9.47 + }, + "H12": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.24, + "z": 9.47 + }, + "H2": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.24, + "z": 9.47 + }, + "H3": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.24, + "z": 9.47 + }, + "H4": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.24, + "z": 9.47 + }, + "H5": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.24, + "z": 9.47 + }, + "H6": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.24, + "z": 9.47 + }, + "H7": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.24, + "z": 9.47 + }, + "H8": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.24, + "z": 9.47 + }, + "H9": { + "depth": 88, + "diameter": 7.23, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.24, + "z": 9.47 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "left", + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "H12", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "691afd54dfa7982fb89e5f77c763bfd4", + "notes": [], + "params": { + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "C1" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [], + "links": [ + "https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 124.35 + }, + "gripperOffsets": {}, + "groups": [ + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352095", + "352096", + "352097", + "352099", + "352196" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 6x15 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A2", + "B1", + "B2", + "C1", + "C2" + ] + }, + { + "brand": { + "brand": "Falcon", + "brandId": [ + "352070", + "352098" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Liquid-Handling/Tubes,-Liquid-Handling/Centrifuge-Tubes/Falcon%C2%AE-Conical-Centrifuge-Tubes/p/falconConicalTubes" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Falcon 4x50 mL Conical", + "wellBottomShape": "v" + }, + "wells": [ + "A3", + "A4", + "B3", + "B4" + ] + } + ], + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Opentrons 10 Tube Rack with Falcon 4x50 mL, 6x15 mL Conical", + "displayVolumeUnits": "mL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1" + ], + [ + "A2", + "B2", + "C2" + ], + [ + "A3", + "B3" + ], + [ + "A4", + "B4" + ] + ], + "parameters": { + "format": "irregular", + "isMagneticModuleCompatible": false, + "isTiprack": false, + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical" + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 67.75, + "z": 6.85 + }, + "A2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 67.75, + "z": 6.85 + }, + "A3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 60.25, + "z": 7.3 + }, + "A4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 60.25, + "z": 7.3 + }, + "B1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 42.75, + "z": 6.85 + }, + "B2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 42.75, + "z": 6.85 + }, + "B3": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 71.38, + "y": 25.25, + "z": 7.3 + }, + "B4": { + "depth": 113, + "diameter": 27.81, + "shape": "circular", + "totalLiquidVolume": 50000, + "x": 106.38, + "y": 25.25, + "z": 7.3 + }, + "C1": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 13.88, + "y": 17.75, + "z": 6.85 + }, + "C2": { + "depth": 117.5, + "diameter": 14.9, + "shape": "circular", + "totalLiquidVolume": 15000, + "x": 38.88, + "y": 17.75, + "z": 6.85 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "c910be62291bb94458a59cb4185c5180", + "notes": [], + "params": { + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "D2" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "d75e38152238e9ad0c18e291fe97e483", + "notes": [], + "params": { + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "D3" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "402501" + ], + "links": [ + "https://www.nest-biotech.com/pcr-plates/58773587.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.76, + "yDimension": 85.48, + "zDimension": 15.7 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 10.65, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 100 µL PCR Full Skirt", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "magneticModuleEngageHeight": 20 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { + "x": 0, + "y": 0, + "z": 10.2 + }, + "opentrons_96_well_aluminum_block": { + "x": 0, + "y": 0, + "z": 12.66 + } + }, + "stackingOffsetWithModule": { + "thermocyclerModuleV2": { + "x": 0, + "y": 0, + "z": 10.8 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 74.24, + "z": 0.92 + }, + "A10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 74.24, + "z": 0.92 + }, + "A11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 74.24, + "z": 0.92 + }, + "A12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 74.24, + "z": 0.92 + }, + "A2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 74.24, + "z": 0.92 + }, + "A3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 74.24, + "z": 0.92 + }, + "A4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 74.24, + "z": 0.92 + }, + "A5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 74.24, + "z": 0.92 + }, + "A6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 74.24, + "z": 0.92 + }, + "A7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 74.24, + "z": 0.92 + }, + "A8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 74.24, + "z": 0.92 + }, + "A9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 74.24, + "z": 0.92 + }, + "B1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 65.24, + "z": 0.92 + }, + "B10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 65.24, + "z": 0.92 + }, + "B11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 65.24, + "z": 0.92 + }, + "B12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 65.24, + "z": 0.92 + }, + "B2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 65.24, + "z": 0.92 + }, + "B3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 65.24, + "z": 0.92 + }, + "B4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 65.24, + "z": 0.92 + }, + "B5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 65.24, + "z": 0.92 + }, + "B6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 65.24, + "z": 0.92 + }, + "B7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 65.24, + "z": 0.92 + }, + "B8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 65.24, + "z": 0.92 + }, + "B9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 65.24, + "z": 0.92 + }, + "C1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 56.24, + "z": 0.92 + }, + "C10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 56.24, + "z": 0.92 + }, + "C11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 56.24, + "z": 0.92 + }, + "C12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 56.24, + "z": 0.92 + }, + "C2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 56.24, + "z": 0.92 + }, + "C3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 56.24, + "z": 0.92 + }, + "C4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 56.24, + "z": 0.92 + }, + "C5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 56.24, + "z": 0.92 + }, + "C6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 56.24, + "z": 0.92 + }, + "C7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 56.24, + "z": 0.92 + }, + "C8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 56.24, + "z": 0.92 + }, + "C9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 56.24, + "z": 0.92 + }, + "D1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 47.24, + "z": 0.92 + }, + "D10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 47.24, + "z": 0.92 + }, + "D11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 47.24, + "z": 0.92 + }, + "D12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 47.24, + "z": 0.92 + }, + "D2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 47.24, + "z": 0.92 + }, + "D3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 47.24, + "z": 0.92 + }, + "D4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 47.24, + "z": 0.92 + }, + "D5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 47.24, + "z": 0.92 + }, + "D6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 47.24, + "z": 0.92 + }, + "D7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 47.24, + "z": 0.92 + }, + "D8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 47.24, + "z": 0.92 + }, + "D9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 47.24, + "z": 0.92 + }, + "E1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 38.24, + "z": 0.92 + }, + "E10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 38.24, + "z": 0.92 + }, + "E11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 38.24, + "z": 0.92 + }, + "E12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 38.24, + "z": 0.92 + }, + "E2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 38.24, + "z": 0.92 + }, + "E3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 38.24, + "z": 0.92 + }, + "E4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 38.24, + "z": 0.92 + }, + "E5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 38.24, + "z": 0.92 + }, + "E6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 38.24, + "z": 0.92 + }, + "E7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 38.24, + "z": 0.92 + }, + "E8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 38.24, + "z": 0.92 + }, + "E9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 38.24, + "z": 0.92 + }, + "F1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 29.24, + "z": 0.92 + }, + "F10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 29.24, + "z": 0.92 + }, + "F11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 29.24, + "z": 0.92 + }, + "F12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 29.24, + "z": 0.92 + }, + "F2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 29.24, + "z": 0.92 + }, + "F3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 29.24, + "z": 0.92 + }, + "F4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 29.24, + "z": 0.92 + }, + "F5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 29.24, + "z": 0.92 + }, + "F6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 29.24, + "z": 0.92 + }, + "F7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 29.24, + "z": 0.92 + }, + "F8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 29.24, + "z": 0.92 + }, + "F9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 29.24, + "z": 0.92 + }, + "G1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 20.24, + "z": 0.92 + }, + "G10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 20.24, + "z": 0.92 + }, + "G11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 20.24, + "z": 0.92 + }, + "G12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 20.24, + "z": 0.92 + }, + "G2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 20.24, + "z": 0.92 + }, + "G3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 20.24, + "z": 0.92 + }, + "G4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 20.24, + "z": 0.92 + }, + "G5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 20.24, + "z": 0.92 + }, + "G6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 20.24, + "z": 0.92 + }, + "G7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 20.24, + "z": 0.92 + }, + "G8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 20.24, + "z": 0.92 + }, + "G9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 20.24, + "z": 0.92 + }, + "H1": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 14.38, + "y": 11.24, + "z": 0.92 + }, + "H10": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 95.38, + "y": 11.24, + "z": 0.92 + }, + "H11": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 104.38, + "y": 11.24, + "z": 0.92 + }, + "H12": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 113.38, + "y": 11.24, + "z": 0.92 + }, + "H2": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 23.38, + "y": 11.24, + "z": 0.92 + }, + "H3": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 32.38, + "y": 11.24, + "z": 0.92 + }, + "H4": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 41.38, + "y": 11.24, + "z": 0.92 + }, + "H5": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 50.38, + "y": 11.24, + "z": 0.92 + }, + "H6": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 59.38, + "y": 11.24, + "z": 0.92 + }, + "H7": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 68.38, + "y": 11.24, + "z": 0.92 + }, + "H8": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 77.38, + "y": 11.24, + "z": 0.92 + }, + "H9": { + "depth": 14.78, + "diameter": 5.34, + "shape": "circular", + "totalLiquidVolume": 100, + "x": 86.38, + "y": 11.24, + "z": 0.92 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8de5f9595204f05bd1016cce23cd32b9", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 178.38, + "y": 288.24, + "z": 97.47 + }, + "tipDiameter": 7.23, + "tipLength": 77.5, + "tipVolume": 1000.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 20 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "PartialTipMovementNotAllowedError [line 501]: Error 2004 MOTION_PLANNING_FAILURE (PartialTipMovementNotAllowedError): Moving to NEST 96 Well Plate 100 µL PCR Full Skirt in slot D2 with H12 nozzle partial configuration will result in collision with items in deck slot C1.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "Moving to NEST 96 Well Plate 100 µL PCR Full Skirt in slot D2 with H12 nozzle partial configuration will result in collision with items in deck slot C1.", + "errorCode": "2004", + "errorInfo": {}, + "errorType": "PartialTipMovementNotAllowedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_20_96_None_Overrides_TooTallLabware_Override_distribute_source_collision.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_96_tiprack_1000ul", + "location": { + "slotName": "B2" + } + }, + { + "definitionUri": "opentrons/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/1", + "id": "UUID", + "loadName": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "location": { + "slotName": "C1" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "D2" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_100ul_pcr_full_skirt/2", + "id": "UUID", + "loadName": "nest_96_wellplate_100ul_pcr_full_skirt", + "location": { + "slotName": "D3" + } + } + ], + "liquids": [], + "metadata": { + "description": "oooo", + "protocolName": "Too tall labware on pickup tip" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "left", + "pipetteName": "p1000_96" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/api-client/src/errorRecovery/index.ts b/api-client/src/errorRecovery/index.ts new file mode 100644 index 00000000000..eca32dd0aef --- /dev/null +++ b/api-client/src/errorRecovery/index.ts @@ -0,0 +1 @@ +export * from './settings' diff --git a/api-client/src/errorRecovery/settings/getErrorRecoverySettings.ts b/api-client/src/errorRecovery/settings/getErrorRecoverySettings.ts new file mode 100644 index 00000000000..30a3b9f6aa1 --- /dev/null +++ b/api-client/src/errorRecovery/settings/getErrorRecoverySettings.ts @@ -0,0 +1,16 @@ +import { GET, request } from '../../request' + +import type { ResponsePromise } from '../../request' +import type { HostConfig } from '../../types' +import type { ErrorRecoverySettingsResponse } from './types' + +export function getErrorRecoverySettings( + config: HostConfig +): ResponsePromise { + return request( + GET, + '/errorRecovery/settings', + null, + config + ) +} diff --git a/api-client/src/errorRecovery/settings/index.ts b/api-client/src/errorRecovery/settings/index.ts new file mode 100644 index 00000000000..7f33c4c0069 --- /dev/null +++ b/api-client/src/errorRecovery/settings/index.ts @@ -0,0 +1,3 @@ +export { getErrorRecoverySettings } from './getErrorRecoverySettings' +export { updateErrorRecoverySettings } from './updateErrorRecoverySettings' +export * from './types' diff --git a/api-client/src/errorRecovery/settings/types.ts b/api-client/src/errorRecovery/settings/types.ts new file mode 100644 index 00000000000..d427ab88714 --- /dev/null +++ b/api-client/src/errorRecovery/settings/types.ts @@ -0,0 +1,9 @@ +export interface ErrorRecoverySettingsResponse { + data: { + enabled: boolean + } +} + +export interface ErrorRecoverySettingsRequest { + data: Partial +} diff --git a/api-client/src/errorRecovery/settings/updateErrorRecoverySettings.ts b/api-client/src/errorRecovery/settings/updateErrorRecoverySettings.ts new file mode 100644 index 00000000000..e5d1acf29aa --- /dev/null +++ b/api-client/src/errorRecovery/settings/updateErrorRecoverySettings.ts @@ -0,0 +1,20 @@ +import { PATCH, request } from '../../request' + +import type { ResponsePromise } from '../../request' +import type { HostConfig } from '../../types' +import type { + ErrorRecoverySettingsRequest, + ErrorRecoverySettingsResponse, +} from './types' + +export function updateErrorRecoverySettings( + config: HostConfig, + settings: ErrorRecoverySettingsRequest +): ResponsePromise { + return request( + PATCH, + '/errorRecovery/settings', + settings, + config + ) +} diff --git a/api-client/src/index.ts b/api-client/src/index.ts index 858772034ab..ade46aeee7f 100644 --- a/api-client/src/index.ts +++ b/api-client/src/index.ts @@ -3,6 +3,7 @@ export * from './calibration' export * from './client_data' export * from './dataFiles' export * from './deck_configuration' +export * from './errorRecovery' export * from './health' export * from './instruments' export * from './maintenance_runs' diff --git a/api-client/src/runs/getRunCurrentState.ts b/api-client/src/runs/getRunCurrentState.ts new file mode 100644 index 00000000000..6a64d9b9e0f --- /dev/null +++ b/api-client/src/runs/getRunCurrentState.ts @@ -0,0 +1,17 @@ +import { GET, request } from '../request' + +import type { ResponsePromise } from '../request' +import type { HostConfig } from '../types' +import type { RunCurrentState } from './types' + +export function getRunCurrentState( + config: HostConfig, + runId: string +): ResponsePromise { + return request( + GET, + `/runs/${runId}/currentState`, + null, + config + ) +} diff --git a/api-client/src/runs/index.ts b/api-client/src/runs/index.ts index 9f314f4b025..183b8f7e4d4 100644 --- a/api-client/src/runs/index.ts +++ b/api-client/src/runs/index.ts @@ -10,6 +10,7 @@ export { getCommands } from './commands/getCommands' export { getCommandsAsPreSerializedList } from './commands/getCommandsAsPreSerializedList' export { createRunAction } from './createRunAction' export { getRunCommandErrors } from './commands/getRunCommandErrors' +export { getRunCurrentState } from './getRunCurrentState' export * from './createLabwareOffset' export * from './createLabwareDefinition' export * from './constants' diff --git a/api-client/src/runs/types.ts b/api-client/src/runs/types.ts index 5998259ae50..241a3892622 100644 --- a/api-client/src/runs/types.ts +++ b/api-client/src/runs/types.ts @@ -87,10 +87,24 @@ export interface Run { data: RunData } +export interface RunCurrentState { + data: RunCurrentStateData + links: RunCommandLink +} + export interface RunsLinks { current?: ResourceLink } +export interface RunCommandLink { + current: CommandLinkNoMeta +} + +export interface CommandLinkNoMeta { + id: string + href: string +} + export interface GetRunsParams { pageLength?: number // the number of items to include } @@ -100,6 +114,10 @@ export interface Runs { links: RunsLinks } +export interface RunCurrentStateData { + activeNozzleLayouts: Record // keyed by pipetteId +} + export const RUN_ACTION_TYPE_PLAY: 'play' = 'play' export const RUN_ACTION_TYPE_PAUSE: 'pause' = 'pause' export const RUN_ACTION_TYPE_STOP: 'stop' = 'stop' @@ -173,3 +191,13 @@ export interface UpdateErrorRecoveryPolicyRequest { } export type UpdateErrorRecoveryPolicyResponse = Record + +/** + * Current Run State Data + */ +export interface NozzleLayoutValues { + startingNozzle: string + activeNozzles: string[] + config: NozzleLayoutConfig +} +export type NozzleLayoutConfig = 'column' | 'row' | 'full' | 'subrect' diff --git a/api/docs/img/partial-pickup-deck-extents.png b/api/docs/img/partial-pickup-deck-extents.png new file mode 100644 index 00000000000..9977357139a Binary files /dev/null and b/api/docs/img/partial-pickup-deck-extents.png differ diff --git a/api/docs/static/override_sphinx.css b/api/docs/static/override_sphinx.css index 10a1d091b94..8af01be9c04 100644 --- a/api/docs/static/override_sphinx.css +++ b/api/docs/static/override_sphinx.css @@ -1,26 +1,80 @@ @import url('https://fonts.googleapis.com/css?family=Public+Sans:300,400,400i,600,700'); @import url('https://fonts.googleapis.com/css2?family=Reddit+Mono:wght@200..900&display=swap'); -/* OT NAV */ +/* OT TOP NAV */ body { padding: 0; margin: 0; - font-family: "Public Sans", "sans-serif"; } -.highlight-none, .mi, .literal { - color: #048f85; +/* restate button styling */ +.text-brand-blue:hover { + --tw-text-opacity: 1; + color: rgb(0 108 250 / var(--tw-text-opacity)); +} + +.text-white:hover { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity)); +} + +/* hack out search button */ + +div.flex.gap-4 div.text-white.flex.items-center.h-full > button { + display: none; +} + +/* use Akko from docs site instead of from main site */ +header a.button-sm { + font-family: "AkkoPro-Regular", "Akko Pro", "Open Sans", sans-serif !important; +} + +/* OT FOOTER */ + +footer { + padding: 0; +} + +.footer-app-button:hover { + color: #E8E9EA; +} + +/* restate newsletter form styling */ + +footer input.hs-input { + margin: 0; + max-width: 100%; + width: 100%; + height: 42px; + padding-left: 1rem; + padding-right: 1rem; + padding-top: 0.5rem; + padding-bottom: 0.5rem; + font-size: 1rem; + --tw-text-opacity: 1; + color: rgb(112 112 117 / var(--tw-text-opacity)); +} + +footer .hs_submit input { + height: 40px; + min-width: 100% !important; + width: 100% !important; } /* DOCS */ +div.document .highlight-none, .mi, .literal { + color: #048f85; +} + div.document { - padding-top: 150px; + padding-top: 96px; margin-top: 0; + font-family: "Public Sans", "sans-serif"; } div.document [id] { - scroll-margin-top: 150px; + scroll-margin-top: 110px; } @media only screen and (min-device-width: 768px) and (min-width: 768px) and (max-width: 1023px) { @@ -34,31 +88,62 @@ div.document [id] { } } -div.body p { +div.document p { line-height: 20pt; - font-family: "Public Sans", "sans-serif"; } -pre, tt, code { +div.document section > p, +div.document dl p { + margin: 1em 0; +} + +div.document pre, +div.document tt, +div.document code { font-size: 0.9em; font-family: "Reddit Mono", "Consolas", "Lucida Console", monospace; } -/* classes for API Reference docstring signatures */ -.sig, .sig-name, code.descname, .sig-prename, .optional, .sig-paren { +div.document dl { + margin-bottom: 15px; +} + +/* API Reference */ +div.document .sig, +div.document .sig-name, +div.document code.descname, +div.document .sig-prename, +div.document .optional, +div.document .sig-paren { font-size: 1em; font-family: "Reddit Mono", "Consolas", "Lucida Console", monospace; } -div.body h1 { +div.document dt.field-even, +div.document dt.field-odd { + margin-top: 1em; + line-height: 20pt; +} + +div.document dd ul { + margin-top: 1em; +} + +span.colon { + display: none; +} + +/* all article pages */ + +div.document h1 { margin-top: 0; margin-bottom: 0; padding-top: 0; - font-size: 2.4em; + font-size: 2em; min-height: 78px; } -div.body h1 + p { +div.document h1 + p { padding-top: 24px; } @@ -70,6 +155,19 @@ div.documentwrapper { float: none; } +div.body { + padding-top: 1rem; +} + +a:hover { + color: inherit; + text-decoration: inherit; +} + +div.body a { + color: #006FFF; +} + /* Don't allow inline items try to clear themselves below the sidebar */ pre, div[class*="highlight-"], blockquote, blockquote::after, div.admonition::after { clear: none; @@ -78,14 +176,14 @@ pre, div[class*="highlight-"], blockquote, blockquote::after, div.admonition::af /* Sticky, scrolling sidebar. Height calc leaves room for header. */ div.sphinxsidebar { position: sticky; - top: 150px; + top: 96px; align-self: flex-start; - max-height: calc(100vh - 150px); + max-height: calc(100vh - 96px); overflow-y: auto; } div.sphinxsidebarwrapper { - padding-top: 6px; + padding-top: 1rem; } /* Hide the redundant 'description' tagline */ @@ -98,13 +196,24 @@ div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar h5, div.sphinxsidebar h6, -div.body h2, -div.body h3, -div.body h4, -div.body h5 { - font-family: "Public Sans", "sans-serif"; +div.document h2, +div.document h3, +div.document h4, +div.document h5 { + font-family: "Public Sans", "sans-serif" !important; + text-transform: none !important; + letter-spacing: 0 !important; } +/* hide the word "Navigation" because people know what links are */ +div.sphinxsidebarwrapper > h3 { + display: none; +} + +/* restate header sizes to avoid conflict from inline style in footer */ +div.document h3 { font-size: 150% !important; } +div.document h4 { font-size: 130% !important; } + /* Links need an extra two pixels of padding to compensate between body font height being 1em and code font height being 0.9em */ a.reference { @@ -209,12 +318,20 @@ div.body p.caption { font-size: 22px; } -ul { - /* margin-left: 0; */ +div.body ul, div.body ol { + margin: 10px 0 10px 30px; font-family: "Public Sans", "sans-serif"; } -ul ul { +div.body ul { + list-style-type: disc; +} + +div.body ul p, div.body ol p { + margin-bottom: 0; +} + +div.body ul ul { list-style-type: circle; margin-left: 30px; font-family: "Public Sans", "sans-serif"; @@ -280,3 +397,9 @@ div.warning { background-color: #f7e0e0; border: none; } + +/* Tabs also in Public Sans */ + +.sphinx-tabs-tab { + font-family: "Public Sans", "sans-serif" !important; +} \ No newline at end of file diff --git a/api/docs/templates/v2/layout.html b/api/docs/templates/v2/layout.html index fbc6e860eaf..fd795d94c38 100644 --- a/api/docs/templates/v2/layout.html +++ b/api/docs/templates/v2/layout.html @@ -31,1015 +31,7 @@ {%- if theme_fixed_sidebar|lower == 'true' %} @@ -1061,116 +53,8 @@ {%- else %} {{ super() }} {%- endif %} {%- endblock %} {%- block footer %} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/api/docs/templates/v2/remote-nav.html b/api/docs/templates/v2/remote-nav.html new file mode 100644 index 00000000000..7dc44e55804 --- /dev/null +++ b/api/docs/templates/v2/remote-nav.html @@ -0,0 +1,965 @@ + + + + + + + + + + + +Remote Nav - Opentrons + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + diff --git a/api/docs/v2/pipettes/characteristics.rst b/api/docs/v2/pipettes/characteristics.rst index 8aaf8751dd0..9203dd81816 100644 --- a/api/docs/v2/pipettes/characteristics.rst +++ b/api/docs/v2/pipettes/characteristics.rst @@ -158,18 +158,18 @@ These flow rate properties operate independently. This means you can specify dif Let's tell the robot to aspirate, dispense, and blow out the liquid using default flow rates. Notice how you don't need to specify a ``flow_rate`` attribute to use the defaults:: - pipette.aspirate(200, plate["A1"]) # 160 µL/s - pipette.dispense(200, plate["A2"]) # 160 µL/s - pipette.blow_out() # 80 µL/s + pipette.aspirate(200, plate["A1"]) # 716 µL/s + pipette.dispense(200, plate["A2"]) # 716 µL/s + pipette.blow_out() # 716 µL/s Now let's change the flow rates for each action:: pipette.flow_rate.aspirate = 50 pipette.flow_rate.dispense = 100 - pipette.flow_rate.blow_out = 75 + pipette.flow_rate.blow_out = 300 pipette.aspirate(200, plate["A1"]) # 50 µL/s pipette.dispense(200, plate["A2"]) # 100 µL/s - pipette.blow_out() # 75 µL/s + pipette.blow_out() # 300 µL/s These flow rates will remain in effect until you change the ``flow_rate`` attribute again *or* call ``configure_for_volume()``. Calling ``configure_for_volume()`` always resets all pipette flow rates to the defaults for the mode that it sets. @@ -184,7 +184,7 @@ These flow rates will remain in effect until you change the ``flow_rate`` attrib Flex Pipette Flow Rates ----------------------- -The default flow rates for Flex pipettes depend on the maximum volume of the pipette and the capacity of the currently attached tip. For each pipette–tip configuration, the default flow rate is the same for aspirate, dispense, and blowout actions. +Flex pipette flow rates depend on pipette volume and tip capacity. Each pipette–tip combination has a default flow rate for aspirating, dispensing, and blowing out liquid. When using a 50 µL pipette, you should only use 50 µL tips. .. list-table:: :header-rows: 1 @@ -193,7 +193,7 @@ The default flow rates for Flex pipettes depend on the maximum volume of the pip - Tip Capacity (µL) - Flow Rate (µL/s) * - 50 µL (1- and 8-channel) - - All capacities + - 50 - 57 * - 1000 µL (1-, 8-, and 96-channel) - 50 diff --git a/api/docs/v2/pipettes/partial_tip_pickup.rst b/api/docs/v2/pipettes/partial_tip_pickup.rst index e799d25554f..9890cc7d345 100644 --- a/api/docs/v2/pipettes/partial_tip_pickup.rst +++ b/api/docs/v2/pipettes/partial_tip_pickup.rst @@ -183,10 +183,10 @@ The ``start`` parameter sets the first and only nozzle used in the configuration - | Back to front, left to right | (A1 through H1, A2 through H2, …) -Since they follow the same pickup order as a single-channel pipette, Opentrons recommends using the following configurations: +.. warning:: + In certain conditions, tips in adjacent columns may cling to empty nozzles during single-tip pickup. You can avoid this by overriding automatic tip tracking to pick up tips row by row, rather than column by column. The code sample below demonstrates how to pick up tips this way. -- For 8-channel pipettes, ``start="H1"``. -- For 96-channel pipettes, ``start="H12"``. + However, as with all partial tip layouts, be careful that you don't place the pipette in a position where it overlaps more tips than intended. Here is the start of a protocol that imports the ``SINGLE`` and ``ALL`` layout constants, loads an 8-channel pipette, and sets it to pick up a single tip. @@ -210,21 +210,22 @@ Here is the start of a protocol that imports the ``SINGLE`` and ``ALL`` layout c ) pipette.configure_nozzle_layout( style=SINGLE, - start="H12", - tip_racks=[partial_rack] + start="H1" ) .. versionadded:: 2.20 -Since this configuration uses ``start="H12"``, it will pick up tips in the usual order:: +To pick up tips row by row, first construct a list of all wells in the tip rack ordered from A1, A2 … H11, H12. One way to do this is to use :py:func:`sum` to flatten the list of lists returned by :py:meth:`.Labware.rows`:: - pipette.pick_up_tip() # picks up A1 from tip rack - pipette.drop_tip() - pipette.pick_up_tip() # picks up B1 from tip rack + tips_by_row = sum(partial_rack.rows(), []) -.. note:: +Then ``pop`` items from the front of the list (index 0) and pass them as the ``location`` of :py:meth:`.pick_up_tip`:: - You can pick up tips row by row, rather than column by column, by specifying a location for :py:meth:`.pick_up_tip` each time you use it in ``SINGLE`` configuration. However, as with all partial tip layouts, be careful that you don't place the pipette in a position where it overlaps more tips than intended. + # pick up A1 from tip rack + pipette.pick_up_tip(location=tips_by_row.pop(0)) + pipette.drop_tip() + # pick up A2 from tip rack + pipette.pick_up_tip(location=tips_by_row.pop(0)) Partial Column Layout @@ -232,7 +233,7 @@ Partial Column Layout Partial column pickup is available on 8-channel pipettes only. Partial columns contain 2 to 7 consecutive tips in a single column. The pipette always picks up partial columns with its frontmost nozzles (``start="H1"``). -To specify the number of tips to pick up, add the ``end`` parameter when calling :py:meth:`.configure_nozzle_layout`. Use the chart below to determine the end row (G through B) for your desired number of tips. The end column should be the same as your start column (1 or 12). +To specify the number of tips to pick up, add the ``end`` parameter when calling :py:meth:`.configure_nozzle_layout`. Use the chart below to determine the ending nozzle (G1 through B1) for your desired number of tips. .. list-table:: :stub-columns: 1 @@ -244,16 +245,21 @@ To specify the number of tips to pick up, add the ``end`` parameter when calling - 5 - 6 - 7 - * - ``end`` row - - G - - F - - E - - D - - C - - B + * - ``end`` nozzle + - G1 + - F1 + - E1 + - D1 + - C1 + - B1 When picking up 3, 5, 6, or 7 tips, extra tips will be left at the front of each column. You can use these tips with a different nozzle configuration, or you can manually re-rack them at the end of your protocol for future use. +.. warning:: + In certain conditions, tips in adjacent columns may cling to empty nozzles during partial-column pickup. You can avoid this by overriding automatic tip tracking to pick up tips row by row, rather than column by column. The code sample below demonstrates how to pick up tips this way. + + However, as with all partial tip layouts, be careful that you don't place the pipette in a position where it overlaps more tips than intended. + Here is the start of a protocol that imports the ``PARTIAL_COLUMN`` and ``ALL`` layout constants, loads an 8-channel pipette, and sets it to pick up four tips: .. code-block:: python @@ -274,21 +280,24 @@ Here is the start of a protocol that imports the ``PARTIAL_COLUMN`` and ``ALL`` pipette.configure_nozzle_layout( style=PARTIAL_COLUMN, start="H1", - end="E1", - tip_racks=[partial_rack] + end="E1" ) .. versionadded:: 2.20 -This configuration will pick up tips from the back half of column 1, then the front half of column 1, then the back half of column 2, and so on:: +When pipetting in partial column configuration, remember that *the frontmost channel of the pipette is its primary channel*. To pick up tips across the back half of the rack, then across the front half of the rack, construct a list of that includes all and only the wells in row D and row H:: - pipette.pick_up_tip() # picks up A1-D1 from tip rack - pipette.drop_tip() - pipette.pick_up_tip() # picks up E1-H1 from tip rack + tips_by_row = partial_rack.rows_by_name()["D"] + partial_rack.rows_by_name()["H"] + +Then ``pop`` items from the front of the list (index 0) and pass them as the ``location`` of :py:meth:`.pick_up_tip`:: + + # pick up A1-D1 from tip rack + pipette.pick_up_tip(location=tips_by_row.pop(0)) pipette.drop_tip() - pipette.pick_up_tip() # picks up A2-D2 from tip rack + # pick up A2-D2 from tip rack + pipette.pick_up_tip(location=tips_by_row.pop(0)) -When handling liquids in partial column configuration, remember that *the frontmost channel of the pipette is its primary channel*. For example, to use the same configuration as above to transfer liquid from wells A1–D1 to wells A2–D2 on a plate, you must use the wells in row D as the source and destination targets:: +To use the same configuration as above to transfer liquid from wells A1–D1 to wells A2–D2 on a plate, you must use the wells in row D as the source and destination targets:: # pipette in 4-nozzle partial column layout pipette.transfer( @@ -361,14 +370,58 @@ This keeps tip tracking consistent across each type of pickup. And it reduces th Tip Pickup and Conflicts ======================== -During partial tip pickup, pipettes move into spaces above adjacent slots. To avoid crashes, the API prevents you from performing partial tip pickup when there is tall labware in these spaces. The current nozzle layout determines which labware can safely occupy adjacent slots. +During partial tip pickup, the pipette moves into spaces above adjacent slots. To avoid crashes, the API prevents you from performing partial tip pickup in locations where the pipette could collide with the outer edges of the robot or labware in the working area. The current nozzle layout, pickup or pipetting location, and adjacent labware determine whether a particular pipetting action is safe to perform. -The API will raise errors for potential labware crashes when using a partial nozzle configuration. Nevertheless, it's a good idea to do the following when working with partial tip pickup: +The API will raise errors for potential crashes when using a partial nozzle configuration. Nevertheless, it's a good idea to do the following when working with partial tip pickup: - Plan your deck layout carefully. Make a diagram and visualize everywhere the pipette will travel. - - Simulate your protocol and compare the run preview to your expectations of where the pipette will travel. + - Simulate your protocol and compare the output to your expectations of where the pipette will travel. - Perform a dry run with only tip racks on the deck. Have the Emergency Stop Pendant handy in case you see an impending crash. +Deck Extents +------------ + +When using partial nozzle configurations around the back, right, and front edges of the deck, there are limitations on how far the pipette can move beyond the outer edge of the deck slot. The API will raise an error if you try to pipette beyond these outer `extents` of the working area. + +.. tip:: + There are no extents-related limitations on slots B1, B2, C1, and C2. When performing partial pickup and pipetting in these slots, you only have to consider :ref:`possible labware conflicts `. + +One way to think of deck extents is in terms of where you can pick up tips or pipette to a 96-well plate loaded in a given slot. These limitations only apply when using a layout that places the pipette further towards the windows of the robot than an ``ALL`` layout would. For example, using a ``ROW`` layout with the frontmost nozzles of the 96-channel pipette, it will never move farther forward than the H row of a labware in slots D1–D3. But using a ``ROW`` layout with the backmost nozzles would bring it farther forward — it could collide with the front window, except that the API prevents it. + +The following table summarizes the limitations in place along each side of the deck. + +.. list-table:: + :header-rows: 1 + + * - Deck slots + - Nozzle configuration + - Inaccessible wells + * - A1–D1 (left edge) + - Rightmost column + - None (all wells accessible) + * - A1–D3 (back edge) + - Frontmost row + - Rows A–G + * - A3–D3 (right edge) + - Leftmost column + - Columns 11–12 + * - D1–D3 (front edge) + - Backmost row + - Rows F–H + +To visualize these limitations, the below deck map shades all wells that have a single limitation in light blue, and all wells that have two limitations in dark blue. + +.. image:: ../../img/partial-pickup-deck-extents.png + +Multiple limitations occur when you use a ``SINGLE`` configuration that uses the innermost corner nozzle, with respect to the pipette's position on the deck. For example, using nozzle A1 on the 96-channel pipette has multiple limitations in slot D3. + +Additionally, column A of plates loaded on a Thermocycler Module is inaccessible by the rightmost nozzles of the 96-channel pipette. Although the API treats such plates as being in slot A1, the physical location of a plate on the Thermocycler is slightly further left than a plate loaded directly on the slot. + +.. _partial-labware-conflicts: + +Arranging Labware +----------------- + For column pickup, Opentrons recommends using the nozzles in column 12 of the pipette:: pipette.configure_nozzle_layout( diff --git a/api/release-notes-internal.md b/api/release-notes-internal.md index 6ddd85c885b..2d99270edc2 100644 --- a/api/release-notes-internal.md +++ b/api/release-notes-internal.md @@ -2,6 +2,10 @@ For more details about this release, please see the full [technical change log][ [technical change log]: https://github.com/Opentrons/opentrons/releases +## Internal Release 2.2.0-alpha.0 + +This internal release, pulled from the `edge` branch, contains features being developed for 8.2.0. It's for internal testing only. + ## Internal Release 2.0.0-alpha.4 This internal release, pulled from the `edge` branch, contains features being developed for 8.0.0. It's for internal testing only. There are no changes to `buildroot`, `ot3-firmware`, or `oe-core` since the last internal release. diff --git a/api/release-notes.md b/api/release-notes.md index 8664eac3f8d..aad0cadea7a 100644 --- a/api/release-notes.md +++ b/api/release-notes.md @@ -24,6 +24,12 @@ Welcome to the v8.0.0 release of the Opentrons robot software! - Provides more partial tip pickup configurations. All multi-channel pipettes now support single and partial column pickup, and the Flex 96-channel pipette now supports row pickup. - Improves homing behavior when a Flex protocol completes or is canceled with liquid-filled tips attached to the pipette. +### Known Issues + +- During single-tip or partial-column pickup with a multi-channel pipette, tips in adjacent columns may cling to empty nozzles. Pick up tips row by row, rather than column by column, to avoid this. +- Protocol analysis and `opentrons_simulate` do not raise an error when a protocol tries to detect liquid with a pipette nozzle configuration that doesn't contain a pressure sensor (single-tip pickup with A12 or H1). Avoid using the A12 and H1 nozzles for single-tip pickup if you need to detect liquid presence within wells. +- `opentrons_simulate` describes motion to wells only with respect to the primary channel, regardless of the current pipette nozzle configuration. + --- ## Opentrons Robot Software Changes in 7.5.0 diff --git a/api/src/opentrons/cli/analyze.py b/api/src/opentrons/cli/analyze.py index 0b08b20e17e..f311adce402 100644 --- a/api/src/opentrons/cli/analyze.py +++ b/api/src/opentrons/cli/analyze.py @@ -23,8 +23,14 @@ ) import logging import sys +import json -from opentrons.protocol_engine.types import RunTimeParameter, EngineStatus +from opentrons.protocol_engine.types import ( + RunTimeParameter, + CSVRuntimeParamPaths, + PrimitiveRunTimeParamValuesType, + EngineStatus, +) from opentrons.protocols.api_support.types import APIVersion from opentrons.protocol_reader import ( ProtocolReader, @@ -104,8 +110,22 @@ class _Output: type=click.Choice(["DEBUG", "INFO", "WARNING", "ERROR"], case_sensitive=False), default="WARNING", ) +@click.option( + "--rtp-values", + help="Serialized JSON of runtime parameter variable names to values.", + default="{}", + type=str, +) +@click.option( + "--rtp-files", + help="Serialized JSON of runtime parameter variable names to file paths.", + default="{}", + type=str, +) def analyze( files: Sequence[Path], + rtp_values: str, + rtp_files: str, json_output: Optional[IO[bytes]], human_json_output: Optional[IO[bytes]], log_output: str, @@ -125,7 +145,7 @@ def analyze( try: with _capture_logs(log_output, log_level): - sys.exit(run(_analyze, files, outputs, check)) + sys.exit(run(_analyze, files, rtp_values, rtp_files, outputs, check)) except click.ClickException: raise except Exception as e: @@ -194,6 +214,37 @@ def _get_input_files(files_and_dirs: Sequence[Path]) -> List[Path]: return results +def _get_runtime_parameter_values( + serialized_rtp_values: str, +) -> PrimitiveRunTimeParamValuesType: + rtp_values = {} + try: + for variable_name, value in json.loads(serialized_rtp_values).items(): + if not isinstance(value, (bool, int, float, str)): + raise click.BadParameter( + f"Runtime parameter '{value}' is not of allowed type boolean, integer, float or string", + param_hint="--rtp-values", + ) + rtp_values[variable_name] = value + except json.JSONDecodeError as error: + raise click.BadParameter( + f"JSON decode error: {error}", param_hint="--rtp-values" + ) + return rtp_values + + +def _get_runtime_parameter_paths(serialized_rtp_files: str) -> CSVRuntimeParamPaths: + try: + return { + variable_name: Path(path_string) + for variable_name, path_string in json.loads(serialized_rtp_files).items() + } + except json.JSONDecodeError as error: + raise click.BadParameter( + f"JSON decode error: {error}", param_hint="--rtp-files" + ) + + R = TypeVar("R") @@ -238,7 +289,11 @@ def _convert_exc() -> Iterator[EnumeratedError]: ) -async def _do_analyze(protocol_source: ProtocolSource) -> RunResult: +async def _do_analyze( + protocol_source: ProtocolSource, + rtp_values: PrimitiveRunTimeParamValuesType, + rtp_paths: CSVRuntimeParamPaths, +) -> RunResult: orchestrator = await create_simulating_orchestrator( robot_type=protocol_source.robot_type, protocol_config=protocol_source.config @@ -247,8 +302,8 @@ async def _do_analyze(protocol_source: ProtocolSource) -> RunResult: await orchestrator.load( protocol_source=protocol_source, parse_mode=ParseMode.NORMAL, - run_time_param_values=None, - run_time_param_paths=None, + run_time_param_values=rtp_values, + run_time_param_paths=rtp_paths, ) except Exception as error: err_id = "analysis-setup-error" @@ -285,9 +340,16 @@ async def _do_analyze(protocol_source: ProtocolSource) -> RunResult: async def _analyze( - files_and_dirs: Sequence[Path], outputs: Sequence[_Output], check: bool + files_and_dirs: Sequence[Path], + rtp_values: str, + rtp_files: str, + outputs: Sequence[_Output], + check: bool, ) -> int: input_files = _get_input_files(files_and_dirs) + parsed_rtp_values = _get_runtime_parameter_values(rtp_values) + rtp_paths = _get_runtime_parameter_paths(rtp_files) + try: protocol_source = await ProtocolReader().read_saved( files=input_files, @@ -296,7 +358,7 @@ async def _analyze( except ProtocolFilesInvalidError as error: raise click.ClickException(str(error)) - analysis = await _do_analyze(protocol_source) + analysis = await _do_analyze(protocol_source, parsed_rtp_values, rtp_paths) return_code = _get_return_code(analysis) if not outputs: diff --git a/api/src/opentrons/drivers/absorbance_reader/abstract.py b/api/src/opentrons/drivers/absorbance_reader/abstract.py index 6dc403fdff9..600497cbd6d 100644 --- a/api/src/opentrons/drivers/absorbance_reader/abstract.py +++ b/api/src/opentrons/drivers/absorbance_reader/abstract.py @@ -1,6 +1,7 @@ from abc import ABC, abstractmethod -from typing import Dict, List, Tuple +from typing import Dict, List, Optional, Tuple from opentrons.drivers.types import ( + ABSMeasurementMode, AbsorbanceReaderLidStatus, AbsorbanceReaderDeviceState, AbsorbanceReaderPlatePresence, @@ -32,11 +33,18 @@ async def get_available_wavelengths(self) -> List[int]: ... @abstractmethod - async def get_single_measurement(self, wavelength: int) -> List[float]: + async def initialize_measurement( + self, + wavelengths: List[int], + mode: ABSMeasurementMode = ABSMeasurementMode.SINGLE, + reference_wavelength: Optional[int] = None, + ) -> None: + """Initialize measurement for the device in single or multi mode for the given wavelengths""" ... @abstractmethod - async def initialize_measurement(self, wavelength: int) -> None: + async def get_measurement(self) -> List[List[float]]: + """Gets one or more measurements based on the current configuration.""" ... @abstractmethod diff --git a/api/src/opentrons/drivers/absorbance_reader/async_byonoy.py b/api/src/opentrons/drivers/absorbance_reader/async_byonoy.py index 6f3ab10afcd..dc88c1b2dec 100644 --- a/api/src/opentrons/drivers/absorbance_reader/async_byonoy.py +++ b/api/src/opentrons/drivers/absorbance_reader/async_byonoy.py @@ -3,18 +3,20 @@ import re from concurrent.futures.thread import ThreadPoolExecutor from functools import partial -from typing import Optional, List, Dict, Tuple +from typing import Any, Optional, List, Dict, Tuple from .hid_protocol import ( AbsorbanceHidInterface as AbsProtocol, ErrorCodeNames, DeviceStateNames, SlotStateNames, + MeasurementConfig, ) from opentrons.drivers.types import ( AbsorbanceReaderLidStatus, AbsorbanceReaderPlatePresence, AbsorbanceReaderDeviceState, + ABSMeasurementMode, ) from opentrons.drivers.rpi_drivers.types import USBPort from opentrons.hardware_control.modules.errors import AbsorbanceReaderDisconnectedError @@ -22,7 +24,7 @@ SN_PARSER = re.compile(r'ATTRS{serial}=="(?P.+?)"') VERSION_PARSER = re.compile(r"Absorbance (?PV\d+\.\d+\.\d+)") -SERIAL_PARSER = re.compile(r"SN: (?PBYO[A-Z]{3}[0-9]{5})") +SERIAL_PARSER = re.compile(r"(?PBYO[A-Z]{3}[0-9]{5})") class AsyncByonoy: @@ -72,13 +74,13 @@ async def create( loop = loop or asyncio.get_running_loop() executor = ThreadPoolExecutor(max_workers=1) - import pybyonoy_device_library as byonoy # type: ignore[import-not-found] + import byonoy_devices as byonoy # type: ignore[import-not-found] interface: AbsProtocol = byonoy device_sn = cls.serial_number_from_port(usb_port.name) found: List[AbsProtocol.Device] = await loop.run_in_executor( - executor=executor, func=byonoy.byonoy_available_devices + executor=executor, func=byonoy.available_devices ) device = cls.match_device_with_sn(device_sn, found) @@ -110,7 +112,7 @@ def __init__( self._loop = loop self._supported_wavelengths: Optional[list[int]] = None self._device_handle: Optional[int] = None - self._current_config: Optional[AbsProtocol.MeasurementConfig] = None + self._current_config: Optional[MeasurementConfig] = None async def open(self) -> bool: """ @@ -121,7 +123,7 @@ async def open(self) -> bool: err, device_handle = await self._loop.run_in_executor( executor=self._executor, - func=partial(self._interface.byonoy_open_device, self._device), + func=partial(self._interface.open_device, self._device), ) self._raise_if_error(err.name, f"Error opening device: {err}") self._device_handle = device_handle @@ -132,7 +134,7 @@ async def close(self) -> None: handle = self._verify_device_handle() await self._loop.run_in_executor( executor=self._executor, - func=partial(self._interface.byonoy_free_device, handle), + func=partial(self._interface.free_device, handle), ) self._device_handle = None @@ -143,7 +145,7 @@ async def is_open(self) -> bool: handle = self._verify_device_handle() return await self._loop.run_in_executor( executor=self._executor, - func=partial(self._interface.byonoy_device_open, handle), + func=partial(self._interface.device_open, handle), ) async def get_device_information(self) -> Dict[str, str]: @@ -151,7 +153,7 @@ async def get_device_information(self) -> Dict[str, str]: handle = self._verify_device_handle() err, device_info = await self._loop.run_in_executor( executor=self._executor, - func=partial(self._interface.byonoy_get_device_information, handle), + func=partial(self._interface.get_device_information, handle), ) self._raise_if_error(err.name, f"Error getting device information: {err}") serial_match = SERIAL_PARSER.match(device_info.sn) @@ -170,7 +172,7 @@ async def get_device_status(self) -> AbsorbanceReaderDeviceState: handle = self._verify_device_handle() err, status = await self._loop.run_in_executor( executor=self._executor, - func=partial(self._interface.byonoy_get_device_status, handle), + func=partial(self._interface.get_device_status, handle), ) self._raise_if_error(err.name, f"Error getting device status: {err}") return self.convert_device_state(status.name) @@ -182,11 +184,9 @@ async def update_firmware(self, firmware_file_path: str) -> Tuple[bool, str]: return False, f"Firmware file not found: {firmware_file_path}" err = await self._loop.run_in_executor( executor=self._executor, - func=partial( - self._interface.byonoy_update_device, handle, firmware_file_path - ), + func=partial(self._interface.update_device, handle, firmware_file_path), ) - if err.name != "BYONOY_ERROR_NO_ERROR": + if err.name != "NO_ERROR": return False, f"Byonoy update failed with error: {err}" return True, "" @@ -195,7 +195,7 @@ async def get_device_uptime(self) -> int: handle = self._verify_device_handle() err, uptime = await self._loop.run_in_executor( executor=self._executor, - func=partial(self._interface.byonoy_get_device_uptime, handle), + func=partial(self._interface.get_device_uptime, handle), ) self._raise_if_error(err.name, "Error getting device uptime: ") return uptime @@ -205,7 +205,7 @@ async def get_lid_status(self) -> AbsorbanceReaderLidStatus: handle = self._verify_device_handle() err, lid_info = await self._loop.run_in_executor( executor=self._executor, - func=partial(self._interface.byonoy_get_device_parts_aligned, handle), + func=partial(self._interface.get_device_parts_aligned, handle), ) self._raise_if_error(err.name, f"Error getting lid status: {err}") return ( @@ -217,38 +217,38 @@ async def get_supported_wavelengths(self) -> list[int]: handle = self._verify_device_handle() err, wavelengths = await self._loop.run_in_executor( executor=self._executor, - func=partial( - self._interface.byonoy_abs96_get_available_wavelengths, handle - ), + func=partial(self._interface.abs96_get_available_wavelengths, handle), ) self._raise_if_error(err.name, "Error getting available wavelengths: ") self._supported_wavelengths = wavelengths return wavelengths - async def get_single_measurement(self, wavelength: int) -> List[float]: - """Get a single measurement based on the current configuration.""" + async def get_measurement(self) -> List[List[float]]: + """Gets one or more measurements based on the current configuration.""" handle = self._verify_device_handle() assert ( - self._current_config - and self._current_config.sample_wavelength == wavelength - ) + self._current_config is not None + ), "Cannot get measurement without initializing." + measure_func: Any = self._interface.abs96_single_measure + if isinstance(self._current_config, AbsProtocol.MultiMeasurementConfig): + measure_func = self._interface.abs96_multiple_measure err, measurements = await self._loop.run_in_executor( executor=self._executor, func=partial( - self._interface.byonoy_abs96_single_measure, + measure_func, handle, self._current_config, ), ) - self._raise_if_error(err.name, f"Error getting single measurement: {err}") - return measurements + self._raise_if_error(err.name, f"Error getting measurement: {err}") + return measurements if isinstance(measurements[0], List) else [measurements] # type: ignore async def get_plate_presence(self) -> AbsorbanceReaderPlatePresence: """Get the state of the plate for the reader.""" handle = self._verify_device_handle() err, presence = await self._loop.run_in_executor( executor=self._executor, - func=partial(self._interface.byonoy_get_device_slot_status, handle), + func=partial(self._interface.get_device_slot_status, handle), ) self._raise_if_error(err.name, f"Error getting slot status: {err}") return self.convert_plate_presence(presence.name) @@ -256,40 +256,54 @@ async def get_plate_presence(self) -> AbsorbanceReaderPlatePresence: def _get_supported_wavelengths(self) -> List[int]: handle = self._verify_device_handle() wavelengths: List[int] - err, wavelengths = self._interface.byonoy_abs96_get_available_wavelengths( - handle - ) + err, wavelengths = self._interface.abs96_get_available_wavelengths(handle) self._raise_if_error(err.name, f"Error getting available wavelengths: {err}") self._supported_wavelengths = wavelengths return wavelengths - def _initialize_measurement(self, conf: AbsProtocol.MeasurementConfig) -> None: + def _initialize_measurement(self, conf: MeasurementConfig) -> None: handle = self._verify_device_handle() - err = self._interface.byonoy_abs96_initialize_single_measurement(handle, conf) + if isinstance(conf, AbsProtocol.SingleMeasurementConfig): + err = self._interface.abs96_initialize_single_measurement(handle, conf) + else: + err = self._interface.abs96_initialize_multiple_measurement(handle, conf) self._raise_if_error(err.name, f"Error initializing measurement: {err}") self._current_config = conf - def _set_sample_wavelength(self, wavelength: int) -> AbsProtocol.MeasurementConfig: + def _initialize( + self, + mode: ABSMeasurementMode, + wavelengths: List[int], + reference_wavelength: Optional[int] = None, + ) -> None: if not self._supported_wavelengths: self._get_supported_wavelengths() assert self._supported_wavelengths - if wavelength in self._supported_wavelengths: - conf = self._interface.ByonoyAbs96SingleMeasurementConfig() - conf.sample_wavelength = wavelength - return conf + conf: MeasurementConfig + if set(wavelengths).issubset(self._supported_wavelengths): + if mode == ABSMeasurementMode.SINGLE: + conf = self._interface.Abs96SingleMeasurementConfig() + conf.sample_wavelength = wavelengths[0] or 0 + conf.reference_wavelength = reference_wavelength or 0 + else: + conf = self._interface.Abs96MultipleMeasurementConfig() + conf.sample_wavelengths = wavelengths else: raise ValueError( - f"Unsupported wavelength: {wavelength}, expected: {self._supported_wavelengths}" + f"Unsupported wavelength: {wavelengths}, expected: {self._supported_wavelengths}" ) - - def _initialize(self, wavelength: int) -> None: - conf = self._set_sample_wavelength(wavelength) self._initialize_measurement(conf) - async def initialize(self, wavelength: int) -> None: - """Initialize the device so we can start reading samples from it.""" + async def initialize( + self, + mode: ABSMeasurementMode, + wavelengths: List[int], + reference_wavelength: Optional[int] = None, + ) -> None: + """initialize the device so we can start reading samples from it.""" await self._loop.run_in_executor( - executor=self._executor, func=partial(self._initialize, wavelength) + executor=self._executor, + func=partial(self._initialize, mode, wavelengths, reference_wavelength), ) def _verify_device_handle(self) -> int: @@ -304,12 +318,12 @@ def _raise_if_error( msg: str = "Error occurred: ", ) -> None: if err_name in [ - "BYONOY_ERROR_DEVICE_CLOSED", - "BYONOY_ERROR_DEVICE_COMMUNICATION_FAILURE", - "BYONOY_ERROR_UNSUPPORTED_OPERATION", + "DEVICE_CLOSED", + "DEVICE_COMMUNICATION_FAILURE", + "UNSUPPORTED_OPERATION", ]: raise AbsorbanceReaderDisconnectedError(self._device.sn) - if err_name != "BYONOY_ERROR_NO_ERROR": + if err_name != "NO_ERROR": raise RuntimeError(msg, err_name) @staticmethod diff --git a/api/src/opentrons/drivers/absorbance_reader/driver.py b/api/src/opentrons/drivers/absorbance_reader/driver.py index be6fdaa5c15..5899fef89d0 100644 --- a/api/src/opentrons/drivers/absorbance_reader/driver.py +++ b/api/src/opentrons/drivers/absorbance_reader/driver.py @@ -4,11 +4,14 @@ from typing import Dict, Optional, List, Tuple, TYPE_CHECKING from opentrons.drivers.types import ( + ABSMeasurementMode, AbsorbanceReaderLidStatus, AbsorbanceReaderDeviceState, AbsorbanceReaderPlatePresence, ) -from opentrons.drivers.absorbance_reader.abstract import AbstractAbsorbanceReaderDriver +from opentrons.drivers.absorbance_reader.abstract import ( + AbstractAbsorbanceReaderDriver, +) from opentrons.drivers.rpi_drivers.types import USBPort if TYPE_CHECKING: @@ -60,12 +63,16 @@ async def get_lid_status(self) -> AbsorbanceReaderLidStatus: async def get_available_wavelengths(self) -> List[int]: return await self._connection.get_supported_wavelengths() - async def get_single_measurement(self, wavelength: int) -> List[float]: - # TODO (cb, 08-02-2024): The list of measurements for 96 wells is rotated 180 degrees (well A1 is where well H12 should be) this must be corrected - return await self._connection.get_single_measurement(wavelength) + async def initialize_measurement( + self, + wavelengths: List[int], + mode: ABSMeasurementMode = ABSMeasurementMode.SINGLE, + reference_wavelength: Optional[int] = None, + ) -> None: + await self._connection.initialize(mode, wavelengths, reference_wavelength) - async def initialize_measurement(self, wavelength: int) -> None: - await self._connection.initialize(wavelength) + async def get_measurement(self) -> List[List[float]]: + return await self._connection.get_measurement() async def get_status(self) -> AbsorbanceReaderDeviceState: return await self._connection.get_device_status() diff --git a/api/src/opentrons/drivers/absorbance_reader/hid_protocol.py b/api/src/opentrons/drivers/absorbance_reader/hid_protocol.py index 8816b2e2903..c418a652130 100644 --- a/api/src/opentrons/drivers/absorbance_reader/hid_protocol.py +++ b/api/src/opentrons/drivers/absorbance_reader/hid_protocol.py @@ -1,9 +1,11 @@ from typing import ( Dict, + Optional, Protocol, List, Literal, Tuple, + Union, runtime_checkable, TypeVar, ) @@ -11,28 +13,28 @@ Response = TypeVar("Response") ErrorCodeNames = Literal[ - "BYONOY_ERROR_NO_ERROR", - "BYONOY_ERROR_UNKNOWN_ERROR", - "BYONOY_ERROR_DEVICE_CLOSED", - "BYONOY_ERROR_INVALID_ARGUMENT", - "BYONOY_ERROR_NO_MEMORY", - "BYONOY_ERROR_UNSUPPORTED_OPERATION", - "BYONOY_ERROR_DEVICE_COMMUNICATION_FAILURE", - "BYONOY_ERROR_DEVICE_OPERATION_FAILED", - "BYONOY_ERROR_DEVICE_OPEN_PREFIX", - "BYONOY_ERROR_DEVICE_NOT_FOUND", - "BYONOY_ERROR_DEVICE_TOO_NEW", - "BYONOY_ERROR_DEVICE_ALREADY_OPEN", - "BYONOY_ERROR_FIRMWARE_UPDATE_ERROR_PREFIX", - "BYONOY_ERROR_FIRMWARE_UPDATE_FILE_NOT_FOUND", - "BYONOY_ERROR_FIRMWARE_UPDATE_FILE_NOT_VALID", - "BYONOY_ERROR_FIRMWARE_UPDATE_FAILED", - "BYONOY_ERROR_FILE_ERROR_PREFIX", - "BYONOY_ERROR_FILE_WRITE_ERROR", - "BYONOY_ERROR_MEASUTEMNT_ERROR_PREFIX", - "BYONOY_ERROR_MEASUTEMNT_SLOT_NOT_EMPTY", - "BYONOY_ERROR_NOT_INITIALIZED", - "BYONOY_ERROR_INTERNAL", + "NO_ERROR", + "UNKNOWN_ERROR", + "DEVICE_CLOSED", + "INVALID_ARGUMENT", + "NO_MEMORY", + "UNSUPPORTED_OPERATION", + "DEVICE_COMMUNICATION_FAILURE", + "DEVICE_OPERATION_FAILED", + "DEVICE_OPEN_PREFIX", + "DEVICE_NOT_FOUND", + "DEVICE_TOO_NEW", + "DEVICE_ALREADY_OPEN", + "FIRMWARE_UPDATE_ERROR_PREFIX", + "FIRMWARE_UPDATE_FILE_NOT_FOUND", + "FIRMWARE_UPDATE_FILE_NOT_VALID", + "FIRMWARE_UPDATE_FAILED", + "FILE_ERROR_PREFIX", + "FILE_WRITE_ERROR", + "MEASUTEMNT_ERROR_PREFIX", + "MEASUTEMNT_SLOT_NOT_EMPTY", + "NOT_INITIALIZED", + "INTERNAL", ] SlotStateNames = Literal[ @@ -69,8 +71,13 @@ class SlotState(Protocol): value: int @runtime_checkable - class MeasurementConfig(Protocol): + class SingleMeasurementConfig(Protocol): sample_wavelength: int + reference_wavelength: Optional[int] + + @runtime_checkable + class MultiMeasurementConfig(Protocol): + sample_wavelengths: List[int] @runtime_checkable class DeviceInfo(Protocol): @@ -84,60 +91,71 @@ class DeviceState(Protocol): name: DeviceStateNames value: int - def ByonoyAbs96SingleMeasurementConfig(self) -> MeasurementConfig: + def Abs96SingleMeasurementConfig(self) -> SingleMeasurementConfig: + ... + + def Abs96MultipleMeasurementConfig(self) -> MultiMeasurementConfig: ... - def byonoy_open_device(self, device: Device) -> Tuple[ErrorCode, int]: + def open_device(self, device: Device) -> Tuple[ErrorCode, int]: ... - def byonoy_free_device(self, device_handle: int) -> Tuple[ErrorCode, bool]: + def free_device(self, device_handle: int) -> Tuple[ErrorCode, bool]: ... - def byonoy_device_open(self, device_handle: int) -> bool: + def device_open(self, device_handle: int) -> bool: ... - def byonoy_get_device_information( + def get_device_information( self, device_handle: int ) -> Tuple[ErrorCode, DeviceInfo]: ... - def byonoy_update_device( - self, device_handle: int, firmware_file_path: str - ) -> ErrorCode: + def update_device(self, device_handle: int, firmware_file_path: str) -> ErrorCode: ... - def byonoy_get_device_status( - self, device_handle: int - ) -> Tuple[ErrorCode, DeviceState]: + def get_device_status(self, device_handle: int) -> Tuple[ErrorCode, DeviceState]: ... - def byonoy_get_device_uptime(self, device_handle: int) -> Tuple[ErrorCode, int]: + def get_device_uptime(self, device_handle: int) -> Tuple[ErrorCode, int]: ... - def byonoy_get_device_slot_status( - self, device_handle: int - ) -> Tuple[ErrorCode, SlotState]: + def get_device_slot_status(self, device_handle: int) -> Tuple[ErrorCode, SlotState]: ... - def byonoy_get_device_parts_aligned( - self, device_handle: int - ) -> Tuple[ErrorCode, bool]: + def get_device_parts_aligned(self, device_handle: int) -> Tuple[ErrorCode, bool]: ... - def byonoy_abs96_get_available_wavelengths( + def abs96_get_available_wavelengths( self, device_handle: int ) -> Tuple[ErrorCode, List[int]]: ... - def byonoy_abs96_initialize_single_measurement( - self, device_handle: int, conf: MeasurementConfig + def abs96_initialize_single_measurement( + self, device_handle: int, conf: SingleMeasurementConfig ) -> ErrorCode: ... - def byonoy_abs96_single_measure( - self, device_handle: int, conf: MeasurementConfig + def abs96_initialize_multiple_measurement( + self, device_handle: int, conf: MultiMeasurementConfig + ) -> ErrorCode: + ... + + def abs96_single_measure( + self, device_handle: int, conf: SingleMeasurementConfig ) -> Tuple[ErrorCode, List[float]]: ... - def byonoy_available_devices(self) -> List[Device]: + def abs96_multiple_measure( + self, device_handle: int, conf: MultiMeasurementConfig + ) -> Tuple[ErrorCode, List[List[float]]]: + ... + + def available_devices(self) -> List[Device]: ... + + +MeasurementConfig = Union[ + AbsorbanceHidInterface.SingleMeasurementConfig, + AbsorbanceHidInterface.MultiMeasurementConfig, +] diff --git a/api/src/opentrons/drivers/absorbance_reader/simulator.py b/api/src/opentrons/drivers/absorbance_reader/simulator.py index 6a2a0aa6228..c4d7af2c1eb 100644 --- a/api/src/opentrons/drivers/absorbance_reader/simulator.py +++ b/api/src/opentrons/drivers/absorbance_reader/simulator.py @@ -2,6 +2,7 @@ from opentrons.util.async_helpers import ensure_yield from opentrons.drivers.types import ( + ABSMeasurementMode, AbsorbanceReaderLidStatus, AbsorbanceReaderDeviceState, AbsorbanceReaderPlatePresence, @@ -54,11 +55,16 @@ async def get_available_wavelengths(self) -> List[int]: return [450, 570, 600, 650] @ensure_yield - async def get_single_measurement(self, wavelength: int) -> List[float]: - return [0.0] + async def get_measurement(self) -> List[List[float]]: + return [[0.0]] @ensure_yield - async def initialize_measurement(self, wavelength: int) -> None: + async def initialize_measurement( + self, + wavelengths: List[int], + mode: ABSMeasurementMode = ABSMeasurementMode.SINGLE, + reference_wavelength: Optional[int] = None, + ) -> None: pass @ensure_yield diff --git a/api/src/opentrons/drivers/types.py b/api/src/opentrons/drivers/types.py index a4047ca64da..f01001bdef8 100644 --- a/api/src/opentrons/drivers/types.py +++ b/api/src/opentrons/drivers/types.py @@ -1,6 +1,6 @@ """ Type definitions for modules in this tree """ from dataclasses import dataclass -from typing import Dict, NamedTuple, Optional +from typing import Any, Dict, List, NamedTuple, Optional from enum import Enum @@ -83,3 +83,25 @@ class AbsorbanceReaderDeviceState(str, Enum): OK = "ok" BROKEN_FW = "broken_fw" ERROR = "error" + + +class ABSMeasurementMode(Enum): + """The current mode configured for reading the Absorbance Reader.""" + + SINGLE = "single" + MULTI = "multi" + + +@dataclass +class ABSMeasurementConfig: + measure_mode: ABSMeasurementMode + sample_wavelengths: List[int] + reference_wavelength: Optional[int] + + @property + def data(self) -> Dict[str, Any]: + return { + "measureMode": self.measure_mode.value, + "sampleWavelengths": self.sample_wavelengths, + "referenceWavelength": self.reference_wavelength, + } diff --git a/api/src/opentrons/execute.py b/api/src/opentrons/execute.py index 1e8d3771f59..ade74b1aadd 100644 --- a/api/src/opentrons/execute.py +++ b/api/src/opentrons/execute.py @@ -609,8 +609,6 @@ def _run_file_non_pe( context.home() try: - # TODO (spp, 2024-03-18): use true run-time param overrides once enabled - # for cli protocol simulation/ execution execute_apiv2.run_protocol( protocol, context, run_time_parameters_with_overrides=None ) @@ -626,6 +624,7 @@ def _run_file_pe( """Run a protocol file with Protocol Engine.""" async def run(protocol_source: ProtocolSource) -> None: + # TODO (spp, 2024-03-18): use run-time param overrides once enabled for cli protocol execution hardware_api_wrapped = hardware_api.wrapped() protocol_engine = await create_protocol_engine( hardware_api=hardware_api_wrapped, diff --git a/api/src/opentrons/hardware_control/backends/flex_protocol.py b/api/src/opentrons/hardware_control/backends/flex_protocol.py index dfa6fd99ce4..6f3299cf92d 100644 --- a/api/src/opentrons/hardware_control/backends/flex_protocol.py +++ b/api/src/opentrons/hardware_control/backends/flex_protocol.py @@ -54,6 +54,10 @@ async def get_serial_number(self) -> Optional[str]: def restore_system_constraints(self) -> AsyncIterator[None]: ... + @asynccontextmanager + def grab_pressure(self, channels: int, mount: OT3Mount) -> AsyncIterator[None]: + ... + def update_constraints_for_gantry_load(self, gantry_load: GantryLoad) -> None: ... diff --git a/api/src/opentrons/hardware_control/backends/ot3controller.py b/api/src/opentrons/hardware_control/backends/ot3controller.py index ced7540d4df..84c95c8fbc4 100644 --- a/api/src/opentrons/hardware_control/backends/ot3controller.py +++ b/api/src/opentrons/hardware_control/backends/ot3controller.py @@ -161,6 +161,7 @@ capacitive_pass, liquid_probe, check_overpressure, + grab_pressure, ) from opentrons_hardware.hardware_control.rear_panel_settings import ( get_door_state, @@ -369,6 +370,14 @@ async def restore_system_constraints(self) -> AsyncIterator[None]: self._move_manager.update_constraints(old_system_constraints) log.debug(f"Restore previous system constraints: {old_system_constraints}") + @asynccontextmanager + async def grab_pressure( + self, channels: int, mount: OT3Mount + ) -> AsyncIterator[None]: + tool = axis_to_node(Axis.of_main_tool_actuator(mount)) + async with grab_pressure(channels, tool, self._messenger): + yield + def update_constraints_for_calibration_with_gantry_load( self, gantry_load: GantryLoad, diff --git a/api/src/opentrons/hardware_control/modules/absorbance_reader.py b/api/src/opentrons/hardware_control/modules/absorbance_reader.py index e68b535c4bc..da7c4746086 100644 --- a/api/src/opentrons/hardware_control/modules/absorbance_reader.py +++ b/api/src/opentrons/hardware_control/modules/absorbance_reader.py @@ -12,6 +12,8 @@ AbsorbanceReaderLidStatus, AbsorbanceReaderPlatePresence, AbsorbanceReaderDeviceState, + ABSMeasurementMode, + ABSMeasurementConfig, ) from opentrons.hardware_control.execution_manager import ExecutionManager @@ -194,13 +196,21 @@ def __init__( self._device_info = device_info self._reader = reader self._poller = poller + self._measurement_config: Optional[ABSMeasurementConfig] = None + self._device_status = AbsorbanceReaderStatus.IDLE self._error: Optional[str] = None self._reader.register_error_handler(self._enter_error_state) @property def status(self) -> AbsorbanceReaderStatus: - """Return some string describing status.""" - return AbsorbanceReaderStatus.IDLE + """Return some string describing the device status.""" + state = self._reader.device_state + if state not in [ + AbsorbanceReaderDeviceState.UNKNOWN, + AbsorbanceReaderDeviceState.OK, + ]: + return AbsorbanceReaderStatus.ERROR + return self._device_status @property def lid_status(self) -> AbsorbanceReaderLidStatus: @@ -210,6 +220,20 @@ def lid_status(self) -> AbsorbanceReaderLidStatus: def plate_presence(self) -> AbsorbanceReaderPlatePresence: return self._reader.plate_presence + @property + def uptime(self) -> int: + """Time in ms this device has been running for.""" + return self._reader.uptime + + @property + def supported_wavelengths(self) -> List[int]: + """The wavelengths in nm this plate reader supports.""" + return self._reader.supported_wavelengths + + @property + def measurement_config(self) -> Optional[ABSMeasurementConfig]: + return self._measurement_config + @property def device_info(self) -> Mapping[str, str]: """Return a dict of the module's static information (serial, etc)""" @@ -218,12 +242,17 @@ def device_info(self) -> Mapping[str, str]: @property def live_data(self) -> LiveData: """Return a dict of the module's dynamic information""" + conf = self._measurement_config.data if self._measurement_config else dict() return { "status": self.status.value, "data": { + "uptime": self.uptime, + "deviceStatus": self.status.value, "lidStatus": self.lid_status.value, "platePresence": self.plate_presence.value, - "sampleWavelength": 400, + "measureMode": conf.get("measureMode", ""), + "sampleWavelengths": conf.get("sampleWavelengths", []), + "referenceWavelength": conf.get("referenceWavelength", 0), }, } @@ -309,17 +338,32 @@ async def cleanup(self) -> None: """ await self.deactivate() - async def set_sample_wavelength(self, wavelength: int) -> None: - """Set the Absorbance Reader's active wavelength.""" - await self._driver.initialize_measurement(wavelength) - - async def start_measure(self, wavelength: int) -> List[float]: - """Initiate a single measurement.""" - return await self._driver.get_single_measurement(wavelength) + async def set_sample_wavelength( + self, + mode: ABSMeasurementMode, + wavelengths: List[int], + reference_wavelength: Optional[int] = None, + ) -> None: + """Set the Absorbance Reader's measurement mode and active wavelength.""" + if mode == ABSMeasurementMode.SINGLE: + assert ( + len(wavelengths) == 1 + ), "Cannot initialize single read mode with more than 1 wavelength." + + await self._driver.initialize_measurement(wavelengths, mode) + self._measurement_config = ABSMeasurementConfig( + measure_mode=mode, + sample_wavelengths=wavelengths, + reference_wavelength=reference_wavelength, + ) - async def get_current_wavelength(self) -> None: - """Get the Absorbance Reader's current active wavelength.""" - pass # TODO: implement + async def start_measure(self) -> List[List[float]]: + """Initiate a measurement depending on the measurement mode.""" + try: + self._device_status = AbsorbanceReaderStatus.MEASURING + return await self._driver.get_measurement() + finally: + self._device_status = AbsorbanceReaderStatus.IDLE async def get_current_lid_status(self) -> AbsorbanceReaderLidStatus: """Get the Absorbance Reader's current lid status.""" diff --git a/api/src/opentrons/hardware_control/modules/heater_shaker.py b/api/src/opentrons/hardware_control/modules/heater_shaker.py index e52de0bf49c..cc592d3c514 100644 --- a/api/src/opentrons/hardware_control/modules/heater_shaker.py +++ b/api/src/opentrons/hardware_control/modules/heater_shaker.py @@ -201,7 +201,6 @@ def device_info(self) -> Mapping[str, str]: @property def live_data(self) -> LiveData: return { - # TODO (spp, 2022-2-22): Revise what status includes "status": self.status.value, "data": { "temperatureStatus": self.temperature_status.value, diff --git a/api/src/opentrons/hardware_control/modules/thermocycler.py b/api/src/opentrons/hardware_control/modules/thermocycler.py index bcaac8650d9..4a1b2fe038b 100644 --- a/api/src/opentrons/hardware_control/modules/thermocycler.py +++ b/api/src/opentrons/hardware_control/modules/thermocycler.py @@ -2,7 +2,7 @@ import asyncio import logging -from typing import Callable, Optional, List, Dict, Mapping +from typing import Callable, Optional, List, Dict, Mapping, Union, cast from opentrons.drivers.rpi_drivers.types import USBPort from opentrons.drivers.types import ThermocyclerLidStatus, Temperature, PlateTemperature from opentrons.hardware_control.modules.lid_temp_status import LidTemperatureStatus @@ -363,6 +363,39 @@ async def cycle_temperatures( self.make_cancellable(task) await task + async def execute_profile( + self, + profile: List[Union[types.ThermocyclerCycle, types.ThermocyclerStep]], + volume: Optional[float] = None, + ) -> None: + """Begin a set temperature profile, with both repeating and non-repeating steps. + + Args: + profile: The temperature profile to follow. + volume: Optional volume + + Returns: None + """ + await self.wait_for_is_running() + self._total_cycle_count = 0 + self._total_step_count = 0 + self._current_cycle_index = 0 + self._current_step_index = 0 + for step_or_cycle in profile: + if "steps" in step_or_cycle: + # basically https://github.com/python/mypy/issues/14766 + this_cycle = cast(types.ThermocyclerCycle, step_or_cycle) + self._total_cycle_count += this_cycle["repetitions"] + self._total_step_count += ( + len(this_cycle["steps"]) * this_cycle["repetitions"] + ) + else: + self._total_step_count += 1 + self._total_cycle_count += 1 + task = self._loop.create_task(self._execute_profile(profile, volume)) + self.make_cancellable(task) + await task + async def set_lid_temperature(self, temperature: float) -> None: """Set the lid temperature in degrees Celsius""" await self.wait_for_is_running() @@ -574,7 +607,7 @@ async def _execute_cycles( self, steps: List[types.ThermocyclerStep], repetitions: int, - volume: Optional[float] = None, + volume: Optional[float], ) -> None: """ Execute cycles. @@ -592,6 +625,30 @@ async def _execute_cycles( self._current_step_index = step_idx + 1 # science starts at 1 await self._execute_cycle_step(step, volume) + async def _execute_profile( + self, + profile: List[Union[types.ThermocyclerCycle, types.ThermocyclerStep]], + volume: Optional[float], + ) -> None: + """ + Execute profiles. + + Profiles command a thermocycler pattern that can contain multiple cycles and out-of-cycle steps. + """ + self._current_cycle_index = 0 + self._current_step_index = 0 + for step_or_cycle in profile: + self._current_cycle_index += 1 + if "repetitions" in step_or_cycle: + # basically https://github.com/python/mypy/issues/14766 + this_cycle = cast(types.ThermocyclerCycle, step_or_cycle) + for rep in range(this_cycle["repetitions"]): + for step in this_cycle["steps"]: + self._current_step_index += 1 + await self._execute_cycle_step(step, volume) + else: + await self._execute_cycle_step(step_or_cycle, volume) + # TODO(mc, 2022-10-13): why does this exist? # Do the driver and poller really need to be disconnected? # Could we accomplish the same thing by latching the error state diff --git a/api/src/opentrons/hardware_control/modules/types.py b/api/src/opentrons/hardware_control/modules/types.py index c7b3c920c79..9b7c33058d4 100644 --- a/api/src/opentrons/hardware_control/modules/types.py +++ b/api/src/opentrons/hardware_control/modules/types.py @@ -3,6 +3,7 @@ from dataclasses import dataclass from typing import ( Dict, + List, NamedTuple, Callable, Any, @@ -38,6 +39,11 @@ class ThermocyclerStep(ThermocyclerStepBase, total=False): hold_time_minutes: float +class ThermocyclerCycle(TypedDict): + steps: List[ThermocyclerStep] + repetitions: int + + UploadFunction = Callable[[str, str, Dict[str, Any]], Awaitable[Tuple[bool, str]]] @@ -46,7 +52,7 @@ class ThermocyclerStep(ThermocyclerStepBase, total=False): class LiveData(TypedDict): status: str - data: Dict[str, Union[float, str, bool, None]] + data: Dict[str, Union[float, str, bool, List[int], None]] class ModuleType(str, Enum): diff --git a/api/src/opentrons/hardware_control/ot3api.py b/api/src/opentrons/hardware_control/ot3api.py index bea325cfb83..cdd69fc2f90 100644 --- a/api/src/opentrons/hardware_control/ot3api.py +++ b/api/src/opentrons/hardware_control/ot3api.py @@ -164,6 +164,7 @@ def _adjust_high_throughput_z_current(func: Wrapped) -> Wrapped: A decorator that temproarily and conditionally changes the active current (based on the axis input) before a function is executed and the cleans up afterwards """ + # only home and retract should be wrappeed by this decorator @wraps(func) async def wrapper(self: Any, axis: Axis, *args: Any, **kwargs: Any) -> Any: @@ -306,6 +307,12 @@ async def restore_system_constrants(self) -> AsyncIterator[None]: async with self._backend.restore_system_constraints(): yield + @contextlib.asynccontextmanager + async def grab_pressure(self, mount: OT3Mount) -> AsyncIterator[None]: + instrument = self._pipette_handler.get_pipette(mount) + async with self._backend.grab_pressure(instrument.channels, mount): + yield + def _update_door_state(self, door_state: DoorState) -> None: mod_log.info(f"Updating the window switch status: {door_state}") self.door_state = door_state @@ -933,7 +940,6 @@ async def home_gear_motors(self) -> None: current_pos_float > self._config.safe_home_distance and current_pos_float < max_distance ): - # move toward home until a safe distance await self._backend.tip_action( origin={Axis.Q: current_pos_float}, @@ -1811,7 +1817,8 @@ async def tip_pickup_moves( increment: Optional[float] = None, ) -> None: """This is a slightly more barebones variation of pick_up_tip. This is only the motor routine - directly involved in tip pickup, and leaves any state updates and plunger moves to the caller.""" + directly involved in tip pickup, and leaves any state updates and plunger moves to the caller. + """ realmount = OT3Mount.from_mount(mount) instrument = self._pipette_handler.get_pipette(realmount) @@ -2654,7 +2661,7 @@ async def _liquid_probe_pass( cp = self.critical_point_for(mount, None) return deck_end_z + offset.z + cp.z - async def liquid_probe( + async def liquid_probe( # noqa: C901 self, mount: Union[top_types.Mount, OT3Mount], max_z_dist: float, @@ -2683,6 +2690,16 @@ async def liquid_probe( self._pipette_handler.ready_for_tip_action( instrument, HardwareAction.LIQUID_PROBE, checked_mount ) + # default to using all available sensors + if probe: + checked_probe = probe + else: + checked_probe = ( + InstrumentProbeType.BOTH + if instrument.channels > 1 + else InstrumentProbeType.PRIMARY + ) + if not probe_settings: probe_settings = deepcopy(self.config.liquid_sense) @@ -2774,7 +2791,7 @@ async def prep_plunger_for_probe_move( height = await self._liquid_probe_pass( checked_mount, probe_settings, - probe if probe else InstrumentProbeType.PRIMARY, + checked_probe, plunger_travel_mm + sensor_baseline_plunger_move_mm, ) # if we made it here without an error we found the liquid diff --git a/api/src/opentrons/protocol_api/_parameter_context.py b/api/src/opentrons/protocol_api/_parameter_context.py index 2e0e0096f44..a52aee7819b 100644 --- a/api/src/opentrons/protocol_api/_parameter_context.py +++ b/api/src/opentrons/protocol_api/_parameter_context.py @@ -1,4 +1,5 @@ """Parameter context for python protocols.""" +import uuid from typing import List, Optional, Union, Dict from opentrons.protocols.api_support.types import APIVersion @@ -251,8 +252,16 @@ def initialize_csv_files( f" but '{variable_name}' is not a CSV parameter." ) - # The parent folder in the path will be the file ID, so we can use that to resolve that here + # TODO(jbl 2024-09-30) Refactor this so file ID is passed as its own argument and not assumed from the path + # If this is running on a robot, the parent folder in the path will be the file ID + # If it is running locally, most likely the parent folder will not be a UUID, so instead we will change + # this to be an empty string file_id = file_path.parent.name + try: + uuid.UUID(file_id, version=4) + except ValueError: + file_id = "" + file_name = file_path.name with file_path.open("rb") as fh: diff --git a/api/src/opentrons/protocol_api/core/engine/deck_conflict.py b/api/src/opentrons/protocol_api/core/engine/deck_conflict.py index 6ebb47f0ac8..abf47212dac 100644 --- a/api/src/opentrons/protocol_api/core/engine/deck_conflict.py +++ b/api/src/opentrons/protocol_api/core/engine/deck_conflict.py @@ -16,6 +16,7 @@ from opentrons_shared_data.errors.exceptions import MotionPlanningFailureError from opentrons_shared_data.module import FLEX_TC_LID_COLLISION_ZONE +from opentrons.hardware_control import CriticalPoint from opentrons.hardware_control.modules.types import ModuleType from opentrons.motion_planning import deck_conflict as wrapped_deck_conflict from opentrons.motion_planning import adjacent_slots_getters @@ -228,9 +229,13 @@ def check_safe_for_pipette_movement( ) primary_nozzle = engine_state.pipettes.get_primary_nozzle(pipette_id) + destination_cp = _get_critical_point_to_use(engine_state, labware_id) + pipette_bounds_at_well_location = ( engine_state.pipettes.get_pipette_bounds_at_specified_move_to_position( - pipette_id=pipette_id, destination_position=well_location_point + pipette_id=pipette_id, + destination_position=well_location_point, + critical_point=destination_cp, ) ) if not _is_within_pipette_extents( @@ -284,6 +289,21 @@ def check_safe_for_pipette_movement( ) +def _get_critical_point_to_use( + engine_state: StateView, labware_id: str +) -> Optional[CriticalPoint]: + """Return the critical point to use when accessing the given labware.""" + # TODO (spp, 2024-09-17): looks like Y_CENTER of column is the same as its XY_CENTER. + # I'm using this if-else ladder to be consistent with what we do in + # `MotionPlanning.get_movement_waypoints_to_well()`. + # We should probably use only XY_CENTER in both places. + if engine_state.labware.get_should_center_column_on_target_well(labware_id): + return CriticalPoint.Y_CENTER + elif engine_state.labware.get_should_center_pipette_on_target_well(labware_id): + return CriticalPoint.XY_CENTER + return None + + def _slot_has_potential_colliding_object( engine_state: StateView, pipette_bounds: Tuple[Point, Point, Point, Point], diff --git a/api/src/opentrons/protocol_api/core/engine/module_core.py b/api/src/opentrons/protocol_api/core/engine/module_core.py index 643111122ce..47b49c54e23 100644 --- a/api/src/opentrons/protocol_api/core/engine/module_core.py +++ b/api/src/opentrons/protocol_api/core/engine/module_core.py @@ -1,14 +1,13 @@ """Protocol API module implementation logic.""" from __future__ import annotations -from typing import Optional, List, Dict +from typing import Optional, List, Dict, Union from opentrons.hardware_control import SynchronousAdapter, modules as hw_modules from opentrons.hardware_control.modules.types import ( ModuleModel, TemperatureStatus, MagneticStatus, - ThermocyclerStep, SpeedStatus, module_model_from_string, ) @@ -18,6 +17,7 @@ ) from opentrons.protocol_engine import commands as cmd +from opentrons.protocol_engine.types import ABSMeasureMode from opentrons.types import DeckSlotName from opentrons.protocol_engine.clients import SyncClient as ProtocolEngineClient from opentrons.protocol_engine.errors.exceptions import ( @@ -26,7 +26,7 @@ CannotPerformModuleAction, ) -from opentrons.protocols.api_support.types import APIVersion +from opentrons.protocols.api_support.types import APIVersion, ThermocyclerStep from ... import validation from ..module import ( @@ -326,15 +326,13 @@ def wait_for_lid_temperature(self) -> None: cmd.thermocycler.WaitForLidTemperatureParams(moduleId=self.module_id) ) - def execute_profile( + def _execute_profile_pre_221( self, steps: List[ThermocyclerStep], repetitions: int, - block_max_volume: Optional[float] = None, + block_max_volume: Optional[float], ) -> None: - """Execute a Thermocycler Profile.""" - self._repetitions = repetitions - self._step_count = len(steps) + """Execute a thermocycler profile using thermocycler/runProfile and flattened steps.""" engine_steps = [ cmd.thermocycler.RunProfileStepParams( celsius=step["temperature"], @@ -351,6 +349,49 @@ def execute_profile( ) ) + def _execute_profile_post_221( + self, + steps: List[ThermocyclerStep], + repetitions: int, + block_max_volume: Optional[float], + ) -> None: + """Execute a thermocycler profile using thermocycler/runExtendedProfile.""" + engine_steps: List[ + Union[cmd.thermocycler.ProfileCycle, cmd.thermocycler.ProfileStep] + ] = [ + cmd.thermocycler.ProfileCycle( + repetitions=repetitions, + steps=[ + cmd.thermocycler.ProfileStep( + celsius=step["temperature"], + holdSeconds=step["hold_time_seconds"], + ) + for step in steps + ], + ) + ] + self._engine_client.execute_command( + cmd.thermocycler.RunExtendedProfileParams( + moduleId=self.module_id, + profileElements=engine_steps, + blockMaxVolumeUl=block_max_volume, + ) + ) + + def execute_profile( + self, + steps: List[ThermocyclerStep], + repetitions: int, + block_max_volume: Optional[float] = None, + ) -> None: + """Execute a Thermocycler Profile.""" + self._repetitions = repetitions + self._step_count = len(steps) + if self.api_version >= APIVersion(2, 21): + return self._execute_profile_post_221(steps, repetitions, block_max_volume) + else: + return self._execute_profile_pre_221(steps, repetitions, block_max_volume) + def deactivate_lid(self) -> None: """Turn off the heated lid.""" self._engine_client.execute_command( @@ -525,25 +566,31 @@ class AbsorbanceReaderCore(ModuleCore, AbstractAbsorbanceReaderCore): """Absorbance Reader core logic implementation for Python protocols.""" _sync_module_hardware: SynchronousAdapter[hw_modules.AbsorbanceReader] - _initialized_value: Optional[int] = None + _initialized_value: Optional[List[int]] = None - def initialize(self, wavelength: int) -> None: + def initialize( + self, + mode: ABSMeasureMode, + wavelengths: List[int], + reference_wavelength: Optional[int] = None, + ) -> None: """Initialize the Absorbance Reader by taking zero reading.""" + # TODO: check that the wavelengths are within the supported wavelengths self._engine_client.execute_command( cmd.absorbance_reader.InitializeParams( moduleId=self.module_id, - sampleWavelength=wavelength, + measureMode=mode, + sampleWavelengths=wavelengths, + referenceWavelength=reference_wavelength, ), ) - self._initialized_value = wavelength + self._initialized_value = wavelengths - def read(self) -> Optional[Dict[str, float]]: + def read(self) -> Optional[Dict[int, Dict[str, float]]]: """Initiate a read on the Absorbance Reader, and return the results. During Analysis, this will return None.""" if self._initialized_value: self._engine_client.execute_command( - cmd.absorbance_reader.ReadAbsorbanceParams( - moduleId=self.module_id, sampleWavelength=self._initialized_value - ) + cmd.absorbance_reader.ReadAbsorbanceParams(moduleId=self.module_id) ) if not self._engine_client.state.config.use_virtual_modules: read_result = ( diff --git a/api/src/opentrons/protocol_api/core/engine/protocol.py b/api/src/opentrons/protocol_api/core/engine/protocol.py index 04ddaf55a48..360740cbfcd 100644 --- a/api/src/opentrons/protocol_api/core/engine/protocol.py +++ b/api/src/opentrons/protocol_api/core/engine/protocol.py @@ -311,7 +311,6 @@ def load_adapter( return labware_core - # TODO (spp, 2022-12-14): https://opentrons.atlassian.net/browse/RLAB-237 def move_labware( self, labware_core: LabwareCore, diff --git a/api/src/opentrons/protocol_api/core/legacy/legacy_protocol_core.py b/api/src/opentrons/protocol_api/core/legacy/legacy_protocol_core.py index d698604ac30..eb1a7386e38 100644 --- a/api/src/opentrons/protocol_api/core/legacy/legacy_protocol_core.py +++ b/api/src/opentrons/protocol_api/core/legacy/legacy_protocol_core.py @@ -267,7 +267,6 @@ def load_adapter( """Load an adapter using its identifying parameters""" raise APIVersionError(api_element="Loading adapter") - # TODO (spp, 2022-12-14): https://opentrons.atlassian.net/browse/RLAB-237 def move_labware( self, labware_core: LegacyLabwareCore, diff --git a/api/src/opentrons/protocol_api/core/module.py b/api/src/opentrons/protocol_api/core/module.py index e6968de91d6..90abea1d0ec 100644 --- a/api/src/opentrons/protocol_api/core/module.py +++ b/api/src/opentrons/protocol_api/core/module.py @@ -16,6 +16,7 @@ MagneticStatus, SpeedStatus, ) +from opentrons.protocol_engine.types import ABSMeasureMode from opentrons.types import DeckSlotName @@ -355,11 +356,16 @@ def get_serial_number(self) -> str: """Get the module's unique hardware serial number.""" @abstractmethod - def initialize(self, wavelength: int) -> None: + def initialize( + self, + mode: ABSMeasureMode, + wavelengths: List[int], + reference_wavelength: Optional[int] = None, + ) -> None: """Initialize the Absorbance Reader by taking zero reading.""" @abstractmethod - def read(self) -> Optional[Dict[str, float]]: + def read(self) -> Optional[Dict[int, Dict[str, float]]]: """Get an absorbance reading from the Absorbance Reader.""" @abstractmethod diff --git a/api/src/opentrons/protocol_api/core/protocol.py b/api/src/opentrons/protocol_api/core/protocol.py index a8403cc40da..687291c390a 100644 --- a/api/src/opentrons/protocol_api/core/protocol.py +++ b/api/src/opentrons/protocol_api/core/protocol.py @@ -93,7 +93,6 @@ def load_adapter( """Load an adapter using its identifying parameters""" ... - # TODO (spp, 2022-12-14): https://opentrons.atlassian.net/browse/RLAB-237 @abstractmethod def move_labware( self, diff --git a/api/src/opentrons/protocol_api/instrument_context.py b/api/src/opentrons/protocol_api/instrument_context.py index 7121567c3c4..b158ff8c75f 100644 --- a/api/src/opentrons/protocol_api/instrument_context.py +++ b/api/src/opentrons/protocol_api/instrument_context.py @@ -261,6 +261,7 @@ def aspirate( and well is not None and self.liquid_presence_detection and self._96_tip_config_valid() + and self._core.get_current_volume() == 0 ): self.require_liquid_presence(well=well) @@ -539,12 +540,12 @@ def mix( ), ): self.aspirate(volume, location, rate) - while repetitions - 1 > 0: - self.dispense(volume, rate=rate, **dispense_kwargs) - self.aspirate(volume, rate=rate) - repetitions -= 1 - self.dispense(volume, rate=rate) - + with AutoProbeDisable(self): + while repetitions - 1 > 0: + self.dispense(volume, rate=rate, **dispense_kwargs) + self.aspirate(volume, rate=rate) + repetitions -= 1 + self.dispense(volume, rate=rate) return self @requires_version(2, 0) @@ -2191,6 +2192,22 @@ def _raise_if_configuration_not_supported_by_pipette( # SINGLE, QUADRANT and ALL are supported by all pipettes +class AutoProbeDisable: + """Use this class to temporarily disable automatic liquid presence detection.""" + + def __init__(self, instrument: InstrumentContext): + self.instrument = instrument + + def __enter__(self) -> None: + if self.instrument.api_version >= APIVersion(2, 21): + self.auto_presence = self.instrument.liquid_presence_detection + self.instrument.liquid_presence_detection = False + + def __exit__(self, *args: Any, **kwargs: Any) -> None: + if self.instrument.api_version >= APIVersion(2, 21): + self.instrument.liquid_presence_detection = self.auto_presence + + def _raise_if_has_end_or_front_right_or_back_left( style: NozzleLayout, end: Optional[str], diff --git a/api/src/opentrons/protocol_api/labware.py b/api/src/opentrons/protocol_api/labware.py index 43c2c0ce5a8..6f38c123c7a 100644 --- a/api/src/opentrons/protocol_api/labware.py +++ b/api/src/opentrons/protocol_api/labware.py @@ -229,6 +229,8 @@ def meniscus(self, z: float = 0.0) -> Location: :return: A :py:class:`~opentrons.types.Location` corresponding to the absolute position of the meniscus-center of the well, plus the ``z`` offset (if specified). + + :meta private: """ return Location(self._core.get_meniscus(z_offset=z), self) diff --git a/api/src/opentrons/protocol_api/module_contexts.py b/api/src/opentrons/protocol_api/module_contexts.py index b2abeca24e4..5d182843dcc 100644 --- a/api/src/opentrons/protocol_api/module_contexts.py +++ b/api/src/opentrons/protocol_api/module_contexts.py @@ -3,14 +3,14 @@ import logging from typing import List, Dict, Optional, Union, cast +from opentrons.protocol_engine.types import ABSMeasureMode from opentrons_shared_data.labware.types import LabwareDefinition from opentrons_shared_data.module.types import ModuleModel, ModuleType from opentrons.legacy_broker import LegacyBroker -from opentrons.hardware_control.modules import ThermocyclerStep from opentrons.legacy_commands import module_commands as cmds from opentrons.legacy_commands.publisher import CommandPublisher, publish -from opentrons.protocols.api_support.types import APIVersion +from opentrons.protocols.api_support.types import APIVersion, ThermocyclerStep from opentrons.protocols.api_support.util import ( APIVersionError, requires_version, @@ -628,6 +628,13 @@ def execute_profile( ``hold_time_minutes`` and ``hold_time_seconds`` must be defined and for each step. + .. note: + + Before API Version 2.21, Thermocycler profiles run with this command + would be listed in the app as having a number of repetitions equal to + their step count. At or above API Version 2.21, the structure of the + Thermocycler cycles is preserved. + """ repetitions = validation.ensure_thermocycler_repetition_count(repetitions) validated_steps = validation.ensure_thermocycler_profile_steps(steps) @@ -1003,11 +1010,31 @@ def is_lid_on(self) -> bool: return self._core.is_lid_on() @requires_version(2, 21) - def initialize(self, wavelength: int) -> None: - """Initialize the Absorbance Reader by taking zero reading.""" - self._core.initialize(wavelength) + def initialize( + self, + mode: ABSMeasureMode, + wavelengths: List[int], + reference_wavelength: Optional[int] = None, + ) -> None: + """Take a zero reading on the Absorbance Plate Reader Module. + + :param mode: Either ``"single"`` or ``"multi"``. + + - In single measurement mode, :py:meth:`.AbsorbanceReaderContext.read` uses + one sample wavelength and an optional reference wavelength. + - In multiple measurement mode, :py:meth:`.AbsorbanceReaderContext.read` uses + a list of up to six sample wavelengths. + :param wavelengths: A list of wavelengths, in mm, to measure. + - Must contain only one item when initializing a single measurement. + - Must contain one to six items when initializing a multiple measurement. + :param reference_wavelength: An optional reference wavelength, in mm. Cannot be + used with multiple measurements. + """ + self._core.initialize( + mode, wavelengths, reference_wavelength=reference_wavelength + ) @requires_version(2, 21) - def read(self) -> Optional[Dict[str, float]]: - """Initiate read on the Absorbance Reader. Returns a dictionary of values ordered by well name.""" + def read(self) -> Optional[Dict[int, Dict[str, float]]]: + """Initiate read on the Absorbance Reader. Returns a dictionary of wavelengths to dictionary of values ordered by well name.""" return self._core.read() diff --git a/api/src/opentrons/protocol_api/protocol_context.py b/api/src/opentrons/protocol_api/protocol_context.py index 0fca3fdc8f3..5c21f662a62 100644 --- a/api/src/opentrons/protocol_api/protocol_context.py +++ b/api/src/opentrons/protocol_api/protocol_context.py @@ -209,8 +209,12 @@ def api_version(self) -> APIVersion: return self._api_version @property - @requires_version(2, 20) + @requires_version(2, 21) def robot(self) -> RobotContext: + """The :py:class:`.RobotContext` for the protocol. + + :meta private: + """ return self._robot @property @@ -657,7 +661,6 @@ def loaded_labwares(self) -> Dict[int, Labware]: if slot is not None } - # TODO (spp, 2022-12-14): https://opentrons.atlassian.net/browse/RLAB-237 @requires_version(2, 15) def move_labware( self, diff --git a/api/src/opentrons/protocol_api/validation.py b/api/src/opentrons/protocol_api/validation.py index 08e56fdef8f..43c83eca2e0 100644 --- a/api/src/opentrons/protocol_api/validation.py +++ b/api/src/opentrons/protocol_api/validation.py @@ -18,7 +18,7 @@ from opentrons_shared_data.pipette.types import PipetteNameType from opentrons_shared_data.robot.types import RobotType -from opentrons.protocols.api_support.types import APIVersion +from opentrons.protocols.api_support.types import APIVersion, ThermocyclerStep from opentrons.protocols.api_support.util import APIVersionError from opentrons.protocols.models import LabwareDefinition from opentrons.types import Mount, DeckSlotName, StagingSlotName, Location @@ -30,7 +30,6 @@ HeaterShakerModuleModel, MagneticBlockModel, AbsorbanceReaderModel, - ThermocyclerStep, ) from .disposal_locations import TrashBin, WasteChute diff --git a/api/src/opentrons/protocol_engine/commands/absorbance_reader/__init__.py b/api/src/opentrons/protocol_engine/commands/absorbance_reader/__init__.py index 09307e85230..2ed24ae23c3 100644 --- a/api/src/opentrons/protocol_engine/commands/absorbance_reader/__init__.py +++ b/api/src/opentrons/protocol_engine/commands/absorbance_reader/__init__.py @@ -1,5 +1,4 @@ """Command models for Absorbance Reader commands.""" -from .types import MoveLidResult from .close_lid import ( CloseLidCommandType, CloseLidParams, diff --git a/api/src/opentrons/protocol_engine/commands/absorbance_reader/close_lid.py b/api/src/opentrons/protocol_engine/commands/absorbance_reader/close_lid.py index 4b1135668d0..b5131d76bcf 100644 --- a/api/src/opentrons/protocol_engine/commands/absorbance_reader/close_lid.py +++ b/api/src/opentrons/protocol_engine/commands/absorbance_reader/close_lid.py @@ -11,7 +11,8 @@ from opentrons.protocol_engine.types import AddressableAreaLocation from opentrons.protocol_engine.resources import labware_validation -from .types import MoveLidResult +from ...state.update_types import StateUpdate + from opentrons.drivers.types import AbsorbanceReaderLidStatus @@ -32,7 +33,7 @@ class CloseLidParams(BaseModel): moduleId: str = Field(..., description="Unique ID of the absorbance reader.") -class CloseLidResult(MoveLidResult): +class CloseLidResult(BaseModel): """Result data from closing the lid on an aborbance reading.""" @@ -132,11 +133,17 @@ async def execute( labware_location=new_location, ) + state_update = StateUpdate() + state_update.set_labware_location( + labware_id=loaded_lid.id, + new_location=new_location, + new_offset_id=new_offset_id, + ) + return SuccessData( - public=CloseLidResult( - lidId=loaded_lid.id, newLocation=new_location, offsetId=new_offset_id - ), + public=CloseLidResult(), private=None, + state_update=state_update, ) diff --git a/api/src/opentrons/protocol_engine/commands/absorbance_reader/initialize.py b/api/src/opentrons/protocol_engine/commands/absorbance_reader/initialize.py index 53150280a80..314645b39b2 100644 --- a/api/src/opentrons/protocol_engine/commands/absorbance_reader/initialize.py +++ b/api/src/opentrons/protocol_engine/commands/absorbance_reader/initialize.py @@ -1,10 +1,13 @@ """Command models to initialize an Absorbance Reader.""" from __future__ import annotations -from typing import Optional, Literal, TYPE_CHECKING +from typing import List, Optional, Literal, TYPE_CHECKING from typing_extensions import Type from pydantic import BaseModel, Field +from opentrons.drivers.types import ABSMeasurementMode +from opentrons.protocol_engine.types import ABSMeasureMode + from ..command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData from ...errors.error_occurrence import ErrorOccurrence @@ -20,7 +23,13 @@ class InitializeParams(BaseModel): """Input parameters to initialize an absorbance reading.""" moduleId: str = Field(..., description="Unique ID of the absorbance reader.") - sampleWavelength: int = Field(..., description="Sample wavelength in nm.") + measureMode: ABSMeasureMode = Field( + ..., description="Initialize single or multi measurement mode." + ) + sampleWavelengths: List[int] = Field(..., description="Sample wavelengths in nm.") + referenceWavelength: Optional[int] = Field( + None, description="Optional reference wavelength in nm." + ) class InitializeResult(BaseModel): @@ -54,7 +63,45 @@ async def execute( ) if abs_reader is not None: - await abs_reader.set_sample_wavelength(wavelength=params.sampleWavelength) + # Validate the parameters before initializing. + sample_wavelengths = set(params.sampleWavelengths) + sample_wavelengths_len = len(params.sampleWavelengths) + reference_wavelength = params.referenceWavelength + supported_wavelengths = set(abs_reader.supported_wavelengths) + unsupported_wavelengths = sample_wavelengths.difference( + supported_wavelengths + ) + if unsupported_wavelengths: + raise ValueError(f"Unsupported wavelengths: {unsupported_wavelengths}") + + if params.measureMode == "single": + if sample_wavelengths_len != 1: + raise ValueError( + f"single requires one sample wavelength, provided {sample_wavelengths}" + ) + if ( + reference_wavelength is not None + and reference_wavelength not in supported_wavelengths + ): + raise ValueError( + f"Reference wavelength {reference_wavelength} not supported {supported_wavelengths}" + ) + + if params.measureMode == "multi": + if sample_wavelengths_len < 1 or sample_wavelengths_len > 6: + raise ValueError( + f"multi requires 1-6 sample wavelengths, provided {sample_wavelengths}" + ) + if reference_wavelength is not None: + raise RuntimeError( + "Reference wavelength cannot be used with multi mode." + ) + + await abs_reader.set_sample_wavelength( + ABSMeasurementMode(params.measureMode), + params.sampleWavelengths, + reference_wavelength=params.referenceWavelength, + ) return SuccessData( public=InitializeResult(), diff --git a/api/src/opentrons/protocol_engine/commands/absorbance_reader/open_lid.py b/api/src/opentrons/protocol_engine/commands/absorbance_reader/open_lid.py index e6da9edade5..7a048a69b52 100644 --- a/api/src/opentrons/protocol_engine/commands/absorbance_reader/open_lid.py +++ b/api/src/opentrons/protocol_engine/commands/absorbance_reader/open_lid.py @@ -9,12 +9,14 @@ from ...errors.error_occurrence import ErrorOccurrence from ...errors import CannotPerformModuleAction -from .types import MoveLidResult from opentrons.protocol_engine.resources import labware_validation from opentrons.protocol_engine.types import AddressableAreaLocation from opentrons.drivers.types import AbsorbanceReaderLidStatus +from ...state.update_types import StateUpdate + + if TYPE_CHECKING: from opentrons.protocol_engine.state.state import StateView from opentrons.protocol_engine.execution import ( @@ -32,7 +34,7 @@ class OpenLidParams(BaseModel): moduleId: str = Field(..., description="Unique ID of the absorbance reader.") -class OpenLidResult(MoveLidResult): +class OpenLidResult(BaseModel): """Result data from opening the lid on an aborbance reading.""" @@ -125,13 +127,18 @@ async def execute(self, params: OpenLidParams) -> SuccessData[OpenLidResult, Non labware_location=new_location, ) + state_update = StateUpdate() + + state_update.set_labware_location( + labware_id=loaded_lid.id, + new_location=new_location, + new_offset_id=new_offset_id, + ) + return SuccessData( - public=OpenLidResult( - lidId=loaded_lid.id, - newLocation=new_location, - offsetId=new_offset_id, - ), + public=OpenLidResult(), private=None, + state_update=state_update, ) diff --git a/api/src/opentrons/protocol_engine/commands/absorbance_reader/read.py b/api/src/opentrons/protocol_engine/commands/absorbance_reader/read.py index f361f819c5e..b101cdb70b8 100644 --- a/api/src/opentrons/protocol_engine/commands/absorbance_reader/read.py +++ b/api/src/opentrons/protocol_engine/commands/absorbance_reader/read.py @@ -18,16 +18,17 @@ class ReadAbsorbanceParams(BaseModel): - """Input parameters for a single absorbance reading.""" + """Input parameters for an absorbance reading.""" moduleId: str = Field(..., description="Unique ID of the Absorbance Reader.") - sampleWavelength: int = Field(..., description="Sample wavelength in nm.") class ReadAbsorbanceResult(BaseModel): - """Result data from running an aborbance reading, returned as a dictionary map of values by well name (eg. ("A1": 0.0, ...)).""" + """Result data from running an aborbance reading, returned as a dictionary map of wavelengths containing a map of values by well name (eg. {450: {"A1": 0.0, ...}}).""" - data: Optional[Dict[str, float]] = Field(..., description="Absorbance data points.") + data: Optional[Dict[int, Dict[str, float]]] = Field( + ..., description="Absorbance data points per wavelength." + ) class ReadAbsorbanceImpl( @@ -47,7 +48,7 @@ def __init__( async def execute( self, params: ReadAbsorbanceParams ) -> SuccessData[ReadAbsorbanceResult, None]: - """Initiate a single absorbance measurement.""" + """Initiate an absorbance measurement.""" abs_reader_substate = self._state_view.modules.get_absorbance_reader_substate( module_id=params.moduleId ) @@ -62,16 +63,21 @@ async def execute( ) if abs_reader is not None: - result = await abs_reader.start_measure(wavelength=params.sampleWavelength) - converted_values = ( - self._state_view.modules.convert_absorbance_reader_data_points( - data=result + results = await abs_reader.start_measure() + if abs_reader._measurement_config is not None: + asbsorbance_result: Dict[int, Dict[str, float]] = {} + sample_wavelengths = abs_reader._measurement_config.sample_wavelengths + for wavelength, result in zip(sample_wavelengths, results): + converted_values = ( + self._state_view.modules.convert_absorbance_reader_data_points( + data=result + ) + ) + asbsorbance_result[wavelength] = converted_values + return SuccessData( + public=ReadAbsorbanceResult(data=asbsorbance_result), + private=None, ) - ) - return SuccessData( - public=ReadAbsorbanceResult(data=converted_values), - private=None, - ) return SuccessData( public=ReadAbsorbanceResult(data=None), diff --git a/api/src/opentrons/protocol_engine/commands/absorbance_reader/types.py b/api/src/opentrons/protocol_engine/commands/absorbance_reader/types.py deleted file mode 100644 index 5595502d6a1..00000000000 --- a/api/src/opentrons/protocol_engine/commands/absorbance_reader/types.py +++ /dev/null @@ -1,25 +0,0 @@ -"""Move Lid Result model.""" - -from typing import Optional -from pydantic import BaseModel, Field -from opentrons.protocol_engine.types import LabwareLocation - - -class MoveLidResult(BaseModel): - """Input parameters to open the lid on an absorbance reading.""" - - lidId: str = Field(..., description="Unique ID of the absorbance reader lid.") - newLocation: LabwareLocation = Field(..., description="New location of the lid") - offsetId: Optional[str] = Field( - # Default `None` instead of `...` so this field shows up as non-required in - # OpenAPI. The server is allowed to omit it or make it null. - None, - description=( - "An ID referencing the labware offset that will apply to this labware" - " now that it's in the new location." - " This offset will be in effect until the labware is moved" - " with another `moveLabware` command." - " Null or undefined means no offset applies," - " so the default of (0, 0, 0) will be used." - ), - ) diff --git a/api/src/opentrons/protocol_engine/commands/aspirate.py b/api/src/opentrons/protocol_engine/commands/aspirate.py index ac0e34424e6..9876ce19bd3 100644 --- a/api/src/opentrons/protocol_engine/commands/aspirate.py +++ b/api/src/opentrons/protocol_engine/commands/aspirate.py @@ -161,7 +161,7 @@ async def execute(self, params: AspirateParams) -> _ExecuteReturn: ) -class Aspirate(BaseCommand[AspirateParams, AspirateResult, ErrorOccurrence]): +class Aspirate(BaseCommand[AspirateParams, AspirateResult, OverpressureError]): """Aspirate command model.""" commandType: AspirateCommandType = "aspirate" diff --git a/api/src/opentrons/protocol_engine/commands/aspirate_in_place.py b/api/src/opentrons/protocol_engine/commands/aspirate_in_place.py index 44dc2e93768..4ae5ec10b97 100644 --- a/api/src/opentrons/protocol_engine/commands/aspirate_in_place.py +++ b/api/src/opentrons/protocol_engine/commands/aspirate_in_place.py @@ -129,7 +129,7 @@ async def execute(self, params: AspirateInPlaceParams) -> _ExecuteReturn: class AspirateInPlace( - BaseCommand[AspirateInPlaceParams, AspirateInPlaceResult, ErrorOccurrence] + BaseCommand[AspirateInPlaceParams, AspirateInPlaceResult, OverpressureError] ): """AspirateInPlace command model.""" diff --git a/api/src/opentrons/protocol_engine/commands/command_unions.py b/api/src/opentrons/protocol_engine/commands/command_unions.py index b586e1f50aa..2c7f768945f 100644 --- a/api/src/opentrons/protocol_engine/commands/command_unions.py +++ b/api/src/opentrons/protocol_engine/commands/command_unions.py @@ -144,6 +144,7 @@ ) from .move_labware import ( + GripperMovementError, MoveLabware, MoveLabwareParams, MoveLabwareCreate, @@ -379,6 +380,7 @@ thermocycler.OpenLid, thermocycler.CloseLid, thermocycler.RunProfile, + thermocycler.RunExtendedProfile, absorbance_reader.CloseLid, absorbance_reader.OpenLid, absorbance_reader.Initialize, @@ -391,6 +393,7 @@ unsafe.UnsafeDropTipInPlace, unsafe.UpdatePositionEstimators, unsafe.UnsafeEngageAxes, + unsafe.UnsafeUngripLabware, ], Field(discriminator="commandType"), ] @@ -454,6 +457,7 @@ thermocycler.OpenLidParams, thermocycler.CloseLidParams, thermocycler.RunProfileParams, + thermocycler.RunExtendedProfileParams, absorbance_reader.CloseLidParams, absorbance_reader.OpenLidParams, absorbance_reader.InitializeParams, @@ -466,6 +470,7 @@ unsafe.UnsafeDropTipInPlaceParams, unsafe.UpdatePositionEstimatorsParams, unsafe.UnsafeEngageAxesParams, + unsafe.UnsafeUngripLabwareParams, ] CommandType = Union[ @@ -527,6 +532,7 @@ thermocycler.OpenLidCommandType, thermocycler.CloseLidCommandType, thermocycler.RunProfileCommandType, + thermocycler.RunExtendedProfileCommandType, absorbance_reader.CloseLidCommandType, absorbance_reader.OpenLidCommandType, absorbance_reader.InitializeCommandType, @@ -539,6 +545,7 @@ unsafe.UnsafeDropTipInPlaceCommandType, unsafe.UpdatePositionEstimatorsCommandType, unsafe.UnsafeEngageAxesCommandType, + unsafe.UnsafeUngripLabwareCommandType, ] CommandCreate = Annotated[ @@ -601,6 +608,7 @@ thermocycler.OpenLidCreate, thermocycler.CloseLidCreate, thermocycler.RunProfileCreate, + thermocycler.RunExtendedProfileCreate, absorbance_reader.CloseLidCreate, absorbance_reader.OpenLidCreate, absorbance_reader.InitializeCreate, @@ -613,6 +621,7 @@ unsafe.UnsafeDropTipInPlaceCreate, unsafe.UpdatePositionEstimatorsCreate, unsafe.UnsafeEngageAxesCreate, + unsafe.UnsafeUngripLabwareCreate, ], Field(discriminator="commandType"), ] @@ -676,6 +685,7 @@ thermocycler.OpenLidResult, thermocycler.CloseLidResult, thermocycler.RunProfileResult, + thermocycler.RunExtendedProfileResult, absorbance_reader.CloseLidResult, absorbance_reader.OpenLidResult, absorbance_reader.InitializeResult, @@ -688,6 +698,7 @@ unsafe.UnsafeDropTipInPlaceResult, unsafe.UpdatePositionEstimatorsResult, unsafe.UnsafeEngageAxesResult, + unsafe.UnsafeUngripLabwareResult, ] # todo(mm, 2024-06-12): Ideally, command return types would have specific @@ -706,6 +717,7 @@ DefinedErrorData[TipPhysicallyMissingError], DefinedErrorData[OverpressureError], DefinedErrorData[LiquidNotFoundError], + DefinedErrorData[GripperMovementError], ] diff --git a/api/src/opentrons/protocol_engine/commands/configure_for_volume.py b/api/src/opentrons/protocol_engine/commands/configure_for_volume.py index 8415c401fe7..93a56ca8805 100644 --- a/api/src/opentrons/protocol_engine/commands/configure_for_volume.py +++ b/api/src/opentrons/protocol_engine/commands/configure_for_volume.py @@ -8,6 +8,7 @@ from .command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData from ..errors.error_occurrence import ErrorOccurrence from .configuring_common import PipetteConfigUpdateResultMixin +from ..state.update_types import StateUpdate if TYPE_CHECKING: from ..execution import EquipmentHandler @@ -67,6 +68,13 @@ async def execute( tip_overlap_version=params.tipOverlapNotAfterVersion, ) + state_update = StateUpdate() + state_update.update_pipette_config( + pipette_id=pipette_result.pipette_id, + config=pipette_result.static_config, + serial_number=pipette_result.serial_number, + ) + return SuccessData( public=ConfigureForVolumeResult(), private=ConfigureForVolumePrivateResult( @@ -74,6 +82,7 @@ async def execute( serial_number=pipette_result.serial_number, config=pipette_result.static_config, ), + state_update=state_update, ) diff --git a/api/src/opentrons/protocol_engine/commands/configure_nozzle_layout.py b/api/src/opentrons/protocol_engine/commands/configure_nozzle_layout.py index 74681098ab9..0d9a5e8c5e7 100644 --- a/api/src/opentrons/protocol_engine/commands/configure_nozzle_layout.py +++ b/api/src/opentrons/protocol_engine/commands/configure_nozzle_layout.py @@ -1,5 +1,6 @@ """Configure nozzle layout command request, result, and implementation models.""" from __future__ import annotations +from opentrons.protocol_engine.state.update_types import StateUpdate from pydantic import BaseModel from typing import TYPE_CHECKING, Optional, Type, Union from typing_extensions import Literal @@ -85,12 +86,18 @@ async def execute( **nozzle_params, ) + update_state = StateUpdate() + update_state.update_pipette_nozzle( + pipette_id=params.pipetteId, nozzle_map=nozzle_map + ) + return SuccessData( public=ConfigureNozzleLayoutResult(), private=ConfigureNozzleLayoutPrivateResult( pipette_id=params.pipetteId, nozzle_map=nozzle_map, ), + state_update=update_state, ) diff --git a/api/src/opentrons/protocol_engine/commands/dispense.py b/api/src/opentrons/protocol_engine/commands/dispense.py index a2d0738b546..ce3ce3cdab1 100644 --- a/api/src/opentrons/protocol_engine/commands/dispense.py +++ b/api/src/opentrons/protocol_engine/commands/dispense.py @@ -121,7 +121,7 @@ async def execute(self, params: DispenseParams) -> _ExecuteReturn: ) -class Dispense(BaseCommand[DispenseParams, DispenseResult, ErrorOccurrence]): +class Dispense(BaseCommand[DispenseParams, DispenseResult, OverpressureError]): """Dispense command model.""" commandType: DispenseCommandType = "dispense" diff --git a/api/src/opentrons/protocol_engine/commands/dispense_in_place.py b/api/src/opentrons/protocol_engine/commands/dispense_in_place.py index 8f52af3284c..1cdbe90e908 100644 --- a/api/src/opentrons/protocol_engine/commands/dispense_in_place.py +++ b/api/src/opentrons/protocol_engine/commands/dispense_in_place.py @@ -107,7 +107,7 @@ async def execute(self, params: DispenseInPlaceParams) -> _ExecuteReturn: class DispenseInPlace( - BaseCommand[DispenseInPlaceParams, DispenseInPlaceResult, ErrorOccurrence] + BaseCommand[DispenseInPlaceParams, DispenseInPlaceResult, OverpressureError] ): """DispenseInPlace command model.""" diff --git a/api/src/opentrons/protocol_engine/commands/drop_tip.py b/api/src/opentrons/protocol_engine/commands/drop_tip.py index 416472fc440..021c7a47bc5 100644 --- a/api/src/opentrons/protocol_engine/commands/drop_tip.py +++ b/api/src/opentrons/protocol_engine/commands/drop_tip.py @@ -114,6 +114,8 @@ async def execute(self, params: DropTipParams) -> SuccessData[DropTipResult, Non await self._tip_handler.drop_tip(pipette_id=pipette_id, home_after=home_after) + state_update.update_tip_state(pipette_id=params.pipetteId, tip_geometry=None) + return SuccessData( public=DropTipResult(position=deck_point), private=None, diff --git a/api/src/opentrons/protocol_engine/commands/drop_tip_in_place.py b/api/src/opentrons/protocol_engine/commands/drop_tip_in_place.py index cf27732a6a5..a8e62354f40 100644 --- a/api/src/opentrons/protocol_engine/commands/drop_tip_in_place.py +++ b/api/src/opentrons/protocol_engine/commands/drop_tip_in_place.py @@ -1,5 +1,6 @@ """Drop tip in place command request, result, and implementation models.""" from __future__ import annotations +from opentrons.protocol_engine.state import update_types from pydantic import Field, BaseModel from typing import TYPE_CHECKING, Optional, Type from typing_extensions import Literal @@ -54,7 +55,13 @@ async def execute( pipette_id=params.pipetteId, home_after=params.homeAfter ) - return SuccessData(public=DropTipInPlaceResult(), private=None) + state_update = update_types.StateUpdate() + + state_update.update_tip_state(pipette_id=params.pipetteId, tip_geometry=None) + + return SuccessData( + public=DropTipInPlaceResult(), private=None, state_update=state_update + ) class DropTipInPlace( diff --git a/api/src/opentrons/protocol_engine/commands/liquid_probe.py b/api/src/opentrons/protocol_engine/commands/liquid_probe.py index 142cd93aba4..1a8597f9c03 100644 --- a/api/src/opentrons/protocol_engine/commands/liquid_probe.py +++ b/api/src/opentrons/protocol_engine/commands/liquid_probe.py @@ -6,8 +6,12 @@ from pydantic import Field -from opentrons.protocol_engine.errors.exceptions import MustHomeError, TipNotEmptyError from opentrons.protocol_engine.state import update_types +from opentrons.protocol_engine.errors.exceptions import ( + MustHomeError, + PipetteNotReadyToAspirateError, + TipNotEmptyError, +) from opentrons.types import MountType from opentrons_shared_data.errors.exceptions import ( PipetteLiquidNotFoundError, @@ -33,6 +37,7 @@ if TYPE_CHECKING: from ..execution import MovementHandler, PipettingHandler from ..resources import ModelUtils + from ..state.state import StateView LiquidProbeCommandType = Literal["liquidProbe"] @@ -97,7 +102,10 @@ class _ExecuteCommonResult(NamedTuple): async def _execute_common( - movement: MovementHandler, pipetting: PipettingHandler, params: _CommonParams + state_view: StateView, + movement: MovementHandler, + pipetting: PipettingHandler, + params: _CommonParams, ) -> _ExecuteCommonResult: pipette_id = params.pipetteId labware_id = params.labwareId @@ -105,13 +113,21 @@ async def _execute_common( state_update = update_types.StateUpdate() - # _validate_tip_attached in pipetting.py is a private method so we're using - # get_is_ready_to_aspirate as an indirect way to throw a TipNotAttachedError if appropriate - pipetting.get_is_ready_to_aspirate(pipette_id=pipette_id) - - if pipetting.get_is_empty(pipette_id=pipette_id) is False: + # May raise TipNotAttachedError. + aspirated_volume = state_view.pipettes.get_aspirated_volume(pipette_id) + + if aspirated_volume is None: + # Theoretically, we could avoid raising an error by automatically preparing + # to aspirate above the well like AspirateImplementation does. However, the + # only way for this to happen is if someone tries to do a liquid probe with + # a tip that's previously held liquid, which they should avoid anyway. + raise PipetteNotReadyToAspirateError( + "The pipette cannot probe liquid because of a previous blow out." + " The plunger must be reset while the tip is somewhere away from liquid." + ) + elif aspirated_volume != 0: raise TipNotEmptyError( - message="This operation requires a tip with no liquid in it." + message="The pipette cannot probe for liquid when the tip has liquid in it." ) if await movement.check_for_valid_position(mount=MountType.LEFT) is False: @@ -158,11 +174,13 @@ class LiquidProbeImplementation( def __init__( self, + state_view: StateView, movement: MovementHandler, pipetting: PipettingHandler, model_utils: ModelUtils, **kwargs: object, ) -> None: + self._state_view = state_view self._movement = movement self._pipetting = pipetting self._model_utils = model_utils @@ -178,11 +196,13 @@ async def execute(self, params: _CommonParams) -> _LiquidProbeExecuteReturn: the pipette. TipNotEmptyError: as an undefined error, if the tip starts with liquid in it. + PipetteNotReadyToAspirateError: as an undefined error, if the plunger is not + in a safe position to do the liquid probe. MustHomeError: as an undefined error, if the plunger is not in a valid position. """ z_pos_or_error, state_update, deck_point = await _execute_common( - self._movement, self._pipetting, params + self._state_view, self._movement, self._pipetting, params ) if isinstance(z_pos_or_error, PipetteLiquidNotFoundError): return DefinedErrorData( @@ -216,10 +236,12 @@ class TryLiquidProbeImplementation( def __init__( self, + state_view: StateView, movement: MovementHandler, pipetting: PipettingHandler, **kwargs: object, ) -> None: + self._state_view = state_view self._movement = movement self._pipetting = pipetting @@ -231,7 +253,7 @@ async def execute(self, params: _CommonParams) -> _TryLiquidProbeExecuteReturn: of a defined error. """ z_pos_or_error, state_update, deck_point = await _execute_common( - self._movement, self._pipetting, params + self._state_view, self._movement, self._pipetting, params ) z_pos = ( diff --git a/api/src/opentrons/protocol_engine/commands/load_labware.py b/api/src/opentrons/protocol_engine/commands/load_labware.py index 6b040e815da..2de394c482c 100644 --- a/api/src/opentrons/protocol_engine/commands/load_labware.py +++ b/api/src/opentrons/protocol_engine/commands/load_labware.py @@ -17,6 +17,7 @@ from .command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData from ..errors.error_occurrence import ErrorOccurrence +from ..state.update_types import StateUpdate if TYPE_CHECKING: from ..state.state import StateView @@ -141,6 +142,16 @@ async def execute( labware_id=params.labwareId, ) + state_update = StateUpdate() + + state_update.set_loaded_labware( + labware_id=loaded_labware.labware_id, + offset_id=loaded_labware.offsetId, + definition=loaded_labware.definition, + location=verified_location, + display_name=params.displayName, + ) + # TODO(jbl 2023-06-23) these validation checks happen after the labware is loaded, because they rely on # on the definition. In practice this will not cause any issues since they will raise protocol ending # exception, but for correctness should be refactored to do this check beforehand. @@ -157,6 +168,7 @@ async def execute( offsetId=loaded_labware.offsetId, ), private=None, + state_update=state_update, ) diff --git a/api/src/opentrons/protocol_engine/commands/load_pipette.py b/api/src/opentrons/protocol_engine/commands/load_pipette.py index d791a251873..5961272ae7c 100644 --- a/api/src/opentrons/protocol_engine/commands/load_pipette.py +++ b/api/src/opentrons/protocol_engine/commands/load_pipette.py @@ -1,6 +1,7 @@ """Load pipette command request, result, and implementation models.""" from __future__ import annotations +from opentrons.protocol_engine.state.update_types import StateUpdate from opentrons_shared_data.pipette.pipette_load_name_conversions import ( convert_to_pipette_name_type, ) @@ -123,6 +124,19 @@ async def execute( tip_overlap_version=params.tipOverlapNotAfterVersion, ) + state_update = StateUpdate() + state_update.set_load_pipette( + pipette_id=loaded_pipette.pipette_id, + pipette_name=params.pipetteName, + mount=params.mount, + liquid_presence_detection=params.liquidPresenceDetection, + ) + state_update.update_pipette_config( + pipette_id=loaded_pipette.pipette_id, + serial_number=loaded_pipette.serial_number, + config=loaded_pipette.static_config, + ) + return SuccessData( public=LoadPipetteResult(pipetteId=loaded_pipette.pipette_id), private=LoadPipettePrivateResult( @@ -130,6 +144,7 @@ async def execute( serial_number=loaded_pipette.serial_number, config=loaded_pipette.static_config, ), + state_update=state_update, ) diff --git a/api/src/opentrons/protocol_engine/commands/move_labware.py b/api/src/opentrons/protocol_engine/commands/move_labware.py index 463b346457e..d5c188d219f 100644 --- a/api/src/opentrons/protocol_engine/commands/move_labware.py +++ b/api/src/opentrons/protocol_engine/commands/move_labware.py @@ -1,12 +1,17 @@ """Models and implementation for the ``moveLabware`` command.""" from __future__ import annotations +from opentrons_shared_data.errors.exceptions import ( + FailedGripperPickupError, + LabwareDroppedError, + StallOrCollisionDetectedError, +) from pydantic import BaseModel, Field from typing import TYPE_CHECKING, Optional, Type from typing_extensions import Literal +from opentrons.protocol_engine.resources.model_utils import ModelUtils from opentrons.types import Point -from ..state import update_types from ..types import ( CurrentWell, LabwareLocation, @@ -19,8 +24,15 @@ ) from ..errors import LabwareMovementNotAllowedError, NotSupportedOnRobotType from ..resources import labware_validation, fixture_validation -from .command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData +from .command import ( + AbstractCommandImpl, + BaseCommand, + BaseCommandCreate, + DefinedErrorData, + SuccessData, +) from ..errors.error_occurrence import ErrorOccurrence +from ..state.update_types import StateUpdate from opentrons_shared_data.gripper.constants import GRIPPER_PADDLE_WIDTH if TYPE_CHECKING: @@ -35,7 +47,6 @@ _TRASH_CHUTE_DROP_BUFFER_MM = 8 -# TODO (spp, 2022-12-14): https://opentrons.atlassian.net/browse/RLAB-237 class MoveLabwareParams(BaseModel): """Input parameters for a ``moveLabware`` command.""" @@ -76,29 +87,43 @@ class MoveLabwareResult(BaseModel): ) -class MoveLabwareImplementation( - AbstractCommandImpl[MoveLabwareParams, SuccessData[MoveLabwareResult, None]] -): +class GripperMovementError(ErrorOccurrence): + """Returned when something physically goes wrong when the gripper moves labware. + + When this error happens, the engine will leave the labware in its original place. + """ + + isDefined: bool = True + + errorType: Literal["gripperMovement"] = "gripperMovement" + + +_ExecuteReturn = ( + SuccessData[MoveLabwareResult, None] | DefinedErrorData[GripperMovementError] +) + + +class MoveLabwareImplementation(AbstractCommandImpl[MoveLabwareParams, _ExecuteReturn]): """The execution implementation for ``moveLabware`` commands.""" def __init__( self, + model_utils: ModelUtils, state_view: StateView, equipment: EquipmentHandler, labware_movement: LabwareMovementHandler, run_control: RunControlHandler, **kwargs: object, ) -> None: + self._model_utils = model_utils self._state_view = state_view self._equipment = equipment self._labware_movement = labware_movement self._run_control = run_control - async def execute( # noqa: C901 - self, params: MoveLabwareParams - ) -> SuccessData[MoveLabwareResult, None]: + async def execute(self, params: MoveLabwareParams) -> _ExecuteReturn: # noqa: C901 """Move a loaded labware to a new location.""" - state_update = update_types.StateUpdate() + state_update = StateUpdate() # Allow propagation of LabwareNotLoadedError. current_labware = self._state_view.labware.get(labware_id=params.labwareId) @@ -205,16 +230,49 @@ async def execute( # noqa: C901 dropOffset=params.dropOffset or LabwareOffsetVector(x=0, y=0, z=0), ) - # Skips gripper moves when using virtual gripper - await self._labware_movement.move_labware_with_gripper( - labware_id=params.labwareId, - current_location=validated_current_loc, - new_location=validated_new_loc, - user_offset_data=user_offset_data, - post_drop_slide_offset=post_drop_slide_offset, - ) + try: + # Skips gripper moves when using virtual gripper + await self._labware_movement.move_labware_with_gripper( + labware_id=params.labwareId, + current_location=validated_current_loc, + new_location=validated_new_loc, + user_offset_data=user_offset_data, + post_drop_slide_offset=post_drop_slide_offset, + ) + except ( + FailedGripperPickupError, + LabwareDroppedError, + StallOrCollisionDetectedError, + # todo(mm, 2024-09-26): Catch LabwareNotPickedUpError when that exists and + # move_labware_with_gripper() raises it. + ) as exception: + gripper_movement_error: GripperMovementError | None = ( + GripperMovementError( + id=self._model_utils.generate_id(), + createdAt=self._model_utils.get_timestamp(), + errorCode=exception.code.value.code, + detail=exception.code.value.detail, + wrappedErrors=[ + ErrorOccurrence.from_failed( + id=self._model_utils.generate_id(), + createdAt=self._model_utils.get_timestamp(), + error=exception, + ) + ], + ) + ) + else: + gripper_movement_error = None + # All mounts will have been retracted as part of the gripper move. state_update.clear_all_pipette_locations() + + if gripper_movement_error: + return DefinedErrorData( + public=gripper_movement_error, + state_update=state_update, + ) + elif params.strategy == LabwareMovementStrategy.MANUAL_MOVE_WITH_PAUSE: # Pause to allow for manual labware movement await self._run_control.wait_for_resume() @@ -231,6 +289,12 @@ async def execute( # noqa: C901 ): state_update.clear_all_pipette_locations() + state_update.set_labware_location( + labware_id=params.labwareId, + new_location=available_new_location, + new_offset_id=new_offset_id, + ) + return SuccessData( public=MoveLabwareResult(offsetId=new_offset_id), private=None, @@ -238,7 +302,9 @@ async def execute( # noqa: C901 ) -class MoveLabware(BaseCommand[MoveLabwareParams, MoveLabwareResult, ErrorOccurrence]): +class MoveLabware( + BaseCommand[MoveLabwareParams, MoveLabwareResult, GripperMovementError] +): """A ``moveLabware`` command.""" commandType: MoveLabwareCommandType = "moveLabware" diff --git a/api/src/opentrons/protocol_engine/commands/pick_up_tip.py b/api/src/opentrons/protocol_engine/commands/pick_up_tip.py index c30d2f953db..86d64d3034e 100644 --- a/api/src/opentrons/protocol_engine/commands/pick_up_tip.py +++ b/api/src/opentrons/protocol_engine/commands/pick_up_tip.py @@ -9,7 +9,7 @@ from ..errors import ErrorOccurrence, TipNotAttachedError from ..resources import ModelUtils from ..state import update_types -from ..types import DeckPoint +from ..types import DeckPoint, TipGeometry from .pipetting_common import ( PipetteIdMixin, WellLocationMixin, @@ -130,6 +130,14 @@ async def execute( labware_id=labware_id, well_name=well_name, ) + state_update.update_tip_state( + pipette_id=pipette_id, + tip_geometry=TipGeometry( + volume=tip_geometry.volume, + length=tip_geometry.length, + diameter=tip_geometry.diameter, + ), + ) except TipNotAttachedError as e: return DefinedErrorData( public=TipPhysicallyMissingError( diff --git a/api/src/opentrons/protocol_engine/commands/reload_labware.py b/api/src/opentrons/protocol_engine/commands/reload_labware.py index 116698552cd..25f545736be 100644 --- a/api/src/opentrons/protocol_engine/commands/reload_labware.py +++ b/api/src/opentrons/protocol_engine/commands/reload_labware.py @@ -6,6 +6,7 @@ from .command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData from ..errors.error_occurrence import ErrorOccurrence +from ..state.update_types import StateUpdate if TYPE_CHECKING: from ..state.state import StateView @@ -64,12 +65,21 @@ async def execute( labware_id=params.labwareId, ) + state_update = StateUpdate() + + state_update.set_labware_location( + labware_id=params.labwareId, + new_location=reloaded_labware.location, + new_offset_id=reloaded_labware.offsetId, + ) + return SuccessData( public=ReloadLabwareResult( labwareId=params.labwareId, offsetId=reloaded_labware.offsetId, ), private=None, + state_update=state_update, ) diff --git a/api/src/opentrons/protocol_engine/commands/thermocycler/__init__.py b/api/src/opentrons/protocol_engine/commands/thermocycler/__init__.py index b0ffdd53ce9..60e5c62591c 100644 --- a/api/src/opentrons/protocol_engine/commands/thermocycler/__init__.py +++ b/api/src/opentrons/protocol_engine/commands/thermocycler/__init__.py @@ -73,6 +73,16 @@ RunProfileCreate, ) +from .run_extended_profile import ( + RunExtendedProfileCommandType, + RunExtendedProfileParams, + RunExtendedProfileResult, + RunExtendedProfile, + RunExtendedProfileCreate, + ProfileCycle, + ProfileStep, +) + __all__ = [ # Set target block temperature command models @@ -130,4 +140,13 @@ "RunProfileResult", "RunProfile", "RunProfileCreate", + # Run extended profile command models. + "RunExtendedProfileCommandType", + "RunExtendedProfileParams", + "RunExtendedProfileStepParams", + "RunExtendedProfileResult", + "RunExtendedProfile", + "RunExtendedProfileCreate", + "ProfileCycle", + "ProfileStep", ] diff --git a/api/src/opentrons/protocol_engine/commands/thermocycler/run_extended_profile.py b/api/src/opentrons/protocol_engine/commands/thermocycler/run_extended_profile.py new file mode 100644 index 00000000000..3cf8a67bf41 --- /dev/null +++ b/api/src/opentrons/protocol_engine/commands/thermocycler/run_extended_profile.py @@ -0,0 +1,166 @@ +"""Command models to execute a Thermocycler profile.""" +from __future__ import annotations +from typing import List, Optional, TYPE_CHECKING, overload, Union +from typing_extensions import Literal, Type + +from pydantic import BaseModel, Field + +from opentrons.hardware_control.modules.types import ThermocyclerStep, ThermocyclerCycle + +from ..command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData +from ...errors.error_occurrence import ErrorOccurrence + +if TYPE_CHECKING: + from opentrons.protocol_engine.state.state import StateView + from opentrons.protocol_engine.execution import EquipmentHandler + from opentrons.protocol_engine.state.module_substates.thermocycler_module_substate import ( + ThermocyclerModuleSubState, + ) + + +RunExtendedProfileCommandType = Literal["thermocycler/runExtendedProfile"] + + +class ProfileStep(BaseModel): + """An individual step in a Thermocycler extended profile.""" + + celsius: float = Field(..., description="Target temperature in °C.") + holdSeconds: float = Field( + ..., description="Time to hold target temperature in seconds." + ) + + +class ProfileCycle(BaseModel): + """An individual cycle in a Thermocycler extended profile.""" + + steps: List[ProfileStep] = Field(..., description="Steps to repeat.") + repetitions: int = Field(..., description="Number of times to repeat the steps.") + + +class RunExtendedProfileParams(BaseModel): + """Input parameters for an individual Thermocycler profile step.""" + + moduleId: str = Field(..., description="Unique ID of the Thermocycler.") + profileElements: List[Union[ProfileStep, ProfileCycle]] = Field( + ..., + description="Elements of the profile. Each can be either a step or a cycle.", + ) + blockMaxVolumeUl: Optional[float] = Field( + None, + description="Amount of liquid in uL of the most-full well" + " in labware loaded onto the thermocycler.", + ) + + +class RunExtendedProfileResult(BaseModel): + """Result data from running a Thermocycler profile.""" + + +def _transform_profile_step( + step: ProfileStep, thermocycler_state: ThermocyclerModuleSubState +) -> ThermocyclerStep: + + return ThermocyclerStep( + temperature=thermocycler_state.validate_target_block_temperature(step.celsius), + hold_time_seconds=step.holdSeconds, + ) + + +@overload +def _transform_profile_element( + element: ProfileStep, thermocycler_state: ThermocyclerModuleSubState +) -> ThermocyclerStep: + ... + + +@overload +def _transform_profile_element( + element: ProfileCycle, thermocycler_state: ThermocyclerModuleSubState +) -> ThermocyclerCycle: + ... + + +def _transform_profile_element( + element: Union[ProfileStep, ProfileCycle], + thermocycler_state: ThermocyclerModuleSubState, +) -> Union[ThermocyclerStep, ThermocyclerCycle]: + if isinstance(element, ProfileStep): + return _transform_profile_step(element, thermocycler_state) + else: + return ThermocyclerCycle( + steps=[ + _transform_profile_step(step, thermocycler_state) + for step in element.steps + ], + repetitions=element.repetitions, + ) + + +class RunExtendedProfileImpl( + AbstractCommandImpl[ + RunExtendedProfileParams, SuccessData[RunExtendedProfileResult, None] + ] +): + """Execution implementation of a Thermocycler's run profile command.""" + + def __init__( + self, + state_view: StateView, + equipment: EquipmentHandler, + **unused_dependencies: object, + ) -> None: + self._state_view = state_view + self._equipment = equipment + + async def execute( + self, params: RunExtendedProfileParams + ) -> SuccessData[RunExtendedProfileResult, None]: + """Run a Thermocycler profile.""" + thermocycler_state = self._state_view.modules.get_thermocycler_module_substate( + params.moduleId + ) + thermocycler_hardware = self._equipment.get_module_hardware_api( + thermocycler_state.module_id + ) + + profile = [ + _transform_profile_element(element, thermocycler_state) + for element in params.profileElements + ] + target_volume: Optional[float] + if params.blockMaxVolumeUl is not None: + target_volume = thermocycler_state.validate_max_block_volume( + params.blockMaxVolumeUl + ) + else: + target_volume = None + + if thermocycler_hardware is not None: + # TODO(jbl 2022-06-27) hardcoded constant 1 for `repetitions` should be + # moved from HardwareControlAPI to the Python ProtocolContext + await thermocycler_hardware.execute_profile( + profile=profile, volume=target_volume + ) + + return SuccessData(public=RunExtendedProfileResult(), private=None) + + +class RunExtendedProfile( + BaseCommand[RunExtendedProfileParams, RunExtendedProfileResult, ErrorOccurrence] +): + """A command to execute a Thermocycler profile run.""" + + commandType: RunExtendedProfileCommandType = "thermocycler/runExtendedProfile" + params: RunExtendedProfileParams + result: Optional[RunExtendedProfileResult] + + _ImplementationCls: Type[RunExtendedProfileImpl] = RunExtendedProfileImpl + + +class RunExtendedProfileCreate(BaseCommandCreate[RunExtendedProfileParams]): + """A request to execute a Thermocycler profile run.""" + + commandType: RunExtendedProfileCommandType = "thermocycler/runExtendedProfile" + params: RunExtendedProfileParams + + _CommandCls: Type[RunExtendedProfile] = RunExtendedProfile diff --git a/api/src/opentrons/protocol_engine/commands/unsafe/__init__.py b/api/src/opentrons/protocol_engine/commands/unsafe/__init__.py index 6b92cc2e18e..72698a3b0f2 100644 --- a/api/src/opentrons/protocol_engine/commands/unsafe/__init__.py +++ b/api/src/opentrons/protocol_engine/commands/unsafe/__init__.py @@ -31,6 +31,15 @@ UnsafeEngageAxesCreate, ) +from .unsafe_ungrip_labware import ( + UnsafeUngripLabwareCommandType, + UnsafeUngripLabwareParams, + UnsafeUngripLabwareResult, + UnsafeUngripLabware, + UnsafeUngripLabwareCreate, +) + + __all__ = [ # Unsafe blow-out-in-place command models "UnsafeBlowOutInPlaceCommandType", @@ -56,4 +65,10 @@ "UnsafeEngageAxesResult", "UnsafeEngageAxes", "UnsafeEngageAxesCreate", + # Unsafe ungrip labware + "UnsafeUngripLabwareCommandType", + "UnsafeUngripLabwareParams", + "UnsafeUngripLabwareResult", + "UnsafeUngripLabware", + "UnsafeUngripLabwareCreate", ] diff --git a/api/src/opentrons/protocol_engine/commands/unsafe/unsafe_drop_tip_in_place.py b/api/src/opentrons/protocol_engine/commands/unsafe/unsafe_drop_tip_in_place.py index 6bf2d4a3a3f..e27a118ea60 100644 --- a/api/src/opentrons/protocol_engine/commands/unsafe/unsafe_drop_tip_in_place.py +++ b/api/src/opentrons/protocol_engine/commands/unsafe/unsafe_drop_tip_in_place.py @@ -1,5 +1,6 @@ """Command models to drop tip in place while plunger positions are unknown.""" from __future__ import annotations +from opentrons.protocol_engine.state.update_types import StateUpdate from pydantic import Field, BaseModel from typing import TYPE_CHECKING, Optional, Type from typing_extensions import Literal @@ -72,7 +73,12 @@ async def execute( pipette_id=params.pipetteId, home_after=params.homeAfter ) - return SuccessData(public=UnsafeDropTipInPlaceResult(), private=None) + state_update = StateUpdate() + state_update.update_tip_state(pipette_id=params.pipetteId, tip_geometry=None) + + return SuccessData( + public=UnsafeDropTipInPlaceResult(), private=None, state_update=state_update + ) class UnsafeDropTipInPlace( diff --git a/api/src/opentrons/protocol_engine/commands/unsafe/unsafe_ungrip_labware.py b/api/src/opentrons/protocol_engine/commands/unsafe/unsafe_ungrip_labware.py new file mode 100644 index 00000000000..e64beaa7ea7 --- /dev/null +++ b/api/src/opentrons/protocol_engine/commands/unsafe/unsafe_ungrip_labware.py @@ -0,0 +1,73 @@ +"""Ungrip labware payload, result, and implementaiton.""" + +from __future__ import annotations +from opentrons.protocol_engine.errors.exceptions import GripperNotAttachedError +from pydantic import BaseModel +from typing import Optional, Type +from typing_extensions import Literal + +from ..command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData +from ...errors.error_occurrence import ErrorOccurrence +from ...resources import ensure_ot3_hardware + +from opentrons.hardware_control import HardwareControlAPI + + +UnsafeUngripLabwareCommandType = Literal["unsafe/ungripLabware"] + + +class UnsafeUngripLabwareParams(BaseModel): + """Payload required for an UngripLabware command.""" + + +class UnsafeUngripLabwareResult(BaseModel): + """Result data from the execution of an UngripLabware command.""" + + +class UnsafeUngripLabwareImplementation( + AbstractCommandImpl[ + UnsafeUngripLabwareParams, + SuccessData[UnsafeUngripLabwareResult, None], + ] +): + """Ungrip labware command implementation.""" + + def __init__( + self, + hardware_api: HardwareControlAPI, + **kwargs: object, + ) -> None: + self._hardware_api = hardware_api + + async def execute( + self, params: UnsafeUngripLabwareParams + ) -> SuccessData[UnsafeUngripLabwareResult, None]: + """Ungrip Labware.""" + ot3_hardware_api = ensure_ot3_hardware(self._hardware_api) + if not ot3_hardware_api.has_gripper(): + raise GripperNotAttachedError("No gripper found to perform ungrip.") + await ot3_hardware_api.ungrip() + return SuccessData(public=UnsafeUngripLabwareResult(), private=None) + + +class UnsafeUngripLabware( + BaseCommand[UnsafeUngripLabwareParams, UnsafeUngripLabwareResult, ErrorOccurrence] +): + """UnsafeUngripLabware command model.""" + + commandType: UnsafeUngripLabwareCommandType = "unsafe/ungripLabware" + params: UnsafeUngripLabwareParams + result: Optional[UnsafeUngripLabwareResult] + + _ImplementationCls: Type[ + UnsafeUngripLabwareImplementation + ] = UnsafeUngripLabwareImplementation + + +class UnsafeUngripLabwareCreate(BaseCommandCreate[UnsafeUngripLabwareParams]): + """UnsafeEngageAxes command request model.""" + + commandType: UnsafeUngripLabwareCommandType = "unsafe/ungripLabware" + params: UnsafeUngripLabwareParams + + _CommandCls: Type[UnsafeUngripLabware] = UnsafeUngripLabware diff --git a/api/src/opentrons/protocol_engine/error_recovery_policy.py b/api/src/opentrons/protocol_engine/error_recovery_policy.py index f9f39d99f4d..d959651393e 100644 --- a/api/src/opentrons/protocol_engine/error_recovery_policy.py +++ b/api/src/opentrons/protocol_engine/error_recovery_policy.py @@ -40,6 +40,7 @@ class ErrorRecoveryPolicy(Protocol): and return an appropriate `ErrorRecoveryType`. Args: + config: The config of the calling `ProtocolEngine`. failed_command: The command that failed, in its final `status=="failed"` state. defined_error_data: If the command failed with a defined error, details about that error. If the command failed with an undefined error, `None`. diff --git a/api/src/opentrons/protocol_engine/execution/heater_shaker_movement_flagger.py b/api/src/opentrons/protocol_engine/execution/heater_shaker_movement_flagger.py index 78b8f2e9bfa..efe8190f04a 100644 --- a/api/src/opentrons/protocol_engine/execution/heater_shaker_movement_flagger.py +++ b/api/src/opentrons/protocol_engine/execution/heater_shaker_movement_flagger.py @@ -61,9 +61,6 @@ async def raise_if_labware_latched_on_heater_shaker( return # Labware on a module, but not a Heater-Shaker. if hs_substate.labware_latch_status == HeaterShakerLatchStatus.CLOSED: - # TODO (spp, 2022-10-27): This only raises if latch status is 'idle_closed'. - # We need to update the flagger to raise if latch status is anything other - # than 'idle_open' raise HeaterShakerLabwareLatchNotOpenError( "Heater-Shaker labware latch must be open when moving labware to/from it." ) diff --git a/api/src/opentrons/protocol_engine/execution/labware_movement.py b/api/src/opentrons/protocol_engine/execution/labware_movement.py index 696c1116279..8ede6f6085b 100644 --- a/api/src/opentrons/protocol_engine/execution/labware_movement.py +++ b/api/src/opentrons/protocol_engine/execution/labware_movement.py @@ -37,8 +37,6 @@ _GRIPPER_HOMED_POSITION_Z = 166.125 # Height of the center of the gripper critical point from the deck when homed -# TODO (spp, 2022-10-20): name this GripperMovementHandler if it doesn't handle -# any non-gripper implementations class LabwareMovementHandler: """Implementation logic for labware movement.""" @@ -179,6 +177,9 @@ async def move_labware_with_gripper( labware_id ) well_bbox = self._state_store.labware.get_well_bbox(labware_id) + # todo(mm, 2024-09-26): This currently raises a lower-level 2015 FailedGripperPickupError. + # Convert this to a higher-level 3001 LabwareDroppedError or 3002 LabwareNotPickedUpError, + # depending on what waypoint we're at, to propagate a more specific error code to users. ot3api.raise_error_if_gripper_pickup_failed( expected_grip_width=labware_bbox.y, grip_width_uncertainty_wider=abs( diff --git a/api/src/opentrons/protocol_engine/execution/pipetting.py b/api/src/opentrons/protocol_engine/execution/pipetting.py index fed6fc52ee6..ae35e779761 100644 --- a/api/src/opentrons/protocol_engine/execution/pipetting.py +++ b/api/src/opentrons/protocol_engine/execution/pipetting.py @@ -30,9 +30,6 @@ class PipettingHandler(TypingProtocol): """Liquid handling commands.""" - def get_is_empty(self, pipette_id: str) -> bool: - """Get whether a pipette has an aspirated volume equal to 0.""" - def get_is_ready_to_aspirate(self, pipette_id: str) -> bool: """Get whether a pipette is ready to aspirate.""" @@ -82,10 +79,6 @@ def __init__(self, state_view: StateView, hardware_api: HardwareControlAPI) -> N self._state_view = state_view self._hardware_api = hardware_api - def get_is_empty(self, pipette_id: str) -> bool: - """Get whether a pipette has an aspirated volume equal to 0.""" - return self._state_view.pipettes.get_aspirated_volume(pipette_id) == 0 - def get_is_ready_to_aspirate(self, pipette_id: str) -> bool: """Get whether a pipette is ready to aspirate.""" hw_pipette = self._state_view.pipettes.get_hardware_pipette( @@ -239,10 +232,6 @@ def __init__( """Initialize a PipettingHandler instance.""" self._state_view = state_view - def get_is_empty(self, pipette_id: str) -> bool: - """Get whether a pipette has an aspirated volume equal to 0.""" - return self._state_view.pipettes.get_aspirated_volume(pipette_id) == 0 - def get_is_ready_to_aspirate(self, pipette_id: str) -> bool: """Get whether a pipette is ready to aspirate.""" return self._state_view.pipettes.get_aspirated_volume(pipette_id) is not None diff --git a/api/src/opentrons/protocol_engine/execution/tip_handler.py b/api/src/opentrons/protocol_engine/execution/tip_handler.py index 3968c7a6923..af6c2fa8c05 100644 --- a/api/src/opentrons/protocol_engine/execution/tip_handler.py +++ b/api/src/opentrons/protocol_engine/execution/tip_handler.py @@ -20,6 +20,8 @@ ProtocolEngineError, ) +from opentrons.hardware_control.nozzle_manager import NozzleConfigurationType + PRIMARY_NOZZLE_TO_ENDING_NOZZLE_MAP = { "A1": {"COLUMN": "H1", "ROW": "A12"}, @@ -300,6 +302,30 @@ async def verify_tip_presence( This function will raise an exception if the specified tip presence status isn't matched. """ + nozzle_configuration = ( + self._state_view.pipettes.state.nozzle_configuration_by_id[pipette_id] + ) + + # Configuration metrics by which tip presence checking is ignored + unsupported_pipette_types = [8, 96] + unsupported_layout_types = [ + NozzleConfigurationType.SINGLE, + NozzleConfigurationType.COLUMN, + ] + # NOTE: (09-20-2024) Current on multi-channel pipettes, utilizing less than 4 nozzles risks false positives on the tip presence sensor + supported_partial_nozzle_minimum = 4 + + if ( + nozzle_configuration is not None + and self._state_view.pipettes.get_channels(pipette_id) + in unsupported_pipette_types + and nozzle_configuration.configuration in unsupported_layout_types + and len(nozzle_configuration.map_store) < supported_partial_nozzle_minimum + ): + # Tip presence sensing is not supported for single tip pick up on the 96ch Flex Pipette, nor with single and some partial layous of the 8ch Flex Pipette. + # This is due in part to a press distance tolerance which creates a risk case for false positives. In the case of single tip, the mechanical tolerance + # for presses with 100% success is below the minimum average achieved press distance for a given multi channel pipette in that configuration. + return try: ot3api = ensure_ot3_hardware(hardware_api=self._hardware_api) hw_mount = self._state_view.pipettes.get_mount(pipette_id).to_hw_mount() diff --git a/api/src/opentrons/protocol_engine/resources/pipette_data_provider.py b/api/src/opentrons/protocol_engine/resources/pipette_data_provider.py index 43b3be16f38..d3998c69bd1 100644 --- a/api/src/opentrons/protocol_engine/resources/pipette_data_provider.py +++ b/api/src/opentrons/protocol_engine/resources/pipette_data_provider.py @@ -193,9 +193,12 @@ def _get_virtual_pipette_static_config_by_model( # noqa: C901 pipette_model.pipette_channels, pipette_model.pipette_version, ) - nozzle_manager = NozzleConfigurationManager.build_from_config( - config, valid_nozzle_maps - ) + if pipette_id not in self._nozzle_manager_layout_by_id: + nozzle_manager = NozzleConfigurationManager.build_from_config( + config, valid_nozzle_maps + ) + else: + nozzle_manager = self._nozzle_manager_layout_by_id[pipette_id] tip_overlap_dict_for_tip_type = None for configuration in ( diff --git a/api/src/opentrons/protocol_engine/state/commands.py b/api/src/opentrons/protocol_engine/state/commands.py index d01926862de..6723c521892 100644 --- a/api/src/opentrons/protocol_engine/state/commands.py +++ b/api/src/opentrons/protocol_engine/state/commands.py @@ -17,6 +17,9 @@ RunCommandAction, SetErrorRecoveryPolicyAction, ) +from opentrons.protocol_engine.commands.unsafe.unsafe_ungrip_labware import ( + UnsafeUngripLabwareCommandType, +) from opentrons.protocol_engine.error_recovery_policy import ( ErrorRecoveryPolicy, ErrorRecoveryType, @@ -36,7 +39,7 @@ DoorChangeAction, ) -from ..commands import Command, CommandStatus, CommandIntent +from ..commands import Command, CommandStatus, CommandIntent, CommandCreate from ..errors import ( RunStoppedError, ErrorOccurrence, @@ -95,7 +98,9 @@ class QueueStatus(enum.Enum): AWAITING_RECOVERY_PAUSED = enum.auto() """Execution of fixit commands has been paused. - New protocol and fixit commands may be enqueued, but will wait to execute. + New protocol and fixit commands may be enqueued, but will usually wait to execute. + There are certain exceptions where fixit commands will still run. + New setup commands may not be enqueued. """ @@ -740,6 +745,12 @@ def get_next_to_execute(self) -> Optional[str]: next_fixit_cmd = self._state.command_history.get_fixit_queue_ids().head(None) if next_fixit_cmd and self._state.queue_status == QueueStatus.AWAITING_RECOVERY: return next_fixit_cmd + if ( + next_fixit_cmd + and self._state.queue_status == QueueStatus.AWAITING_RECOVERY_PAUSED + and self._may_run_with_door_open(fixit_command=self.get(next_fixit_cmd)) + ): + return next_fixit_cmd # if there is a setup command queued, prioritize it next_setup_cmd = self._state.command_history.get_setup_queue_ids().head(None) @@ -970,12 +981,23 @@ def validate_action_allowed( # noqa: C901 "Setup commands are not allowed after run has started." ) elif action.request.intent == CommandIntent.FIXIT: - if self._state.queue_status != QueueStatus.AWAITING_RECOVERY: + if self.get_status() == EngineStatus.AWAITING_RECOVERY: + return action + elif self.get_status() in ( + EngineStatus.AWAITING_RECOVERY_BLOCKED_BY_OPEN_DOOR, + EngineStatus.AWAITING_RECOVERY_PAUSED, + ): + if self._may_run_with_door_open(fixit_command=action.request): + return action + else: + raise FixitCommandNotAllowedError( + f"{action.request.commandType} fixit command may not run" + " until the door is closed and the run is played again." + ) + else: raise FixitCommandNotAllowedError( "Fixit commands are not allowed when the run is not in a recoverable state." ) - else: - return action else: return action @@ -1060,3 +1082,22 @@ def get_error_recovery_policy(self) -> ErrorRecoveryPolicy: higher-level code. """ return self._state.error_recovery_policy + + def _may_run_with_door_open( + self, *, fixit_command: Command | CommandCreate + ) -> bool: + """Return whether the given fixit command is exempt from the usual open-door auto pause. + + This is required for certain error recovery flows, where we want the robot to + do stuff while the door is open. + """ + # CommandIntent.PROTOCOL and CommandIntent.SETUP have their own rules for whether + # they run while the door is open. Passing one of those commands to this function + # is probably a mistake in the caller's logic. + assert fixit_command.intent == CommandIntent.FIXIT + + # This type annotation is to make sure the string constant stays in sync and isn't typo'd. + required_command_type: UnsafeUngripLabwareCommandType = "unsafe/ungripLabware" + # todo(mm, 2024-10-04): Instead of allowlisting command types, maybe we should + # add a `mayRunWithDoorOpen: bool` field to command requests. + return fixit_command.commandType == required_command_type diff --git a/api/src/opentrons/protocol_engine/state/frustum_helpers.py b/api/src/opentrons/protocol_engine/state/frustum_helpers.py index b78957a2f5f..27e417aa8b4 100644 --- a/api/src/opentrons/protocol_engine/state/frustum_helpers.py +++ b/api/src/opentrons/protocol_engine/state/frustum_helpers.py @@ -1,11 +1,14 @@ """Helper functions for liquid-level related calculations inside a given frustum.""" -from typing import List, Tuple, Iterator, Sequence, Any +from typing import List, Tuple, Iterator, Sequence, Any, Union, Optional from numpy import pi, iscomplex, roots, real +from math import isclose -from ..errors.exceptions import InvalidLiquidHeightFound +from ..errors.exceptions import InvalidLiquidHeightFound, InvalidWellDefinitionError from opentrons_shared_data.labware.types import ( is_circular_frusta_list, is_rectangular_frusta_list, + CircularBoundedSection, + RectangularBoundedSection, ) from opentrons_shared_data.labware.labware_definition import InnerWellGeometry @@ -14,14 +17,15 @@ def reject_unacceptable_heights( potential_heights: List[float], max_height: float ) -> float: """Reject any solutions to a polynomial equation that cannot be the height of a frustum.""" - valid_heights = [] + valid_heights: List[float] = [] for root in potential_heights: # reject any heights that are negative or greater than the max height if not iscomplex(root): # take only the real component of the root and round to 4 decimal places rounded_root = round(real(root), 4) if (rounded_root <= max_height) and (rounded_root >= 0): - valid_heights.append(rounded_root) + if not any([isclose(rounded_root, height) for height in valid_heights]): + valid_heights.append(rounded_root) if len(valid_heights) != 1: raise InvalidLiquidHeightFound( message="Unable to estimate valid liquid height from volume." @@ -29,6 +33,33 @@ def reject_unacceptable_heights( return valid_heights[0] +def get_cross_section_area( + bounded_section: Union[CircularBoundedSection, RectangularBoundedSection] +) -> float: + """Find the shape of a cross-section and calculate the area appropriately.""" + if bounded_section["shape"] == "circular": + cross_section_area = cross_section_area_circular(bounded_section["diameter"]) + elif bounded_section["shape"] == "rectangular": + cross_section_area = cross_section_area_rectangular( + bounded_section["xDimension"], + bounded_section["yDimension"], + ) + else: + raise InvalidWellDefinitionError(message="Invalid well volume components.") + return cross_section_area + + +def cross_section_area_circular(diameter: float) -> float: + """Get the area of a circular cross-section.""" + radius = diameter / 2 + return pi * (radius**2) + + +def cross_section_area_rectangular(x_dimension: float, y_dimension: float) -> float: + """Get the area of a rectangular cross-section.""" + return x_dimension * y_dimension + + def rectangular_frustum_polynomial_roots( bottom_length: float, bottom_width: float, @@ -181,7 +212,7 @@ def height_from_volume_spherical( return height -def get_boundary_cross_sections(frusta: Sequence[Any]) -> Iterator[Tuple[Any, Any]]: +def get_boundary_pairs(frusta: Sequence[Any]) -> Iterator[Tuple[Any, Any]]: """Yield tuples representing two cross-section boundaries of a segment of a well.""" iter_f = iter(frusta) el = next(iter_f) @@ -201,7 +232,7 @@ def get_well_volumetric_capacity( if well_geometry.bottomShape.shape == "spherical": bottom_spherical_section_depth = well_geometry.bottomShape.depth bottom_sphere_volume = volume_from_height_spherical( - radius_of_curvature=well_geometry.bottomShape.radius_of_curvature, + radius_of_curvature=well_geometry.bottomShape.radiusOfCurvature, target_height=bottom_spherical_section_depth, ) well_volume.append((bottom_spherical_section_depth, bottom_sphere_volume)) @@ -210,7 +241,7 @@ def get_well_volumetric_capacity( sorted_frusta = sorted(well_geometry.frusta, key=lambda section: section.topHeight) if is_rectangular_frusta_list(sorted_frusta): - for f, next_f in get_boundary_cross_sections(sorted_frusta): + for f, next_f in get_boundary_pairs(sorted_frusta): top_cross_section_width = next_f["xDimension"] top_cross_section_length = next_f["yDimension"] bottom_cross_section_width = f["xDimension"] @@ -227,7 +258,7 @@ def get_well_volumetric_capacity( well_volume.append((next_f["topHeight"], frustum_volume)) elif is_circular_frusta_list(sorted_frusta): - for f, next_f in get_boundary_cross_sections(sorted_frusta): + for f, next_f in get_boundary_pairs(sorted_frusta): top_cross_section_radius = next_f["diameter"] / 2.0 bottom_cross_section_radius = f["diameter"] / 2.0 frustum_height = next_f["topHeight"] - f["topHeight"] @@ -239,5 +270,201 @@ def get_well_volumetric_capacity( ) well_volume.append((next_f["topHeight"], frustum_volume)) - + else: + raise NotImplementedError( + "Well section with differing boundary shapes not yet implemented." + ) return well_volume + + +def height_at_volume_within_section( + top_cross_section: Union[CircularBoundedSection, RectangularBoundedSection], + bottom_cross_section: Union[CircularBoundedSection, RectangularBoundedSection], + target_volume_relative: float, + frustum_height: float, +) -> float: + """Calculate a height within a bounded section according to geometry.""" + if top_cross_section["shape"] == bottom_cross_section["shape"] == "circular": + frustum_height = height_from_volume_circular( + volume=target_volume_relative, + top_radius=(top_cross_section["diameter"] / 2), + bottom_radius=(bottom_cross_section["diameter"] / 2), + total_frustum_height=frustum_height, + ) + elif top_cross_section["shape"] == bottom_cross_section["shape"] == "rectangular": + frustum_height = height_from_volume_rectangular( + volume=target_volume_relative, + total_frustum_height=frustum_height, + bottom_width=bottom_cross_section["xDimension"], + bottom_length=bottom_cross_section["yDimension"], + top_width=top_cross_section["xDimension"], + top_length=top_cross_section["yDimension"], + ) + else: + raise NotImplementedError( + "Height from volume calculation not yet implemented for this well shape." + ) + return frustum_height + + +def volume_at_height_within_section( + top_cross_section: Union[CircularBoundedSection, RectangularBoundedSection], + bottom_cross_section: Union[CircularBoundedSection, RectangularBoundedSection], + target_height_relative: float, + frustum_height: float, +) -> float: + """Calculate a volume within a bounded section according to geometry.""" + if top_cross_section["shape"] == bottom_cross_section["shape"] == "circular": + frustum_volume = volume_from_height_circular( + target_height=target_height_relative, + total_frustum_height=frustum_height, + bottom_radius=(bottom_cross_section["diameter"] / 2), + top_radius=(top_cross_section["diameter"] / 2), + ) + elif top_cross_section["shape"] == bottom_cross_section["shape"] == "rectangular": + frustum_volume = volume_from_height_rectangular( + target_height=target_height_relative, + total_frustum_height=frustum_height, + bottom_width=bottom_cross_section["xDimension"], + bottom_length=bottom_cross_section["yDimension"], + top_width=top_cross_section["xDimension"], + top_length=top_cross_section["yDimension"], + ) + # TODO(cm): this would be the NEST-96 2uL wells referenced in EXEC-712 + # we need to input the math attached to that issue + else: + raise NotImplementedError( + "Height from volume calculation not yet implemented for this well shape." + ) + return frustum_volume + + +def _find_volume_in_partial_frustum( + sorted_frusta: List[Any], + target_height: float, +) -> Optional[float]: + """Look through a sorted list of frusta for a target height, and find the volume at that height.""" + partial_volume: Optional[float] = None + for bottom_cross_section, top_cross_section in get_boundary_pairs(sorted_frusta): + if ( + bottom_cross_section["topHeight"] + < target_height + < top_cross_section["targetHeight"] + ): + relative_target_height = target_height - bottom_cross_section["topHeight"] + frustum_height = ( + top_cross_section["topHeight"] - bottom_cross_section["topHeight"] + ) + partial_volume = volume_at_height_within_section( + top_cross_section=top_cross_section, + bottom_cross_section=bottom_cross_section, + target_height_relative=relative_target_height, + frustum_height=frustum_height, + ) + return partial_volume + + +def find_volume_at_well_height( + target_height: float, well_geometry: InnerWellGeometry +) -> float: + """Find the volume within a well, at a known height.""" + volumetric_capacity = get_well_volumetric_capacity(well_geometry) + max_height = volumetric_capacity[-1][0] + if target_height < 0 or target_height > max_height: + raise InvalidLiquidHeightFound("Invalid target height.") + # volumes in volumetric_capacity are relative to each frustum, + # so we have to find the volume of all the full sections enclosed + # beneath the target height + closed_section_volume = 0.0 + for boundary_height, section_volume in volumetric_capacity: + if boundary_height > target_height: + break + closed_section_volume += section_volume + # if target height is a boundary cross-section, we already know the volume + if target_height == boundary_height: + return closed_section_volume + # find the section the target height is in and compute the volume + # since bottomShape is not in list of frusta, check here first + if well_geometry.bottomShape: + bottom_segment_height = volumetric_capacity[0][0] + if ( + target_height < bottom_segment_height + and well_geometry.bottomShape.shape == "spherical" + ): + return volume_from_height_spherical( + target_height=target_height, + radius_of_curvature=well_geometry.bottomShape.radiusOfCurvature, + ) + sorted_frusta = sorted(well_geometry.frusta, key=lambda section: section.topHeight) + # TODO(cm): handle non-frustum section that is not at the bottom. + partial_volume = _find_volume_in_partial_frustum( + sorted_frusta=sorted_frusta, + target_height=target_height, + ) + if not partial_volume: + raise InvalidLiquidHeightFound("Unable to find volume at given well-height.") + return partial_volume + closed_section_volume + + +def _find_height_in_partial_frustum( + sorted_frusta: List[Any], + volumetric_capacity: List[Tuple[float, float]], + target_volume: float, +) -> Optional[float]: + """Look through a sorted list of frusta for a target volume, and find the height at that volume.""" + well_height: Optional[float] = None + for cross_sections, capacity in zip( + get_boundary_pairs(sorted_frusta), + get_boundary_pairs(volumetric_capacity), + ): + bottom_cross_section, top_cross_section = cross_sections + (bottom_height, bottom_volume), (top_height, top_volume) = capacity + + if bottom_volume < target_volume < top_volume: + relative_target_volume = target_volume - bottom_volume + frustum_height = top_height - bottom_height + partial_height = height_at_volume_within_section( + top_cross_section=top_cross_section, + bottom_cross_section=bottom_cross_section, + target_volume_relative=relative_target_volume, + frustum_height=frustum_height, + ) + well_height = partial_height + bottom_height + return well_height + + +def find_height_at_well_volume( + target_volume: float, well_geometry: InnerWellGeometry +) -> float: + """Find the height within a well, at a known volume.""" + volumetric_capacity = get_well_volumetric_capacity(well_geometry) + max_volume = volumetric_capacity[-1][1] + if target_volume < 0 or target_volume > max_volume: + raise InvalidLiquidHeightFound("Invalid target volume.") + + sorted_frusta = sorted(well_geometry.frusta, key=lambda section: section.topHeight) + # find the section the target volume is in and compute the height + # since bottomShape is not in list of frusta, check here first + if well_geometry.bottomShape: + volume_within_bottom_segment = volumetric_capacity[0][1] + if ( + target_volume < volume_within_bottom_segment + and well_geometry.bottomShape.shape == "spherical" + ): + return height_from_volume_spherical( + volume=target_volume, + radius_of_curvature=well_geometry.bottomShape.radiusOfCurvature, + total_frustum_height=well_geometry.bottomShape.depth, + ) + # if bottom shape is present but doesn't contain the target volume, + # then we need to look through the volumetric capacity list without the bottom shape + # so volumetric_capacity and sorted_frusta will be aligned + volumetric_capacity.pop(0) + well_height = _find_height_in_partial_frustum( + sorted_frusta=sorted_frusta, + volumetric_capacity=volumetric_capacity, + target_volume=target_volume, + ) + if not well_height: + raise InvalidLiquidHeightFound("Unable to find height at given well-volume.") + return well_height diff --git a/api/src/opentrons/protocol_engine/state/geometry.py b/api/src/opentrons/protocol_engine/state/geometry.py index 0e13d13d5fb..e37a460d226 100644 --- a/api/src/opentrons/protocol_engine/state/geometry.py +++ b/api/src/opentrons/protocol_engine/state/geometry.py @@ -55,7 +55,11 @@ from .modules import ModuleView from .pipettes import PipetteView from .addressable_areas import AddressableAreaView -from .frustum_helpers import get_well_volumetric_capacity +from .frustum_helpers import ( + get_well_volumetric_capacity, + find_volume_at_well_height, + find_height_at_well_volume, +) SLOT_WIDTH = 128 @@ -1287,3 +1291,35 @@ def get_well_volumetric_capacity( message=f"No InnerWellGeometry found for well id: {well_id}" ) return get_well_volumetric_capacity(well_geometry) + + def get_volume_at_height( + self, labware_id: str, well_id: str, target_height: float + ) -> float: + """Find the volume at any height within a well.""" + labware_def = self._labware.get_definition(labware_id) + if labware_def.innerLabwareGeometry is None: + raise InvalidWellDefinitionError(message="No InnerLabwareGeometry found.") + well_geometry = labware_def.innerLabwareGeometry.get(well_id) + if well_geometry is None: + raise InvalidWellDefinitionError( + message=f"No InnerWellGeometry found for well id: {well_id}" + ) + return find_volume_at_well_height( + target_height=target_height, well_geometry=well_geometry + ) + + def get_height_at_volume( + self, labware_id: str, well_id: str, target_volume: float + ) -> float: + """Find the height from any volume in a well.""" + labware_def = self._labware.get_definition(labware_id) + if labware_def.innerLabwareGeometry is None: + raise InvalidWellDefinitionError(message="No InnerLabwareGeometry found.") + well_geometry = labware_def.innerLabwareGeometry.get(well_id) + if well_geometry is None: + raise InvalidWellDefinitionError( + message=f"No InnerWellGeometry found for well id: {well_id}" + ) + return find_height_at_well_volume( + target_volume=target_volume, well_geometry=well_geometry + ) diff --git a/api/src/opentrons/protocol_engine/state/labware.py b/api/src/opentrons/protocol_engine/state/labware.py index b01df1fdd8a..78f2124bdb4 100644 --- a/api/src/opentrons/protocol_engine/state/labware.py +++ b/api/src/opentrons/protocol_engine/state/labware.py @@ -15,6 +15,7 @@ Union, ) +from opentrons.protocol_engine.state import update_types from opentrons_shared_data.deck.types import DeckDefinitionV5 from opentrons_shared_data.gripper.constants import LABWARE_GRIP_FORCE from opentrons_shared_data.labware.labware_definition import LabwareRole @@ -27,13 +28,6 @@ from .. import errors from ..resources import DeckFixedLabware, labware_validation, fixture_validation -from ..commands import ( - Command, - absorbance_reader, - LoadLabwareResult, - MoveLabwareResult, - ReloadLabwareResult, -) from ..types import ( DeckSlotLocation, OnLabwareLocation, @@ -155,7 +149,7 @@ def __init__( def handle_action(self, action: Action) -> None: """Modify state in reaction to an action.""" if isinstance(action, SucceedCommandAction): - self._handle_command(action.command) + self._handle_command(action) elif isinstance(action, AddLabwareOffsetAction): labware_offset = LabwareOffset.construct( @@ -175,74 +169,82 @@ def handle_action(self, action: Action) -> None: ) self._state.definitions_by_uri[uri] = action.definition - def _handle_command(self, command: Command) -> None: + def _handle_command(self, action: Action) -> None: """Modify state in reaction to a command.""" - if isinstance(command.result, LoadLabwareResult): + self._add_loaded_labware(action) + self._set_labware_location(action) + + def _add_labware_offset(self, labware_offset: LabwareOffset) -> None: + """Add a new labware offset to state. + + `labware_offset.id` must not match any existing labware offset ID. + `LoadLabwareCommand`s retain references to their corresponding labware offsets + and expect them to be immutable. + """ + assert labware_offset.id not in self._state.labware_offsets_by_id + + self._state.labware_offsets_by_id[labware_offset.id] = labware_offset + + def _add_loaded_labware(self, action: Action) -> None: + if ( + isinstance(action, SucceedCommandAction) + and action.state_update.loaded_labware != update_types.NO_CHANGE + ): # If the labware load refers to an offset, that offset must actually exist. - if command.result.offsetId is not None: - assert command.result.offsetId in self._state.labware_offsets_by_id + if action.state_update.loaded_labware.offset_id is not None: + assert ( + action.state_update.loaded_labware.offset_id + in self._state.labware_offsets_by_id + ) definition_uri = uri_from_details( - namespace=command.result.definition.namespace, - load_name=command.result.definition.parameters.loadName, - version=command.result.definition.version, + namespace=action.state_update.loaded_labware.definition.namespace, + load_name=action.state_update.loaded_labware.definition.parameters.loadName, + version=action.state_update.loaded_labware.definition.version, ) - self._state.definitions_by_uri[definition_uri] = command.result.definition - if isinstance(command.result, LoadLabwareResult): - location = command.params.location - else: - location = self._state.labware_by_id[command.result.labwareId].location + self._state.definitions_by_uri[ + definition_uri + ] = action.state_update.loaded_labware.definition + + location = action.state_update.loaded_labware.new_location + + display_name = action.state_update.loaded_labware.display_name self._state.labware_by_id[ - command.result.labwareId + action.state_update.loaded_labware.labware_id ] = LoadedLabware.construct( - id=command.result.labwareId, + id=action.state_update.loaded_labware.labware_id, location=location, - loadName=command.result.definition.parameters.loadName, + loadName=action.state_update.loaded_labware.definition.parameters.loadName, definitionUri=definition_uri, - offsetId=command.result.offsetId, - displayName=command.params.displayName, + offsetId=action.state_update.loaded_labware.offset_id, + displayName=display_name, ) - elif isinstance(command.result, ReloadLabwareResult): - labware_id = command.params.labwareId - new_offset_id = command.result.offsetId - self._state.labware_by_id[labware_id].offsetId = new_offset_id + def _set_labware_location(self, action: Action) -> None: + if ( + isinstance(action, SucceedCommandAction) + and action.state_update.labware_location != update_types.NO_CHANGE + ): - elif isinstance(command.result, MoveLabwareResult): - labware_id = command.params.labwareId - new_location = command.params.newLocation - new_offset_id = command.result.offsetId + labware_id = action.state_update.labware_location.labware_id + new_offset_id = action.state_update.labware_location.offset_id self._state.labware_by_id[labware_id].offsetId = new_offset_id - if isinstance( - new_location, AddressableAreaLocation - ) and fixture_validation.is_gripper_waste_chute( - new_location.addressableAreaName - ): - # If a labware has been moved into a waste chute it's been chuted away and is now technically off deck - new_location = OFF_DECK_LOCATION - self._state.labware_by_id[labware_id].location = new_location - - elif isinstance(command.result, absorbance_reader.MoveLidResult): - lid_id = command.result.lidId - new_location = command.result.newLocation - new_offset_id = command.result.offsetId - self._state.labware_by_id[lid_id].offsetId = new_offset_id - self._state.labware_by_id[lid_id].location = new_location + if action.state_update.labware_location.new_location: + new_location = action.state_update.labware_location.new_location - def _add_labware_offset(self, labware_offset: LabwareOffset) -> None: - """Add a new labware offset to state. - - `labware_offset.id` must not match any existing labware offset ID. - `LoadLabwareCommand`s retain references to their corresponding labware offsets - and expect them to be immutable. - """ - assert labware_offset.id not in self._state.labware_offsets_by_id + if isinstance( + new_location, AddressableAreaLocation + ) and fixture_validation.is_gripper_waste_chute( + new_location.addressableAreaName + ): + # If a labware has been moved into a waste chute it's been chuted away and is now technically off deck + new_location = OFF_DECK_LOCATION - self._state.labware_offsets_by_id[labware_offset.id] = labware_offset + self._state.labware_by_id[labware_id].location = new_location class LabwareView(HasState[LabwareState]): diff --git a/api/src/opentrons/protocol_engine/state/module_substates/absorbance_reader_substate.py b/api/src/opentrons/protocol_engine/state/module_substates/absorbance_reader_substate.py index 1b92948fc90..33b96aa0881 100644 --- a/api/src/opentrons/protocol_engine/state/module_substates/absorbance_reader_substate.py +++ b/api/src/opentrons/protocol_engine/state/module_substates/absorbance_reader_substate.py @@ -1,11 +1,12 @@ """Heater-Shaker Module sub-state.""" from dataclasses import dataclass -from typing import NewType, Optional, Dict +from typing import List, NewType, Optional, Dict from opentrons.protocol_engine.errors import CannotPerformModuleAction AbsorbanceReaderId = NewType("AbsorbanceReaderId", str) AbsorbanceReaderLidId = NewType("AbsorbanceReaderLidId", str) +AbsorbanceReaderMeasureMode = NewType("AbsorbanceReaderMeasureMode", str) @dataclass(frozen=True) @@ -16,8 +17,10 @@ class AbsorbanceReaderSubState: configured: bool measured: bool is_lid_on: bool - data: Optional[Dict[str, float]] - configured_wavelength: Optional[int] + data: Optional[Dict[int, Dict[str, float]]] + configured_wavelengths: Optional[List[int]] + measure_mode: Optional[AbsorbanceReaderMeasureMode] + reference_wavelength: Optional[int] lid_id: Optional[str] def raise_if_lid_status_not_expected(self, lid_on_expected: bool) -> None: diff --git a/api/src/opentrons/protocol_engine/state/modules.py b/api/src/opentrons/protocol_engine/state/modules.py index 3327020f93e..ca8973b405c 100644 --- a/api/src/opentrons/protocol_engine/state/modules.py +++ b/api/src/opentrons/protocol_engine/state/modules.py @@ -29,6 +29,9 @@ from opentrons.protocol_engine.commands.calibration.calibrate_module import ( CalibrateModuleResult, ) +from opentrons.protocol_engine.state.module_substates.absorbance_reader_substate import ( + AbsorbanceReaderMeasureMode, +) from opentrons.types import DeckSlotName, MountType from ..errors import ModuleNotConnectedError @@ -319,7 +322,9 @@ def _update_absorbance_reader_lid_id( measured=prev_state.measured, is_lid_on=prev_state.is_lid_on, data=prev_state.data, - configured_wavelength=prev_state.configured_wavelength, + measure_mode=prev_state.measure_mode, + configured_wavelengths=prev_state.configured_wavelengths, + reference_wavelength=prev_state.reference_wavelength, lid_id=lid_id, ) @@ -382,29 +387,27 @@ def _add_module_substate( # noqa: C901 module_id=MagneticBlockId(module_id) ) elif ModuleModel.is_absorbance_reader(actual_model): + lid_labware_id = None slot = self._state.slot_by_module_id[module_id] if slot is not None: reader_addressable_area = f"absorbanceReaderV1{slot.value}" - lid_labware_id = None for labware in self._state.deck_fixed_labware: if labware.location == AddressableAreaLocation( addressableAreaName=reader_addressable_area ): lid_labware_id = labware.labware_id break - self._state.substate_by_module_id[module_id] = AbsorbanceReaderSubState( - module_id=AbsorbanceReaderId(module_id), - configured=False, - measured=False, - is_lid_on=True, - data=None, - configured_wavelength=None, - lid_id=lid_labware_id, - ) - else: - raise errors.ModuleNotOnDeckError( - "Opentrons Plate Reader location did not return a valid Deck Slot." - ) + self._state.substate_by_module_id[module_id] = AbsorbanceReaderSubState( + module_id=AbsorbanceReaderId(module_id), + configured=False, + measured=False, + is_lid_on=True, + data=None, + measure_mode=None, + configured_wavelengths=None, + reference_wavelength=None, + lid_id=lid_labware_id, + ) def _update_additional_slots_occupied_by_thermocycler( self, @@ -577,7 +580,6 @@ def _handle_thermocycler_module_commands( target_block_temperature=block_temperature, target_lid_temperature=None, ) - # TODO (spp, 2022-08-01): set is_lid_open to False upon lid commands' failure elif isinstance(command.result, thermocycler.OpenLidResult): self._state.substate_by_module_id[module_id] = ThermocyclerModuleSubState( module_id=ThermocyclerModuleId(module_id), @@ -610,7 +612,9 @@ def _handle_absorbance_reader_commands( # Get current values configured = absorbance_reader_substate.configured - configured_wavelength = absorbance_reader_substate.configured_wavelength + measure_mode = absorbance_reader_substate.measure_mode + configured_wavelengths = absorbance_reader_substate.configured_wavelengths + reference_wavelength = absorbance_reader_substate.reference_wavelength is_lid_on = absorbance_reader_substate.is_lid_on lid_id = absorbance_reader_substate.lid_id data = absorbance_reader_substate.data @@ -621,41 +625,49 @@ def _handle_absorbance_reader_commands( configured=True, measured=False, is_lid_on=is_lid_on, - data=None, - configured_wavelength=command.params.sampleWavelength, lid_id=lid_id, + measure_mode=AbsorbanceReaderMeasureMode(command.params.measureMode), + configured_wavelengths=command.params.sampleWavelengths, + reference_wavelength=command.params.referenceWavelength, + data=None, ) elif isinstance(command.result, absorbance_reader.ReadAbsorbanceResult): self._state.substate_by_module_id[module_id] = AbsorbanceReaderSubState( module_id=AbsorbanceReaderId(module_id), configured=configured, - configured_wavelength=configured_wavelength, - is_lid_on=is_lid_on, measured=True, - data=command.result.data, + is_lid_on=is_lid_on, lid_id=lid_id, + measure_mode=measure_mode, + configured_wavelengths=configured_wavelengths, + reference_wavelength=reference_wavelength, + data=command.result.data, ) elif isinstance(command.result, absorbance_reader.OpenLidResult): self._state.substate_by_module_id[module_id] = AbsorbanceReaderSubState( module_id=AbsorbanceReaderId(module_id), configured=configured, - configured_wavelength=configured_wavelength, - is_lid_on=False, measured=True, - data=data, + is_lid_on=False, lid_id=lid_id, + measure_mode=measure_mode, + configured_wavelengths=configured_wavelengths, + reference_wavelength=reference_wavelength, + data=data, ) elif isinstance(command.result, absorbance_reader.CloseLidResult): self._state.substate_by_module_id[module_id] = AbsorbanceReaderSubState( module_id=AbsorbanceReaderId(module_id), configured=configured, - configured_wavelength=configured_wavelength, - is_lid_on=True, measured=True, - data=data, + is_lid_on=True, lid_id=lid_id, + measure_mode=measure_mode, + configured_wavelengths=configured_wavelengths, + reference_wavelength=reference_wavelength, + data=data, ) diff --git a/api/src/opentrons/protocol_engine/state/pipettes.py b/api/src/opentrons/protocol_engine/state/pipettes.py index 7c77bd979e4..e558d3a0fe6 100644 --- a/api/src/opentrons/protocol_engine/state/pipettes.py +++ b/api/src/opentrons/protocol_engine/state/pipettes.py @@ -16,6 +16,7 @@ from opentrons_shared_data.pipette import pipette_definition from opentrons.config.defaults_ot2 import Z_RETRACT_DISTANCE from opentrons.hardware_control.dev_types import PipetteDict +from opentrons.hardware_control import CriticalPoint from opentrons.hardware_control.nozzle_manager import ( NozzleConfigurationType, NozzleMap, @@ -37,10 +38,6 @@ CurrentPipetteLocation, TipGeometry, ) -from ..commands.configuring_common import ( - PipetteConfigUpdateResultMixin, - PipetteNozzleLayoutResultMixin, -) from ..actions import ( Action, SetPipetteMovementSpeedAction, @@ -148,72 +145,32 @@ def handle_action(self, action: Action) -> None: elif isinstance(action, SetPipetteMovementSpeedAction): self._state.movement_speed_by_id[action.pipette_id] = action.speed - def _handle_command( # noqa: C901 + def _handle_command( self, action: Union[SucceedCommandAction, FailCommandAction] ) -> None: + self._set_load_pipette(action) self._update_current_location(action) + self._update_pipette_config(action) + self._update_pipette_nozzle_map(action) + self._update_tip_state(action) self._update_volumes(action) - if not isinstance(action, SucceedCommandAction): - return - - command, private_result = action.command, action.private_result - - if isinstance(private_result, PipetteConfigUpdateResultMixin): - config = private_result.config - self._state.static_config_by_id[ - private_result.pipette_id - ] = StaticPipetteConfig( - serial_number=private_result.serial_number, - model=config.model, - display_name=config.display_name, - min_volume=config.min_volume, - max_volume=config.max_volume, - channels=config.channels, - tip_configuration_lookup_table=config.tip_configuration_lookup_table, - nominal_tip_overlap=config.nominal_tip_overlap, - home_position=config.home_position, - nozzle_offset_z=config.nozzle_offset_z, - pipette_bounding_box_offsets=PipetteBoundingBoxOffsets( - back_left_corner=config.back_left_corner_offset, - front_right_corner=config.front_right_corner_offset, - back_right_corner=Point( - config.front_right_corner_offset.x, - config.back_left_corner_offset.y, - config.back_left_corner_offset.z, - ), - front_left_corner=Point( - config.back_left_corner_offset.x, - config.front_right_corner_offset.y, - config.back_left_corner_offset.z, - ), - ), - bounding_nozzle_offsets=BoundingNozzlesOffsets( - back_left_offset=config.nozzle_map.back_left_nozzle_offset, - front_right_offset=config.nozzle_map.front_right_nozzle_offset, - ), - default_nozzle_map=config.nozzle_map, - lld_settings=config.pipette_lld_settings, - ) - self._state.flow_rates_by_id[private_result.pipette_id] = config.flow_rates - self._state.nozzle_configuration_by_id[ - private_result.pipette_id - ] = config.nozzle_map - elif isinstance(private_result, PipetteNozzleLayoutResultMixin): - self._state.nozzle_configuration_by_id[ - private_result.pipette_id - ] = private_result.nozzle_map - - if isinstance(command.result, commands.LoadPipetteResult): - pipette_id = command.result.pipetteId + def _set_load_pipette( + self, action: Union[SucceedCommandAction, FailCommandAction] + ) -> None: + if ( + isinstance(action, SucceedCommandAction) + and action.state_update.loaded_pipette != update_types.NO_CHANGE + ): + pipette_id = action.state_update.loaded_pipette.pipette_id self._state.pipettes_by_id[pipette_id] = LoadedPipette( id=pipette_id, - pipetteName=command.params.pipetteName, - mount=command.params.mount, + pipetteName=action.state_update.loaded_pipette.pipette_name, + mount=action.state_update.loaded_pipette.mount, ) self._state.liquid_presence_detection_by_id[pipette_id] = ( - command.params.liquidPresenceDetection or False + action.state_update.loaded_pipette.liquid_presence_detection or False ) self._state.aspirated_volume_by_id[pipette_id] = None self._state.movement_speed_by_id[pipette_id] = None @@ -224,61 +181,60 @@ def _handle_command( # noqa: C901 pipette_id ] = static_config.default_nozzle_map - elif isinstance(command.result, commands.PickUpTipResult): - pipette_id = command.params.pipetteId - attached_tip = TipGeometry( - length=command.result.tipLength, - volume=command.result.tipVolume, - diameter=command.result.tipDiameter, - ) + def _update_tip_state( + self, action: Union[SucceedCommandAction, FailCommandAction] + ) -> None: - self._state.attached_tip_by_id[pipette_id] = attached_tip - self._state.aspirated_volume_by_id[pipette_id] = 0 + if ( + isinstance(action, SucceedCommandAction) + and action.state_update.pipette_tip_state != update_types.NO_CHANGE + ): + pipette_id = action.state_update.pipette_tip_state.pipette_id + if action.state_update.pipette_tip_state.tip_geometry: + attached_tip = action.state_update.pipette_tip_state.tip_geometry + + self._state.attached_tip_by_id[pipette_id] = attached_tip + self._state.aspirated_volume_by_id[pipette_id] = 0 + + static_config = self._state.static_config_by_id.get(pipette_id) + if static_config: + try: + tip_configuration = ( + static_config.tip_configuration_lookup_table[ + attached_tip.volume + ] + ) + except KeyError: + # TODO(seth,9/11/2023): this is a bad way of doing defaults but better than max volume. + # we used to look up a default tip config via the pipette max volume, but if that isn't + # tip volume (as it isn't when we're in low-volume mode) then that lookup fails. Using + # the first entry in the table is ok I guess but we really need to generally rethink how + # we identify tip classes - looking things up by volume is not enough. + tip_configuration = list( + static_config.tip_configuration_lookup_table.values() + )[0] + self._state.flow_rates_by_id[pipette_id] = FlowRates( + default_blow_out=tip_configuration.default_blowout_flowrate.values_by_api_level, + default_aspirate=tip_configuration.default_aspirate_flowrate.values_by_api_level, + default_dispense=tip_configuration.default_dispense_flowrate.values_by_api_level, + ) - static_config = self._state.static_config_by_id.get(pipette_id) - if static_config: - try: - tip_configuration = static_config.tip_configuration_lookup_table[ - attached_tip.volume - ] - except KeyError: - # TODO(seth,9/11/2023): this is a bad way of doing defaults but better than max volume. - # we used to look up a default tip config via the pipette max volume, but if that isn't - # tip volume (as it isn't when we're in low-volume mode) then that lookup fails. Using - # the first entry in the table is ok I guess but we really need to generally rethink how - # we identify tip classes - looking things up by volume is not enough. + else: + pipette_id = action.state_update.pipette_tip_state.pipette_id + self._state.aspirated_volume_by_id[pipette_id] = None + self._state.attached_tip_by_id[pipette_id] = None + + static_config = self._state.static_config_by_id.get(pipette_id) + if static_config: + # TODO(seth,9/11/2023): bad way to do defaulting, see above. tip_configuration = list( static_config.tip_configuration_lookup_table.values() )[0] - self._state.flow_rates_by_id[pipette_id] = FlowRates( - default_blow_out=tip_configuration.default_blowout_flowrate.values_by_api_level, - default_aspirate=tip_configuration.default_aspirate_flowrate.values_by_api_level, - default_dispense=tip_configuration.default_dispense_flowrate.values_by_api_level, - ) - - elif isinstance( - command.result, - ( - commands.DropTipResult, - commands.DropTipInPlaceResult, - commands.unsafe.UnsafeDropTipInPlaceResult, - ), - ): - pipette_id = command.params.pipetteId - self._state.aspirated_volume_by_id[pipette_id] = None - self._state.attached_tip_by_id[pipette_id] = None - - static_config = self._state.static_config_by_id.get(pipette_id) - if static_config: - # TODO(seth,9/11/2023): bad way to do defaulting, see above. - tip_configuration = list( - static_config.tip_configuration_lookup_table.values() - )[0] - self._state.flow_rates_by_id[pipette_id] = FlowRates( - default_blow_out=tip_configuration.default_blowout_flowrate.values_by_api_level, - default_aspirate=tip_configuration.default_aspirate_flowrate.values_by_api_level, - default_dispense=tip_configuration.default_dispense_flowrate.values_by_api_level, - ) + self._state.flow_rates_by_id[pipette_id] = FlowRates( + default_blow_out=tip_configuration.default_blowout_flowrate.values_by_api_level, + default_aspirate=tip_configuration.default_aspirate_flowrate.values_by_api_level, + default_dispense=tip_configuration.default_dispense_flowrate.values_by_api_level, + ) def _update_current_location( self, action: Union[SucceedCommandAction, FailCommandAction] @@ -326,6 +282,66 @@ def _update_current_location( mount=loaded_pipette.mount, deck_point=new_deck_point ) + def _update_pipette_config( + self, action: Union[SucceedCommandAction, FailCommandAction] + ) -> None: + if ( + isinstance(action, SucceedCommandAction) + and action.state_update.pipette_config != update_types.NO_CHANGE + ): + config = action.state_update.pipette_config.config + self._state.static_config_by_id[ + action.state_update.pipette_config.pipette_id + ] = StaticPipetteConfig( + serial_number=action.state_update.pipette_config.serial_number, + model=config.model, + display_name=config.display_name, + min_volume=config.min_volume, + max_volume=config.max_volume, + channels=config.channels, + tip_configuration_lookup_table=config.tip_configuration_lookup_table, + nominal_tip_overlap=config.nominal_tip_overlap, + home_position=config.home_position, + nozzle_offset_z=config.nozzle_offset_z, + pipette_bounding_box_offsets=PipetteBoundingBoxOffsets( + back_left_corner=config.back_left_corner_offset, + front_right_corner=config.front_right_corner_offset, + back_right_corner=Point( + config.front_right_corner_offset.x, + config.back_left_corner_offset.y, + config.back_left_corner_offset.z, + ), + front_left_corner=Point( + config.back_left_corner_offset.x, + config.front_right_corner_offset.y, + config.back_left_corner_offset.z, + ), + ), + bounding_nozzle_offsets=BoundingNozzlesOffsets( + back_left_offset=config.nozzle_map.back_left_nozzle_offset, + front_right_offset=config.nozzle_map.front_right_nozzle_offset, + ), + default_nozzle_map=config.nozzle_map, + lld_settings=config.pipette_lld_settings, + ) + self._state.flow_rates_by_id[ + action.state_update.pipette_config.pipette_id + ] = config.flow_rates + self._state.nozzle_configuration_by_id[ + action.state_update.pipette_config.pipette_id + ] = config.nozzle_map + + def _update_pipette_nozzle_map( + self, action: Union[SucceedCommandAction, FailCommandAction] + ) -> None: + if ( + isinstance(action, SucceedCommandAction) + and action.state_update.pipette_nozzle_map != update_types.NO_CHANGE + ): + self._state.nozzle_configuration_by_id[ + action.state_update.pipette_nozzle_map.pipette_id + ] = action.state_update.pipette_nozzle_map.nozzle_map + def _update_volumes( self, action: Union[SucceedCommandAction, FailCommandAction] ) -> None: @@ -474,7 +490,7 @@ def get_aspirated_volume(self, pipette_id: str) -> Optional[float]: Returns: The volume the pipette has aspirated. - None, after blow-out and the plunger is in an unsafe position or drop-tip and there is no tip attached. + None, after blow-out and the plunger is in an unsafe position. Raises: PipetteNotLoadedError: pipette ID does not exist. @@ -659,17 +675,27 @@ def get_primary_nozzle(self, pipette_id: str) -> Optional[str]: nozzle_map = self._state.nozzle_configuration_by_id.get(pipette_id) return nozzle_map.starting_nozzle if nozzle_map else None - def get_primary_nozzle_offset(self, pipette_id: str) -> Point: - """Get the pipette's current primary nozzle's offset.""" + def _get_critical_point_offset_without_tip( + self, pipette_id: str, critical_point: Optional[CriticalPoint] + ) -> Point: + """Get the offset of the specified critical point from pipette's mount position.""" nozzle_map = self._state.nozzle_configuration_by_id.get(pipette_id) - if nozzle_map: - primary_nozzle_offset = nozzle_map.starting_nozzle_offset - else: - # When not in partial configuration, back-left nozzle is the primary - primary_nozzle_offset = self.get_config( - pipette_id - ).bounding_nozzle_offsets.back_left_offset - return primary_nozzle_offset + # Nozzle map is unavailable only when there's no pipette loaded + # so this is merely for satisfying the type checker + assert ( + nozzle_map is not None + ), "Error getting critical point offset. Nozzle map not found." + match critical_point: + case CriticalPoint.INSTRUMENT_XY_CENTER: + return nozzle_map.instrument_xy_center_offset + case CriticalPoint.XY_CENTER: + return nozzle_map.xy_center_offset + case CriticalPoint.Y_CENTER: + return nozzle_map.y_center_offset + case CriticalPoint.FRONT_NOZZLE: + return nozzle_map.front_nozzle_offset + case _: + return nozzle_map.starting_nozzle_offset def get_pipette_bounding_nozzle_offsets( self, pipette_id: str @@ -681,32 +707,46 @@ def get_pipette_bounding_box(self, pipette_id: str) -> PipetteBoundingBoxOffsets """Get the bounding box of the pipette.""" return self.get_config(pipette_id).pipette_bounding_box_offsets + # TODO (spp, 2024-09-17): in order to find the position of pipette at destination, + # this method repeats the same steps that waypoints builder does while finding + # waypoints to move to. We should consolidate these steps into a shared entity + # so that the deck conflict checker and movement plan builder always remain in sync. def get_pipette_bounds_at_specified_move_to_position( self, pipette_id: str, destination_position: Point, + critical_point: Optional[CriticalPoint], ) -> Tuple[Point, Point, Point, Point]: - """Get the pipette's bounding offsets when primary nozzle is at the given position.""" - primary_nozzle_offset = self.get_primary_nozzle_offset(pipette_id) + """Get the pipette's bounding box position when critical point is at the destination position. + + Returns a tuple of the pipette's bounding box position in deck coordinates as- + (back_left_bound, front_right_bound, back_right_bound, front_left_bound) + Bounding box of the pipette includes the pipette's outer casing as well as nozzles. + """ tip = self.get_attached_tip(pipette_id) - # TODO update this for pipette robot stackup - # Primary nozzle position at destination, in deck coordinates - primary_nozzle_position = destination_position + Point( + + # *Offset* of pipette's critical point w.r.t pipette mount + critical_point_offset = self._get_critical_point_offset_without_tip( + pipette_id, critical_point + ) + + # Position of the above critical point at destination, in deck coordinates + critical_point_position = destination_position + Point( x=0, y=0, z=tip.length if tip else 0 ) - # Get the pipette bounding box based on total nozzles + # Get the pipette bounding box coordinates pipette_bounds_offsets = self.get_config( pipette_id ).pipette_bounding_box_offsets pip_back_left_bound = ( - primary_nozzle_position - - primary_nozzle_offset + critical_point_position + - critical_point_offset + pipette_bounds_offsets.back_left_corner ) pip_front_right_bound = ( - primary_nozzle_position - - primary_nozzle_offset + critical_point_position + - critical_point_offset + pipette_bounds_offsets.front_right_corner ) pip_back_right_bound = Point( diff --git a/api/src/opentrons/protocol_engine/state/tips.py b/api/src/opentrons/protocol_engine/state/tips.py index a2c75ba2af4..7b50b291f4d 100644 --- a/api/src/opentrons/protocol_engine/state/tips.py +++ b/api/src/opentrons/protocol_engine/state/tips.py @@ -486,6 +486,10 @@ def get_pipette_nozzle_map(self, pipette_id: str) -> NozzleMap: """Get the current nozzle map the given pipette's configuration.""" return self._state.nozzle_map_by_pipette_id[pipette_id] + def get_pipette_nozzle_maps(self) -> Dict[str, NozzleMap]: + """Get current nozzle maps keyed by pipette id.""" + return self._state.nozzle_map_by_pipette_id + def has_clean_tip(self, labware_id: str, well_name: str) -> bool: """Get whether a well in a labware has a clean tip. diff --git a/api/src/opentrons/protocol_engine/state/update_types.py b/api/src/opentrons/protocol_engine/state/update_types.py index 230e967bb07..91cdf0194a3 100644 --- a/api/src/opentrons/protocol_engine/state/update_types.py +++ b/api/src/opentrons/protocol_engine/state/update_types.py @@ -5,7 +5,12 @@ import enum import typing -from opentrons.protocol_engine.types import DeckPoint +from opentrons.hardware_control.nozzle_manager import NozzleMap +from opentrons.protocol_engine.resources import pipette_data_provider +from opentrons.protocol_engine.types import DeckPoint, LabwareLocation, TipGeometry +from opentrons.types import MountType +from opentrons_shared_data.labware.labware_definition import LabwareDefinition +from opentrons_shared_data.pipette.types import PipetteNameType class _NoChangeEnum(enum.Enum): @@ -75,12 +80,80 @@ class PipetteLocationUpdate: new_deck_point: DeckPoint | NoChangeType +@dataclasses.dataclass +class LabwareLocationUpdate: + """Represents an update to perform on a labware's location.""" + + labware_id: str + + new_location: LabwareLocation + """The labware's new logical location.""" + + offset_id: typing.Optional[str] + + +@dataclasses.dataclass +class LoadedLabwareUpdate(LabwareLocationUpdate): + """Update loaded labware.""" + + display_name: typing.Optional[str] + + definition: LabwareDefinition + + +@dataclasses.dataclass +class LoadPipetteUpdate: + """Update loaded pipette.""" + + pipette_id: str + pipette_name: PipetteNameType + mount: MountType + liquid_presence_detection: typing.Optional[bool] + + +@dataclasses.dataclass +class PipetteConfigUpdate: + """Update pipette config.""" + + pipette_id: str + serial_number: str + config: pipette_data_provider.LoadedStaticPipetteData + + +@dataclasses.dataclass +class PipetteNozzleMapUpdate: + """Update pipette nozzle map.""" + + pipette_id: str + nozzle_map: NozzleMap + + +@dataclasses.dataclass +class PipetteTipStateUpdate: + """Update pipette tip state.""" + + pipette_id: str + tip_geometry: typing.Optional[TipGeometry] + + @dataclasses.dataclass class StateUpdate: """Represents an update to perform on engine state.""" pipette_location: PipetteLocationUpdate | NoChangeType | ClearType = NO_CHANGE + loaded_pipette: LoadPipetteUpdate | NoChangeType = NO_CHANGE + + pipette_config: PipetteConfigUpdate | NoChangeType = NO_CHANGE + + pipette_nozzle_map: PipetteNozzleMapUpdate | NoChangeType = NO_CHANGE + + pipette_tip_state: PipetteTipStateUpdate | NoChangeType = NO_CHANGE + + labware_location: LabwareLocationUpdate | NoChangeType = NO_CHANGE + + loaded_labware: LoadedLabwareUpdate | NoChangeType = NO_CHANGE + # These convenience functions let the caller avoid the boilerplate of constructing a # complicated dataclass tree, and they give us a @@ -134,6 +207,77 @@ def set_pipette_location( # noqa: D102 new_deck_point=new_deck_point, ) + def set_labware_location( + self, + *, + labware_id: str, + new_location: LabwareLocation, + new_offset_id: str | None, + ) -> None: + """Set labware location.""" + self.labware_location = LabwareLocationUpdate( + labware_id=labware_id, + new_location=new_location, + offset_id=new_offset_id, + ) + + def set_loaded_labware( + self, + definition: LabwareDefinition, + labware_id: str, + offset_id: typing.Optional[str], + display_name: typing.Optional[str], + location: LabwareLocation, + ) -> None: + """Add loaded labware to state.""" + self.loaded_labware = LoadedLabwareUpdate( + definition=definition, + labware_id=labware_id, + offset_id=offset_id, + new_location=location, + display_name=display_name, + ) + def clear_all_pipette_locations(self) -> None: """Mark all pipettes as having an unknown location.""" self.pipette_location = CLEAR + + def set_load_pipette( + self, + pipette_id: str, + pipette_name: PipetteNameType, + mount: MountType, + liquid_presence_detection: typing.Optional[bool], + ) -> None: + """Add loaded pipette to state.""" + self.loaded_pipette = LoadPipetteUpdate( + pipette_id=pipette_id, + pipette_name=pipette_name, + mount=mount, + liquid_presence_detection=liquid_presence_detection, + ) + + def update_pipette_config( + self, + pipette_id: str, + config: pipette_data_provider.LoadedStaticPipetteData, + serial_number: str, + ) -> None: + """Update pipette config.""" + self.pipette_config = PipetteConfigUpdate( + pipette_id=pipette_id, config=config, serial_number=serial_number + ) + + def update_pipette_nozzle(self, pipette_id: str, nozzle_map: NozzleMap) -> None: + """Update pipette nozzle map.""" + self.pipette_nozzle_map = PipetteNozzleMapUpdate( + pipette_id=pipette_id, nozzle_map=nozzle_map + ) + + def update_tip_state( + self, pipette_id: str, tip_geometry: typing.Optional[TipGeometry] + ) -> None: + """Update tip state.""" + self.pipette_tip_state = PipetteTipStateUpdate( + pipette_id=pipette_id, tip_geometry=tip_geometry + ) diff --git a/api/src/opentrons/protocol_engine/types.py b/api/src/opentrons/protocol_engine/types.py index 519d39b6ec7..e011b43fd7f 100644 --- a/api/src/opentrons/protocol_engine/types.py +++ b/api/src/opentrons/protocol_engine/types.py @@ -1089,3 +1089,6 @@ class CSVParameter(RTPBase): CSVRunTimeParamFilesType = Mapping[StrictStr, StrictStr] CSVRuntimeParamPaths = Dict[str, Path] + + +ABSMeasureMode = Literal["single", "multi"] diff --git a/api/src/opentrons/protocol_reader/file_format_validator.py b/api/src/opentrons/protocol_reader/file_format_validator.py index f13d1339041..df119ac3ffa 100644 --- a/api/src/opentrons/protocol_reader/file_format_validator.py +++ b/api/src/opentrons/protocol_reader/file_format_validator.py @@ -1,5 +1,5 @@ """File format validation interface.""" - +from __future__ import annotations from typing import Iterable @@ -29,6 +29,16 @@ class FileFormatValidationError(ProtocolFilesInvalidError): """Raised when a file does not conform to the format it's supposed to.""" + @classmethod + def _generic_json_failure( + cls, info: IdentifiedJsonMain, exc: Exception + ) -> FileFormatValidationError: + return cls( + message=f"{info.original_file.name} could not be read as a JSON protocol.", + detail={"kind": "bad-json-protocol"}, + wrapping=[PythonException(exc)], + ) + class FileFormatValidator: """File format validation interface.""" @@ -61,22 +71,80 @@ def validate_sync() -> None: await anyio.to_thread.run_sync(validate_sync) +def _handle_v8_json_protocol_validation_error( + info: IdentifiedJsonMain, pve: PydanticValidationError +) -> None: + for error in pve.errors(): + if error["loc"] == ("commandSchemaId",) and error["type"] == "type_error.enum": + # type_error.enum is for "this entry is not in this enum" and happens if you constrain a field by + # annotating it with Enum, as we now do for command schema IDs + raise FileFormatValidationError( + message=( + f"{info.original_file.name} could not be read as a JSON protocol, in part because its command schema " + "id is unknown. This protocol may have been exported from a future version of authorship software. " + "Updating your Opentrons software may help." + ), + detail={ + "kind": "bad-command-schema-id", + "command-schema-id": info.unvalidated_json.get( + "commandSchemaId", "" + ), + }, + wrapping=[PythonException(pve)], + ) from pve + if ( + error["loc"] == ("labwareDefinitionSchemaId",) + and error["type"] == "value_error.const" + ): + # value_error.const is for "this entry is not one of these const values", which is different from type_error.enum + # for I'm sure a very good reason, and happens if you constrain a field by annotating it with a Literal + raise FileFormatValidationError( + message=( + f"{info.original_file.name} could not be read as a JSON protocol, in part because its labware schema " + "id is unknown. This protocol may have been exported from a future version of authorship software. " + "Updating your Opentrons software may help." + ), + detail={ + "kind": "bad-labware-schema-id", + "labware-schema-id": info.unvalidated_json.get( + "labwareDefinitionSchemaId", "" + ), + }, + ) + if error["loc"] == ("liquidSchemaId",) and error["type"] == "value_error.const": + raise FileFormatValidationError( + message=( + f"{info.original_file.name} could not be read as a JSON protocol, in part because its liquid schema " + "id is unknown. This protocol may have been exported from a future version of authorship software. " + "Updating your Opentrons software may help." + ), + detail={ + "kind": "bad-liquid-schema-id", + "liquid-schema-id": info.unvalidated_json.get( + "liquidSchemaId", "" + ), + }, + ) + else: + raise FileFormatValidationError._generic_json_failure(info, pve) from pve + + async def _validate_json_protocol(info: IdentifiedJsonMain) -> None: def validate_sync() -> None: - try: - if info.schema_version == 8: + if info.schema_version == 8: + try: JsonProtocolV8.parse_obj(info.unvalidated_json) - elif info.schema_version == 7: - JsonProtocolV7.parse_obj(info.unvalidated_json) - elif info.schema_version == 6: - JsonProtocolV6.parse_obj(info.unvalidated_json) - else: - JsonProtocolUpToV5.parse_obj(info.unvalidated_json) - except PydanticValidationError as e: - raise FileFormatValidationError( - message=f"{info.original_file.name} could not be read as a JSON protocol.", - detail={"kind": "bad-json-protocol"}, - wrapping=[PythonException(e)], - ) from e + except PydanticValidationError as pve: + _handle_v8_json_protocol_validation_error(info, pve) + else: + try: + if info.schema_version == 7: + JsonProtocolV7.parse_obj(info.unvalidated_json) + elif info.schema_version == 6: + JsonProtocolV6.parse_obj(info.unvalidated_json) + else: + JsonProtocolUpToV5.parse_obj(info.unvalidated_json) + except PydanticValidationError as e: + raise FileFormatValidationError._generic_json_failure(info, e) from e await anyio.to_thread.run_sync(validate_sync) diff --git a/api/src/opentrons/protocol_runner/json_translator.py b/api/src/opentrons/protocol_runner/json_translator.py index 65410662e77..6c670baf97a 100644 --- a/api/src/opentrons/protocol_runner/json_translator.py +++ b/api/src/opentrons/protocol_runner/json_translator.py @@ -1,6 +1,6 @@ """Translation of JSON protocol commands into ProtocolEngine commands.""" -from typing import cast, List, Union -from pydantic import parse_obj_as +from typing import cast, List, Union, Iterator +from pydantic import parse_obj_as, ValidationError as PydanticValidationError from opentrons_shared_data.pipette.types import PipetteNameType from opentrons_shared_data.protocol.models import ( @@ -12,6 +12,7 @@ protocol_schema_v8, ) from opentrons_shared_data import command as command_schema +from opentrons_shared_data.errors.exceptions import InvalidProtocolData, PythonException from opentrons.types import MountType from opentrons.protocol_engine import ( @@ -196,7 +197,7 @@ class JsonTranslator: """Class that translates commands/liquids from PD/JSON to ProtocolEngine.""" def translate_liquids( - self, protocol: Union[ProtocolSchemaV6, ProtocolSchemaV7] + self, protocol: Union[ProtocolSchemaV6, ProtocolSchemaV7, ProtocolSchemaV8] ) -> List[Liquid]: """Takes json protocol v6 and translates liquids->protocol engine liquids.""" protocol_liquids = protocol.liquids or {} @@ -258,7 +259,8 @@ def _translate_v8_commands( self, protocol: ProtocolSchemaV8 ) -> List[pe_commands.CommandCreate]: """Translate commands in json protocol schema v8, which might be of different command schemas.""" - command_schema_ref = protocol.commandSchemaId + command_schema_ref = protocol.commandSchemaId.value + # these calls will raise if the command schema version is invalid or unknown command_schema_version = command_schema.schema_version_from_ref( command_schema_ref @@ -267,4 +269,18 @@ def _translate_v8_commands( command_schema_version ) - return [_translate_simple_command(command) for command in protocol.commands] + def translate_all_commands() -> Iterator[pe_commands.CommandCreate]: + for command in protocol.commands: + try: + yield _translate_simple_command(command) + except PydanticValidationError as pve: + raise InvalidProtocolData( + message=( + "The protocol is invalid because it contains an unknown or malformed command, " + f'"{command.commandType}".' + ), + detail={"kind": "invalid-command"}, + wrapping=[PythonException(pve)], + ) + + return list(translate_all_commands()) diff --git a/api/src/opentrons/protocol_runner/legacy_command_mapper.py b/api/src/opentrons/protocol_runner/legacy_command_mapper.py index 2e46e64663c..686560c1ca2 100644 --- a/api/src/opentrons/protocol_runner/legacy_command_mapper.py +++ b/api/src/opentrons/protocol_runner/legacy_command_mapper.py @@ -34,7 +34,9 @@ ModuleDataProvider, pipette_data_provider, ) -from opentrons.protocol_engine.state.update_types import StateUpdate +from opentrons.protocol_engine.state.update_types import ( + StateUpdate, +) from opentrons_shared_data.labware.labware_definition import LabwareDefinition from opentrons_shared_data.errors import ErrorCodes, EnumeratedError, PythonException @@ -675,10 +677,20 @@ def _map_labware_load( # We just set this above, so we know it's not None. started_at=succeeded_command.startedAt, # type: ignore[arg-type] ) + state_update = StateUpdate() + assert succeeded_command.result is not None + state_update.set_loaded_labware( + labware_id=labware_id, + definition=succeeded_command.result.definition, + display_name=labware_load_info.labware_display_name, + offset_id=labware_load_info.offset_id, + location=location, + ) + succeed_action = pe_actions.SucceedCommandAction( command=succeeded_command, private_result=None, - state_update=StateUpdate(), + state_update=state_update, ) self._command_count["LOAD_LABWARE"] = count + 1 @@ -742,10 +754,17 @@ def _map_instrument_load( # We just set this above, so we know it's not None. started_at=succeeded_command.startedAt, # type: ignore[arg-type] ) + state_update = StateUpdate() + state_update.set_load_pipette( + pipette_id=pipette_id, + mount=succeeded_command.params.mount, + pipette_name=succeeded_command.params.pipetteName, + liquid_presence_detection=succeeded_command.params.liquidPresenceDetection, + ) succeed_action = pe_actions.SucceedCommandAction( command=succeeded_command, private_result=pipette_config_result, - state_update=StateUpdate(), + state_update=state_update, ) self._command_count["LOAD_PIPETTE"] = count + 1 diff --git a/api/src/opentrons/protocol_runner/run_orchestrator.py b/api/src/opentrons/protocol_runner/run_orchestrator.py index 9bb5c330788..697e4a14e3a 100644 --- a/api/src/opentrons/protocol_runner/run_orchestrator.py +++ b/api/src/opentrons/protocol_runner/run_orchestrator.py @@ -14,6 +14,7 @@ from . import protocol_runner, RunResult, JsonRunner, PythonAndLegacyRunner from ..hardware_control import HardwareControlAPI from ..hardware_control.modules import AbstractModule as HardwareModuleAPI +from ..hardware_control.nozzle_manager import NozzleMap from ..protocol_engine import ( ProtocolEngine, CommandCreate, @@ -397,6 +398,10 @@ def get_deck_type(self) -> DeckType: """Get engine deck type.""" return self._protocol_engine.state_view.config.deck_type + def get_nozzle_maps(self) -> Dict[str, NozzleMap]: + """Get current nozzle maps keyed by pipette id.""" + return self._protocol_engine.state_view.tips.get_pipette_nozzle_maps() + def set_error_recovery_policy(self, policy: ErrorRecoveryPolicy) -> None: """Create error recovery policy for the run.""" self._protocol_engine.set_error_recovery_policy(policy) diff --git a/api/src/opentrons/protocols/api_support/types.py b/api/src/opentrons/protocols/api_support/types.py index 6d3af89bcf9..d16fa8ddf73 100644 --- a/api/src/opentrons/protocols/api_support/types.py +++ b/api/src/opentrons/protocols/api_support/types.py @@ -1,5 +1,5 @@ from __future__ import annotations -from typing import NamedTuple +from typing import NamedTuple, TypedDict class APIVersion(NamedTuple): @@ -17,3 +17,16 @@ def from_string(cls, inp: str) -> APIVersion: def __str__(self) -> str: return f"{self.major}.{self.minor}" + + +class ThermocyclerStepBase(TypedDict): + """Required elements of a thermocycler step: the temperature.""" + + temperature: float + + +class ThermocyclerStep(ThermocyclerStepBase, total=False): + """Optional elements of a thermocycler step: the hold time. One of these must be present.""" + + hold_time_seconds: float + hold_time_minutes: float diff --git a/api/src/opentrons/simulate.py b/api/src/opentrons/simulate.py index 62806edb048..23f6c7fdfb9 100644 --- a/api/src/opentrons/simulate.py +++ b/api/src/opentrons/simulate.py @@ -883,8 +883,6 @@ def _run_file_non_pe( context.home() with scraper.scrape(): try: - # TODO (spp, 2024-03-18): use true run-time param overrides once enabled - # for cli protocol simulation/ execution execute.run_protocol( protocol, context, run_time_parameters_with_overrides=None ) @@ -914,6 +912,7 @@ def _run_file_pe( log_level: str, ) -> _SimulateResult: """Run a protocol file with Protocol Engine.""" + # TODO (spp, 2024-03-18): use run-time param overrides once enabled for cli protocol simulation. async def run(protocol_source: ProtocolSource) -> _SimulateResult: hardware_api_wrapped = hardware_api.wrapped() diff --git a/api/tests/opentrons/cli/test_cli.py b/api/tests/opentrons/cli/test_cli.py index 79d46dc1000..717e2ac6a2d 100644 --- a/api/tests/opentrons/cli/test_cli.py +++ b/api/tests/opentrons/cli/test_cli.py @@ -28,7 +28,11 @@ class _AnalysisCLIResult: def _get_analysis_result( - protocol_files: List[Path], output_type: str, check: bool = False + protocol_files: List[Path], + output_type: str, + check: bool = False, + rtp_values: Optional[str] = None, + rtp_files: Optional[str] = None, ) -> _AnalysisCLIResult: """Run `protocol_files` as a single protocol through the analysis CLI. @@ -41,11 +45,16 @@ def _get_analysis_result( with tempfile.TemporaryDirectory() as temp_dir: analysis_output_file = Path(temp_dir) / "analysis_output.json" runner = CliRunner() - args = [ - output_type, - str(analysis_output_file), - *[str(p.resolve()) for p in protocol_files], - ] + args = [output_type, str(analysis_output_file)] + + if rtp_values is not None: + args.extend(["--rtp-values", rtp_values]) + + if rtp_files is not None: + args.extend(["--rtp-files", rtp_files]) + + args.extend([str(p.resolve()) for p in protocol_files]) + if check: args.append("--check") @@ -262,6 +271,61 @@ def test_python_error_line_numbers( assert error["detail"] == expected_detail +@pytest.mark.parametrize("output", ["--json-output", "--human-json-output"]) +def test_run_time_parameter_setting( + tmp_path: Path, + output: str, +) -> None: + """Test that a RTP can be set to a non default value for analysis. + + Also verify that analysis result contains all static data about the protocol. + """ + python_protocol_source = textwrap.dedent( + """\ + requirements = {"robotType": "OT-2", "apiLevel": "2.18"} + + def add_parameters(parameters): + parameters.add_bool( + display_name="Dry Run", + variable_name="dry_run", + default=False, + ) + def run(protocol): + pass + """ + ) + protocol_source_file = tmp_path / "protocol.py" + protocol_source_file.write_text(python_protocol_source, encoding="utf-8") + result = _get_analysis_result( + [protocol_source_file], output, rtp_values=json.dumps({"dry_run": True}) + ) + + assert result.exit_code == 0 + + assert result.json_output is not None + assert result.json_output["robotType"] == "OT-2 Standard" + assert result.json_output["result"] == AnalysisResult.OK + assert result.json_output["pipettes"] == [] + assert result.json_output["commands"] # There should be a home command + assert result.json_output["labware"] == [] + assert result.json_output["liquids"] == [] + assert result.json_output["modules"] == [] + assert result.json_output["config"] == { + "apiVersion": [2, 18], + "protocolType": "python", + } + assert result.json_output["files"] == [{"name": "protocol.py", "role": "main"}] + assert result.json_output["runTimeParameters"] == [ + { + "displayName": "Dry Run", + "variableName": "dry_run", + "type": "bool", + "value": True, + "default": False, + } + ] + + @pytest.mark.parametrize("output", ["--json-output", "--human-json-output"]) def test_run_time_parameter_error( tmp_path: Path, @@ -312,6 +376,64 @@ def run(protocol): ) +@pytest.mark.parametrize("output", ["--json-output", "--human-json-output"]) +def test_rtp_csv_file_setting( + tmp_path: Path, + output: str, +) -> None: + """Test that a CSV file can be set for analysis. + + Also verify that analysis result contains all static data about the protocol. + """ + python_protocol_source = textwrap.dedent( + """\ + requirements = {"robotType": "OT-2", "apiLevel": "2.20"} + + def add_parameters(parameters): + parameters.add_csv_file( + display_name="CSV File", + variable_name="csv_file", + ) + def run(protocol): + protocol.params.csv_file.contents + """ + ) + protocol_source_file = tmp_path / "protocol.py" + protocol_source_file.write_text(python_protocol_source, encoding="utf-8") + csv_source_file = tmp_path / "csv_file.csv" + csv_source_file.write_text("a,b,c", encoding="utf-8") + + result = _get_analysis_result( + [protocol_source_file], + output, + rtp_files=json.dumps({"csv_file": str(csv_source_file.resolve())}), + ) + + assert result.exit_code == 0 + + assert result.json_output is not None + assert result.json_output["robotType"] == "OT-2 Standard" + assert result.json_output["result"] == AnalysisResult.OK + assert result.json_output["pipettes"] == [] + assert result.json_output["commands"] # There should be a home command + assert result.json_output["labware"] == [] + assert result.json_output["liquids"] == [] + assert result.json_output["modules"] == [] + assert result.json_output["config"] == { + "apiVersion": [2, 20], + "protocolType": "python", + } + assert result.json_output["files"] == [{"name": "protocol.py", "role": "main"}] + assert result.json_output["runTimeParameters"] == [ + { + "displayName": "CSV File", + "variableName": "csv_file", + "type": "csv_file", + "file": {"id": "", "name": "csv_file.csv"}, + } + ] + + @pytest.mark.parametrize("output", ["--json-output", "--human-json-output"]) def test_file_required_error( tmp_path: Path, diff --git a/api/tests/opentrons/drivers/absorbance_reader/test_driver.py b/api/tests/opentrons/drivers/absorbance_reader/test_driver.py index ff633e38760..0284f277e2c 100644 --- a/api/tests/opentrons/drivers/absorbance_reader/test_driver.py +++ b/api/tests/opentrons/drivers/absorbance_reader/test_driver.py @@ -1,3 +1,4 @@ +from typing import cast from mock import MagicMock import pytest import asyncio @@ -9,7 +10,7 @@ AbsorbanceHidInterface, ) from opentrons.drivers.absorbance_reader.async_byonoy import AsyncByonoy -from opentrons.drivers.types import AbsorbanceReaderLidStatus +from opentrons.drivers.types import ABSMeasurementMode, AbsorbanceReaderLidStatus @pytest.fixture @@ -23,8 +24,8 @@ def mock_device() -> MagicMock: class MockErrorCode(Enum): - BYONOY_ERROR_NO_ERROR = "no_error" - BYONOY_ERROR = "error" + NO_ERROR = "no_error" + ERROR = "error" @pytest.fixture @@ -52,20 +53,20 @@ async def test_driver_connect_disconnect( mock_interface: MagicMock, driver: AbsorbanceReaderDriver, ) -> None: - mock_interface.byonoy_open_device.return_value = ( - MockErrorCode.BYONOY_ERROR_NO_ERROR, + mock_interface.open_device.return_value = ( + MockErrorCode.NO_ERROR, 1, ) assert not await driver.is_connected() await driver.connect() - mock_interface.byonoy_open_device.assert_called_once() + mock_interface.open_device.assert_called_once() assert await driver.is_connected() assert driver._connection._verify_device_handle() assert driver._connection._device_handle == 1 - mock_interface.byonoy_free_device.return_value = MockErrorCode.BYONOY_ERROR_NO_ERROR + mock_interface.free_device.return_value = MockErrorCode.NO_ERROR await driver.disconnect() assert not await driver.is_connected() @@ -78,18 +79,18 @@ async def test_driver_get_device_info( ) -> None: DEVICE_INFO = MagicMock(AbsorbanceHidInterface.DeviceInfo) - DEVICE_INFO.ref_no = "" - DEVICE_INFO.sn = "SN: BYOMAA00013 REF: DE MAA 001" + DEVICE_INFO.ref_no = "DE MAA 001" + DEVICE_INFO.sn = "BYOMAA00013" DEVICE_INFO.version = "Absorbance V1.0.2 2024-04-18" - mock_interface.byonoy_get_device_information.return_value = ( - MockErrorCode.BYONOY_ERROR_NO_ERROR, + mock_interface.get_device_information.return_value = ( + MockErrorCode.NO_ERROR, DEVICE_INFO, ) info = await connected_driver.get_device_info() - mock_interface.byonoy_get_device_information.assert_called_once() + mock_interface.get_device_information.assert_called_once() assert info == {"serial": "BYOMAA00013", "model": "ABS96", "version": "v1.0.2"} @@ -104,14 +105,14 @@ async def test_driver_get_lid_status( module_status: AbsorbanceReaderLidStatus, ) -> None: - mock_interface.byonoy_get_device_parts_aligned.return_value = ( - MockErrorCode.BYONOY_ERROR_NO_ERROR, + mock_interface.get_device_parts_aligned.return_value = ( + MockErrorCode.NO_ERROR, parts_aligned, ) status = await connected_driver.get_lid_status() - mock_interface.byonoy_get_device_parts_aligned.assert_called_once() + mock_interface.get_device_parts_aligned.assert_called_once() assert status == module_status @@ -120,8 +121,8 @@ async def test_driver_get_supported_wavelengths( connected_driver: AbsorbanceReaderDriver, ) -> None: SUPPORTED_WAVELENGTHS = [450, 500] - mock_interface.byonoy_abs96_get_available_wavelengths.return_value = ( - MockErrorCode.BYONOY_ERROR_NO_ERROR, + mock_interface.abs96_get_available_wavelengths.return_value = ( + MockErrorCode.NO_ERROR, SUPPORTED_WAVELENGTHS, ) @@ -129,42 +130,91 @@ async def test_driver_get_supported_wavelengths( wavelengths = await connected_driver.get_available_wavelengths() - mock_interface.byonoy_abs96_get_available_wavelengths.assert_called_once() + mock_interface.abs96_get_available_wavelengths.assert_called_once() assert connected_driver._connection._supported_wavelengths == SUPPORTED_WAVELENGTHS assert wavelengths == SUPPORTED_WAVELENGTHS -async def test_driver_initialize_and_read( +async def test_driver_initialize_and_read_single( mock_interface: MagicMock, connected_driver: AbsorbanceReaderDriver, ) -> None: # set up mock interface connected_driver._connection._supported_wavelengths = [450, 500] - mock_interface.byonoy_abs96_initialize_single_measurement.return_value = ( - MockErrorCode.BYONOY_ERROR_NO_ERROR - ) - mock_interface.ByonoyAbs96SingleMeasurementConfig = MagicMock( - spec=AbsorbanceHidInterface.MeasurementConfig + mock_interface.abs96_initialize_single_measurement.return_value = ( + MockErrorCode.NO_ERROR ) + class MeasurementConfig(AbsorbanceHidInterface.SingleMeasurementConfig): + def __init__(self) -> None: + self.sample_wavelength = 0 + self.reference_wavelength = 0 + + mock_interface.Abs96SingleMeasurementConfig = MeasurementConfig + # current config should not have been setup yet assert not connected_driver._connection._current_config - await connected_driver.initialize_measurement(450) + await connected_driver.initialize_measurement([450], mode=ABSMeasurementMode.SINGLE) - conf = connected_driver._connection._current_config + conf = cast( + AbsorbanceHidInterface.SingleMeasurementConfig, + connected_driver._connection._current_config, + ) assert conf and conf.sample_wavelength == 450 - mock_interface.byonoy_abs96_initialize_single_measurement.assert_called_once_with( + mock_interface.abs96_initialize_single_measurement.assert_called_once_with(1, conf) + + # setup up mock interface with a single reading + MEASURE_RESULT = [[0.1] * 96] + mock_interface.abs96_single_measure.return_value = ( + MockErrorCode.NO_ERROR, + MEASURE_RESULT, + ) + + result = await connected_driver.get_measurement() + mock_interface.abs96_single_measure.assert_called_once_with(1, conf) + + assert result == MEASURE_RESULT + + +async def test_driver_initialize_and_read_multi( + mock_interface: MagicMock, + connected_driver: AbsorbanceReaderDriver, +) -> None: + # set up mock interface + connected_driver._connection._supported_wavelengths = [450, 500, 600] + mock_interface.abs96_initialize_multiple_measurement.return_value = ( + MockErrorCode.NO_ERROR + ) + + class MeasurementConfig(AbsorbanceHidInterface.MultiMeasurementConfig): + def __init__(self) -> None: + self.sample_wavelengths = [0] + + mock_interface.Abs96MultipleMeasurementConfig = MeasurementConfig + + # current config should not have been setup yet + assert not connected_driver._connection._current_config + await connected_driver.initialize_measurement( + [450, 500, 600], mode=ABSMeasurementMode.MULTI + ) + + conf = cast( + AbsorbanceHidInterface.MultiMeasurementConfig, + connected_driver._connection._current_config, + ) + assert conf and conf.sample_wavelengths == [450, 500, 600] + mock_interface.abs96_initialize_multiple_measurement.assert_called_once_with( 1, conf ) - # setup up mock interface - MEASURE_RESULT = [0.1] * 96 - mock_interface.byonoy_abs96_single_measure.return_value = ( - MockErrorCode.BYONOY_ERROR_NO_ERROR, + # setup up mock interface with multiple readings + MEASURE_RESULT = [[0.1] * 96, [0.2] * 96, [0.3] * 96] + mock_interface.abs96_multiple_measure.return_value = ( + MockErrorCode.NO_ERROR, MEASURE_RESULT, ) - result = await connected_driver.get_single_measurement(450) - mock_interface.byonoy_abs96_single_measure.assert_called_once_with(1, conf) + result = await connected_driver.get_measurement() + mock_interface.abs96_multiple_measure.assert_called_once_with(1, conf) assert result == MEASURE_RESULT diff --git a/api/tests/opentrons/hardware_control/modules/test_hc_thermocycler.py b/api/tests/opentrons/hardware_control/modules/test_hc_thermocycler.py index d893d9912d0..6e90068ac1f 100644 --- a/api/tests/opentrons/hardware_control/modules/test_hc_thermocycler.py +++ b/api/tests/opentrons/hardware_control/modules/test_hc_thermocycler.py @@ -329,6 +329,67 @@ async def test_cycle_temperature( ) +async def test_execute_profile( + set_temperature_subject: modules.Thermocycler, set_plate_temp_spy: mock.AsyncMock +) -> None: + """It should send a series of set_plate_temperatures from a profile.""" + await set_temperature_subject.execute_profile( + [ + {"temperature": 42, "hold_time_seconds": 30}, + { + "repetitions": 5, + "steps": [ + {"temperature": 20, "hold_time_minutes": 1}, + {"temperature": 30, "hold_time_seconds": 1}, + ], + }, + {"temperature": 90, "hold_time_seconds": 2}, + { + "repetitions": 10, + "steps": [ + {"temperature": 10, "hold_time_minutes": 2}, + {"temperature": 20, "hold_time_seconds": 5}, + ], + }, + ], + volume=123, + ) + assert set_plate_temp_spy.call_args_list == [ + mock.call(temp=42, hold_time=30, volume=123), + mock.call(temp=20, hold_time=60, volume=123), + mock.call(temp=30, hold_time=1, volume=123), + mock.call(temp=20, hold_time=60, volume=123), + mock.call(temp=30, hold_time=1, volume=123), + mock.call(temp=20, hold_time=60, volume=123), + mock.call(temp=30, hold_time=1, volume=123), + mock.call(temp=20, hold_time=60, volume=123), + mock.call(temp=30, hold_time=1, volume=123), + mock.call(temp=20, hold_time=60, volume=123), + mock.call(temp=30, hold_time=1, volume=123), + mock.call(temp=90, hold_time=2, volume=123), + mock.call(temp=10, hold_time=120, volume=123), + mock.call(temp=20, hold_time=5, volume=123), + mock.call(temp=10, hold_time=120, volume=123), + mock.call(temp=20, hold_time=5, volume=123), + mock.call(temp=10, hold_time=120, volume=123), + mock.call(temp=20, hold_time=5, volume=123), + mock.call(temp=10, hold_time=120, volume=123), + mock.call(temp=20, hold_time=5, volume=123), + mock.call(temp=10, hold_time=120, volume=123), + mock.call(temp=20, hold_time=5, volume=123), + mock.call(temp=10, hold_time=120, volume=123), + mock.call(temp=20, hold_time=5, volume=123), + mock.call(temp=10, hold_time=120, volume=123), + mock.call(temp=20, hold_time=5, volume=123), + mock.call(temp=10, hold_time=120, volume=123), + mock.call(temp=20, hold_time=5, volume=123), + mock.call(temp=10, hold_time=120, volume=123), + mock.call(temp=20, hold_time=5, volume=123), + mock.call(temp=10, hold_time=120, volume=123), + mock.call(temp=20, hold_time=5, volume=123), + ] + + async def test_sync_error_response_to_poller( subject_mocked_driver: modules.Thermocycler, mock_driver: mock.AsyncMock, diff --git a/api/tests/opentrons/protocol_api/core/engine/test_absorbance_reader_core.py b/api/tests/opentrons/protocol_api/core/engine/test_absorbance_reader_core.py index 613ee3cfbe3..405d737d55b 100644 --- a/api/tests/opentrons/protocol_api/core/engine/test_absorbance_reader_core.py +++ b/api/tests/opentrons/protocol_api/core/engine/test_absorbance_reader_core.py @@ -62,32 +62,65 @@ def test_initialize( decoy: Decoy, mock_engine_client: EngineClient, subject: AbsorbanceReaderCore ) -> None: """It should set the sample wavelength with the engine client.""" - subject.initialize(wavelength=123) + subject.initialize("single", [123]) decoy.verify( mock_engine_client.execute_command( cmd.absorbance_reader.InitializeParams( moduleId="1234", - sampleWavelength=123, + measureMode="single", + sampleWavelengths=[123], + referenceWavelength=None, ), ), times=1, ) - assert subject._initialized_value == 123 + assert subject._initialized_value == [123] + + # Test reference wavelength + subject.initialize("single", [124], 450) + + decoy.verify( + mock_engine_client.execute_command( + cmd.absorbance_reader.InitializeParams( + moduleId="1234", + measureMode="single", + sampleWavelengths=[124], + referenceWavelength=450, + ), + ), + times=1, + ) + assert subject._initialized_value == [124] + + # Test initialize multi + subject.initialize("multi", [124, 125, 126]) + + decoy.verify( + mock_engine_client.execute_command( + cmd.absorbance_reader.InitializeParams( + moduleId="1234", + measureMode="multi", + sampleWavelengths=[124, 125, 126], + referenceWavelength=None, + ), + ), + times=1, + ) + assert subject._initialized_value == [124, 125, 126] def test_read( decoy: Decoy, mock_engine_client: EngineClient, subject: AbsorbanceReaderCore ) -> None: """It should call absorbance reader to read with the engine client.""" - subject._initialized_value = 123 + subject._initialized_value = [123] subject.read() decoy.verify( mock_engine_client.execute_command( cmd.absorbance_reader.ReadAbsorbanceParams( moduleId="1234", - sampleWavelength=123, ), ), times=1, diff --git a/api/tests/opentrons/protocol_api/core/engine/test_deck_conflict.py b/api/tests/opentrons/protocol_api/core/engine/test_deck_conflict.py index 147368e0734..9a46318c8b8 100644 --- a/api/tests/opentrons/protocol_api/core/engine/test_deck_conflict.py +++ b/api/tests/opentrons/protocol_api/core/engine/test_deck_conflict.py @@ -6,6 +6,7 @@ from opentrons_shared_data.labware.types import LabwareUri from opentrons_shared_data.robot.types import RobotType +from opentrons.hardware_control import CriticalPoint from opentrons.hardware_control.nozzle_manager import NozzleConfigurationType from opentrons.motion_planning import deck_conflict as wrapped_deck_conflict from opentrons.motion_planning import adjacent_slots_getters @@ -545,9 +546,21 @@ def test_deck_conflict_raises_for_bad_pipette_move( well_location=WellLocation(origin=WellOrigin.TOP, offset=WellOffset(z=10)), ) ).then_return(destination_well_point) + decoy.when( + mock_state_view.labware.get_should_center_column_on_target_well( + "destination-labware-id" + ) + ).then_return(False) + decoy.when( + mock_state_view.labware.get_should_center_pipette_on_target_well( + "destination-labware-id" + ) + ).then_return(False) decoy.when( mock_state_view.pipettes.get_pipette_bounds_at_specified_move_to_position( - pipette_id="pipette-id", destination_position=destination_well_point + pipette_id="pipette-id", + destination_position=destination_well_point, + critical_point=None, ) ).then_return(pipette_bounds) @@ -653,9 +666,17 @@ def test_deck_conflict_raises_for_collision_with_tc_lid( well_location=WellLocation(origin=WellOrigin.TOP, offset=WellOffset(z=10)), ) ).then_return(destination_well_point) + + decoy.when( + mock_state_view.labware.get_should_center_column_on_target_well( + "destination-labware-id" + ) + ).then_return(True) decoy.when( mock_state_view.pipettes.get_pipette_bounds_at_specified_move_to_position( - pipette_id="pipette-id", destination_position=destination_well_point + pipette_id="pipette-id", + destination_position=destination_well_point, + critical_point=CriticalPoint.Y_CENTER, ) ).then_return(pipette_bounds_at_destination) decoy.when(mock_state_view.pipettes.get_mount("pipette-id")).then_return( diff --git a/api/tests/opentrons/protocol_api/core/engine/test_thermocycler_core.py b/api/tests/opentrons/protocol_api/core/engine/test_thermocycler_core.py index eb429065d0a..1ee868ad84b 100644 --- a/api/tests/opentrons/protocol_api/core/engine/test_thermocycler_core.py +++ b/api/tests/opentrons/protocol_api/core/engine/test_thermocycler_core.py @@ -1,5 +1,7 @@ """Tests for the engine based Protocol API module core implementations.""" +from typing import cast import pytest +from _pytest.fixtures import SubRequest from decoy import Decoy from opentrons.drivers.types import ThermocyclerLidStatus @@ -13,6 +15,8 @@ from opentrons.protocol_engine.clients import SyncClient as EngineClient from opentrons.protocol_api.core.engine.module_core import ThermocyclerModuleCore from opentrons.protocol_api import MAX_SUPPORTED_VERSION +from opentrons.protocols.api_support.types import APIVersion +from ... import versions_below, versions_at_or_above SyncThermocyclerHardware = SynchronousAdapter[Thermocycler] @@ -34,7 +38,7 @@ def subject( mock_engine_client: EngineClient, mock_sync_module_hardware: SyncThermocyclerHardware, ) -> ThermocyclerModuleCore: - """Get a HeaterShakerModuleCore test subject.""" + """Get a ThermocyclerModuleCore test subject.""" return ThermocyclerModuleCore( module_id="1234", engine_client=mock_engine_client, @@ -43,6 +47,36 @@ def subject( ) +@pytest.fixture(params=versions_below(APIVersion(2, 21), flex_only=False)) +def subject_below_221( + request: SubRequest, + mock_engine_client: EngineClient, + mock_sync_module_hardware: SyncThermocyclerHardware, +) -> ThermocyclerModuleCore: + """Get a ThermocyclerCore below API version 2.21.""" + return ThermocyclerModuleCore( + module_id="1234", + engine_client=mock_engine_client, + api_version=cast(APIVersion, request.param), + sync_module_hardware=mock_sync_module_hardware, + ) + + +@pytest.fixture(params=versions_at_or_above(APIVersion(2, 21))) +def subject_at_or_above_221( + request: SubRequest, + mock_engine_client: EngineClient, + mock_sync_module_hardware: SyncThermocyclerHardware, +) -> ThermocyclerModuleCore: + """Get a ThermocyclerCore below API version 2.21.""" + return ThermocyclerModuleCore( + module_id="1234", + engine_client=mock_engine_client, + api_version=cast(APIVersion, request.param), + sync_module_hardware=mock_sync_module_hardware, + ) + + def test_create( decoy: Decoy, mock_engine_client: EngineClient, @@ -159,11 +193,13 @@ def test_wait_for_lid_temperature( ) -def test_execute_profile( - decoy: Decoy, mock_engine_client: EngineClient, subject: ThermocyclerModuleCore +def test_execute_profile_below_221( + decoy: Decoy, + mock_engine_client: EngineClient, + subject_below_221: ThermocyclerModuleCore, ) -> None: """It should run a thermocycler profile with the engine client.""" - subject.execute_profile( + subject_below_221.execute_profile( steps=[{"temperature": 45.6, "hold_time_seconds": 12.3}], repetitions=2, block_max_volume=78.9, @@ -187,6 +223,43 @@ def test_execute_profile( ) +def test_execute_profile_above_221( + decoy: Decoy, + mock_engine_client: EngineClient, + subject_at_or_above_221: ThermocyclerModuleCore, +) -> None: + """It should run a thermocycler profile with the engine client.""" + subject_at_or_above_221.execute_profile( + steps=[ + {"temperature": 45.6, "hold_time_seconds": 12.3}, + {"temperature": 78.9, "hold_time_seconds": 45.6}, + ], + repetitions=2, + block_max_volume=25, + ) + decoy.verify( + mock_engine_client.execute_command( + cmd.thermocycler.RunExtendedProfileParams( + moduleId="1234", + profileElements=[ + cmd.thermocycler.ProfileCycle( + repetitions=2, + steps=[ + cmd.thermocycler.ProfileStep( + celsius=45.6, holdSeconds=12.3 + ), + cmd.thermocycler.ProfileStep( + celsius=78.9, holdSeconds=45.6 + ), + ], + ) + ], + blockMaxVolumeUl=25, + ) + ) + ) + + def test_deactivate_lid( decoy: Decoy, mock_engine_client: EngineClient, subject: ThermocyclerModuleCore ) -> None: diff --git a/api/tests/opentrons/protocol_api/test_instrument_context.py b/api/tests/opentrons/protocol_api/test_instrument_context.py index 3478ceb9a86..4478c250b8c 100644 --- a/api/tests/opentrons/protocol_api/test_instrument_context.py +++ b/api/tests/opentrons/protocol_api/test_instrument_context.py @@ -89,6 +89,20 @@ def mock_instrument_core(decoy: Decoy) -> InstrumentCore: """Get a mock instrument implementation core.""" instrument_core = decoy.mock(cls=InstrumentCore) decoy.when(instrument_core.get_mount()).then_return(Mount.LEFT) + + # we need to add this for the mock of liquid_presence detection to actually work + # this replaces the mock with a a property again + instrument_core._liquid_presence_detection = False # type: ignore[attr-defined] + + def _setter(enable: bool) -> None: + instrument_core._liquid_presence_detection = enable # type: ignore[attr-defined] + + def _getter() -> bool: + return instrument_core._liquid_presence_detection # type: ignore[attr-defined, no-any-return] + + instrument_core.get_liquid_presence_detection = _getter # type: ignore[method-assign] + instrument_core.set_liquid_presence_detection = _setter # type: ignore[method-assign] + return instrument_core @@ -1476,3 +1490,104 @@ def test_96_tip_config_invalid( decoy.when(mock_instrument_core.get_nozzle_map()).then_return(nozzle_map) decoy.when(mock_instrument_core.get_active_channels()).then_return(96) assert subject._96_tip_config_valid() is True + + +@pytest.mark.parametrize("api_version", [APIVersion(2, 21)]) +def test_mix_no_lpd( + decoy: Decoy, + mock_instrument_core: InstrumentCore, + subject: InstrumentContext, + mock_protocol_core: ProtocolCore, +) -> None: + """It should aspirate/dispense to a well several times.""" + mock_well = decoy.mock(cls=Well) + + bottom_location = Location(point=Point(1, 2, 3), labware=mock_well) + input_location = Location(point=Point(2, 2, 2), labware=None) + last_location = Location(point=Point(9, 9, 9), labware=None) + + decoy.when(mock_protocol_core.get_last_location(Mount.LEFT)).then_return( + last_location + ) + decoy.when( + mock_validation.validate_location( + location=input_location, last_location=last_location + ) + ).then_return(WellTarget(well=mock_well, location=None, in_place=False)) + decoy.when( + mock_validation.validate_location(location=None, last_location=last_location) + ).then_return(WellTarget(well=mock_well, location=None, in_place=False)) + decoy.when(mock_well.bottom(z=1.0)).then_return(bottom_location) + decoy.when(mock_instrument_core.get_aspirate_flow_rate(1.23)).then_return(5.67) + decoy.when(mock_instrument_core.get_dispense_flow_rate(1.23)).then_return(5.67) + decoy.when(mock_instrument_core.has_tip()).then_return(True) + decoy.when(mock_instrument_core.get_current_volume()).then_return(0.0) + + subject.mix(repetitions=10, volume=10.0, location=input_location, rate=1.23) + decoy.verify( + mock_instrument_core.aspirate(), # type: ignore[call-arg] + ignore_extra_args=True, + times=10, + ) + decoy.verify( + mock_instrument_core.dispense(), # type: ignore[call-arg] + ignore_extra_args=True, + times=10, + ) + + decoy.verify( + mock_instrument_core.liquid_probe_with_recovery(), # type: ignore[call-arg] + ignore_extra_args=True, + times=0, + ) + + +@pytest.mark.ot3_only +@pytest.mark.parametrize("api_version", [APIVersion(2, 21)]) +def test_mix_with_lpd( + decoy: Decoy, + mock_instrument_core: InstrumentCore, + subject: InstrumentContext, + mock_protocol_core: ProtocolCore, +) -> None: + """It should aspirate/dispense to a well several times and do 1 lpd.""" + mock_well = decoy.mock(cls=Well) + bottom_location = Location(point=Point(1, 2, 3), labware=mock_well) + input_location = Location(point=Point(2, 2, 2), labware=None) + last_location = Location(point=Point(9, 9, 9), labware=None) + + decoy.when(mock_protocol_core.get_last_location(Mount.LEFT)).then_return( + last_location + ) + decoy.when( + mock_validation.validate_location( + location=input_location, last_location=last_location + ) + ).then_return(WellTarget(well=mock_well, location=None, in_place=False)) + decoy.when( + mock_validation.validate_location(location=None, last_location=last_location) + ).then_return(WellTarget(well=mock_well, location=None, in_place=False)) + decoy.when(mock_well.bottom(z=1.0)).then_return(bottom_location) + decoy.when(mock_instrument_core.get_aspirate_flow_rate(1.23)).then_return(5.67) + decoy.when(mock_instrument_core.get_dispense_flow_rate(1.23)).then_return(5.67) + decoy.when(mock_instrument_core.has_tip()).then_return(True) + decoy.when(mock_instrument_core.get_current_volume()).then_return(0.0) + + subject.liquid_presence_detection = True + subject.mix(repetitions=10, volume=10.0, location=input_location, rate=1.23) + decoy.verify( + mock_instrument_core.aspirate(), # type: ignore[call-arg] + ignore_extra_args=True, + times=10, + ) + decoy.verify( + mock_instrument_core.dispense(), # type: ignore[call-arg] + ignore_extra_args=True, + times=10, + ) + + decoy.verify( + mock_instrument_core.liquid_probe_with_recovery(), # type: ignore[call-arg] + ignore_extra_args=True, + times=1, + ) diff --git a/api/tests/opentrons/protocol_api_integration/test_pipette_movement_deck_conflicts.py b/api/tests/opentrons/protocol_api_integration/test_pipette_movement_deck_conflicts.py index 1d3388d3d97..ebaf5e49971 100644 --- a/api/tests/opentrons/protocol_api_integration/test_pipette_movement_deck_conflicts.py +++ b/api/tests/opentrons/protocol_api_integration/test_pipette_movement_deck_conflicts.py @@ -3,7 +3,7 @@ import pytest from opentrons import simulate -from opentrons.protocol_api import COLUMN, ALL, SINGLE +from opentrons.protocol_api import COLUMN, ALL, SINGLE, ROW from opentrons.protocol_api.core.engine.deck_conflict import ( PartialTipMovementNotAllowedError, ) @@ -226,3 +226,104 @@ def test_deck_conflicts_for_96_ch_a1_column_configuration() -> None: # No error NOW because of full config instrument.dispense(50, badly_placed_plate.wells_by_name()["A1"].bottom()) + + +@pytest.mark.ot3_only +def test_deck_conflicts_for_96_ch_and_reservoirs() -> None: + """It should raise errors for expected deck conflicts when moving to reservoirs. + + This test checks that the critical point of the pipette is taken into account, + specifically when it differs from the primary nozzle. + """ + protocol = simulate.get_protocol_api(version="2.20", robot_type="Flex") + instrument = protocol.load_instrument("flex_96channel_1000", mount="left") + # trash_labware = protocol.load_labware("opentrons_1_trash_3200ml_fixed", "A3") + # instrument.trash_container = trash_labware + + protocol.load_trash_bin("A3") + right_tiprack = protocol.load_labware("opentrons_flex_96_tiprack_50ul", "C3") + front_tiprack = protocol.load_labware("opentrons_flex_96_tiprack_50ul", "D2") + # Tall deck item in B3 + protocol.load_labware( + "opentrons_flex_96_tiprack_50ul", + "B3", + adapter="opentrons_flex_96_tiprack_adapter", + ) + # Tall deck item in B1 + protocol.load_labware( + "opentrons_flex_96_tiprack_50ul", + "B1", + adapter="opentrons_flex_96_tiprack_adapter", + ) + + # ############ RESERVOIRS ################ + # These labware should be to the east of tall labware to avoid any partial tip deck conflicts + reservoir_1_well = protocol.load_labware("nest_1_reservoir_195ml", "C2") + reservoir_12_well = protocol.load_labware("nest_12_reservoir_15ml", "B2") + + # ########### Use COLUMN A1 Config ############# + instrument.configure_nozzle_layout(style=COLUMN, start="A1") + + instrument.pick_up_tip(front_tiprack.wells_by_name()["A12"]) + + with pytest.raises( + PartialTipMovementNotAllowedError, match="collision with items in deck slot" + ): + instrument.aspirate(10, reservoir_1_well.wells()[0]) + + instrument.aspirate(25, reservoir_12_well.wells()[0]) + instrument.dispense(10, reservoir_12_well.wells()[1]) + + with pytest.raises( + PartialTipMovementNotAllowedError, match="collision with items in deck slot" + ): + instrument.dispense(15, reservoir_12_well.wells()[3]) + + instrument.drop_tip() + front_tiprack.reset() + + # ########### Use COLUMN A12 Config ############# + instrument.configure_nozzle_layout(style=COLUMN, start="A12") + + instrument.pick_up_tip(front_tiprack.wells_by_name()["A1"]) + instrument.aspirate(50, reservoir_1_well.wells()[0]) + with pytest.raises( + PartialTipMovementNotAllowedError, match="collision with items in deck slot" + ): + instrument.dispense(10, reservoir_12_well.wells()[8]) + + instrument.dispense(15, reservoir_12_well.wells()[11]) + instrument.dispense(10, reservoir_1_well.wells()[0]) + + instrument.drop_tip() + front_tiprack.reset() + + # ######## CHANGE CONFIG TO ROW H1 ######### + instrument.configure_nozzle_layout(style=ROW, start="H1", tip_racks=[front_tiprack]) + with pytest.raises( + PartialTipMovementNotAllowedError, match="collision with items in deck slot" + ): + instrument.pick_up_tip(right_tiprack.wells_by_name()["A1"]) + + instrument.pick_up_tip() + instrument.aspirate(25, reservoir_1_well.wells()[0]) + + instrument.drop_tip() + front_tiprack.reset() + + # ######## CHANGE CONFIG TO ROW A1 ######### + instrument.configure_nozzle_layout(style=ROW, start="A1", tip_racks=[front_tiprack]) + + with pytest.raises( + PartialTipMovementNotAllowedError, match="outside of robot bounds" + ): + instrument.pick_up_tip() + instrument.pick_up_tip(right_tiprack.wells_by_name()["H1"]) + + with pytest.raises( + PartialTipMovementNotAllowedError, match="collision with items in deck slot" + ): + instrument.aspirate(25, reservoir_1_well.wells()[0]) + + instrument.drop_tip() + front_tiprack.reset() diff --git a/api/tests/opentrons/protocol_engine/commands/test_configure_for_volume.py b/api/tests/opentrons/protocol_engine/commands/test_configure_for_volume.py index 95e1e856bd4..2279f2a0ebf 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_configure_for_volume.py +++ b/api/tests/opentrons/protocol_engine/commands/test_configure_for_volume.py @@ -1,4 +1,8 @@ """Test load pipette commands.""" +from opentrons.protocol_engine.state.update_types import ( + PipetteConfigUpdate, + StateUpdate, +) import pytest from decoy import Decoy @@ -84,4 +88,9 @@ async def test_configure_for_volume_implementation( private=ConfigureForVolumePrivateResult( pipette_id="pipette-id", serial_number="some number", config=config ), + state_update=StateUpdate( + pipette_config=PipetteConfigUpdate( + pipette_id="pipette-id", serial_number="some number", config=config + ) + ), ) diff --git a/api/tests/opentrons/protocol_engine/commands/test_configure_nozzle_layout.py b/api/tests/opentrons/protocol_engine/commands/test_configure_nozzle_layout.py index 2f318b147ac..d4a9c671dd3 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_configure_nozzle_layout.py +++ b/api/tests/opentrons/protocol_engine/commands/test_configure_nozzle_layout.py @@ -1,4 +1,8 @@ """Test configure nozzle layout commands.""" +from opentrons.protocol_engine.state.update_types import ( + PipetteNozzleMapUpdate, + StateUpdate, +) import pytest from decoy import Decoy from typing import Union, Dict @@ -146,4 +150,10 @@ async def test_configure_nozzle_layout_implementation( pipette_id="pipette-id", nozzle_map=expected_nozzlemap, ), + state_update=StateUpdate( + pipette_nozzle_map=PipetteNozzleMapUpdate( + pipette_id="pipette-id", + nozzle_map=expected_nozzlemap, + ) + ), ) diff --git a/api/tests/opentrons/protocol_engine/commands/test_drop_tip.py b/api/tests/opentrons/protocol_engine/commands/test_drop_tip.py index d0d69eeccfa..a44b6892401 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_drop_tip.py +++ b/api/tests/opentrons/protocol_engine/commands/test_drop_tip.py @@ -123,7 +123,10 @@ async def test_drop_tip_implementation( well_name="A3", ), new_deck_point=DeckPoint(x=111, y=222, z=333), - ) + ), + pipette_tip_state=update_types.PipetteTipStateUpdate( + pipette_id="abc", tip_geometry=None + ), ), ) @@ -196,6 +199,9 @@ async def test_drop_tip_with_alternating_locations( well_name="A3", ), new_deck_point=DeckPoint(x=111, y=222, z=333), - ) + ), + pipette_tip_state=update_types.PipetteTipStateUpdate( + pipette_id="abc", tip_geometry=None + ), ), ) diff --git a/api/tests/opentrons/protocol_engine/commands/test_drop_tip_in_place.py b/api/tests/opentrons/protocol_engine/commands/test_drop_tip_in_place.py index 4bfefe4fdbe..aa7854f6105 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_drop_tip_in_place.py +++ b/api/tests/opentrons/protocol_engine/commands/test_drop_tip_in_place.py @@ -1,4 +1,8 @@ """Test drop tip in place commands.""" +from opentrons.protocol_engine.state.update_types import ( + PipetteTipStateUpdate, + StateUpdate, +) import pytest from decoy import Decoy @@ -29,7 +33,13 @@ async def test_drop_tip_implementation( result = await subject.execute(params) - assert result == SuccessData(public=DropTipInPlaceResult(), private=None) + assert result == SuccessData( + public=DropTipInPlaceResult(), + private=None, + state_update=StateUpdate( + pipette_tip_state=PipetteTipStateUpdate(pipette_id="abc", tip_geometry=None) + ), + ) decoy.verify( await mock_tip_handler.drop_tip(pipette_id="abc", home_after=False), diff --git a/api/tests/opentrons/protocol_engine/commands/test_liquid_probe.py b/api/tests/opentrons/protocol_engine/commands/test_liquid_probe.py index bd28916239b..6fb6ebc6935 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_liquid_probe.py +++ b/api/tests/opentrons/protocol_engine/commands/test_liquid_probe.py @@ -4,6 +4,7 @@ from opentrons.protocol_engine.errors.exceptions import ( MustHomeError, + PipetteNotReadyToAspirateError, TipNotAttachedError, TipNotEmptyError, ) @@ -14,6 +15,7 @@ import pytest from opentrons.protocol_engine.commands.pipetting_common import LiquidNotFoundError +from opentrons.protocol_engine.state.state import StateView from opentrons.protocol_engine.state import update_types from opentrons.types import MountType, Point from opentrons.protocol_engine import WellLocation, WellOrigin, WellOffset, DeckPoint @@ -80,12 +82,14 @@ def result_type(types: tuple[object, object, EitherResultType]) -> EitherResultT @pytest.fixture def subject( implementation_type: EitherImplementationType, + state_view: StateView, movement: MovementHandler, pipetting: PipettingHandler, model_utils: ModelUtils, ) -> Union[LiquidProbeImplementation, TryLiquidProbeImplementation]: """Get the implementation subject.""" return implementation_type( + state_view=state_view, pipetting=pipetting, movement=movement, model_utils=model_utils, @@ -95,6 +99,7 @@ def subject( async def test_liquid_probe_implementation( decoy: Decoy, movement: MovementHandler, + state_view: StateView, pipetting: PipettingHandler, subject: EitherImplementation, params_type: EitherParamsType, @@ -110,7 +115,9 @@ async def test_liquid_probe_implementation( wellLocation=location, ) - decoy.when(pipetting.get_is_ready_to_aspirate(pipette_id="abc")).then_return(True) + decoy.when(state_view.pipettes.get_aspirated_volume(pipette_id="abc")).then_return( + 0 + ) decoy.when( await movement.move_to_well( @@ -148,6 +155,7 @@ async def test_liquid_probe_implementation( async def test_liquid_not_found_error( decoy: Decoy, + state_view: StateView, movement: MovementHandler, pipetting: PipettingHandler, subject: EitherImplementation, @@ -174,9 +182,7 @@ async def test_liquid_not_found_error( wellLocation=well_location, ) - decoy.when(pipetting.get_is_ready_to_aspirate(pipette_id=pipette_id)).then_return( - True - ) + decoy.when(state_view.pipettes.get_aspirated_volume(pipette_id)).then_return(0) decoy.when( await movement.move_to_well( @@ -230,11 +236,11 @@ async def test_liquid_not_found_error( async def test_liquid_probe_tip_checking( decoy: Decoy, - pipetting: PipettingHandler, + state_view: StateView, subject: EitherImplementation, params_type: EitherParamsType, ) -> None: - """It should return a TipNotAttached error if the hardware API indicates that.""" + """It should raise a TipNotAttached error if the state view indicates that.""" pipette_id = "pipette-id" labware_id = "labware-id" well_name = "well-name" @@ -249,18 +255,42 @@ async def test_liquid_probe_tip_checking( wellLocation=well_location, ) - decoy.when( - pipetting.get_is_ready_to_aspirate( - pipette_id=pipette_id, - ), - ).then_raise(TipNotAttachedError()) + decoy.when(state_view.pipettes.get_aspirated_volume(pipette_id)).then_raise( + TipNotAttachedError() + ) with pytest.raises(TipNotAttachedError): await subject.execute(data) +async def test_liquid_probe_plunger_preparedness_checking( + decoy: Decoy, + state_view: StateView, + subject: EitherImplementation, + params_type: EitherParamsType, +) -> None: + """It should raise a PipetteNotReadyToAspirate error if the state view indicates that.""" + pipette_id = "pipette-id" + labware_id = "labware-id" + well_name = "well-name" + well_location = WellLocation( + origin=WellOrigin.BOTTOM, offset=WellOffset(x=0, y=0, z=1) + ) + + data = params_type( + pipetteId=pipette_id, + labwareId=labware_id, + wellName=well_name, + wellLocation=well_location, + ) + + decoy.when(state_view.pipettes.get_aspirated_volume(pipette_id)).then_return(None) + with pytest.raises(PipetteNotReadyToAspirateError): + await subject.execute(data) + + async def test_liquid_probe_volume_checking( decoy: Decoy, - pipetting: PipettingHandler, + state_view: StateView, subject: EitherImplementation, params_type: EitherParamsType, ) -> None: @@ -278,15 +308,23 @@ async def test_liquid_probe_volume_checking( wellName=well_name, wellLocation=well_location, ) + decoy.when( - pipetting.get_is_empty(pipette_id=pipette_id), - ).then_return(False) + state_view.pipettes.get_aspirated_volume(pipette_id=pipette_id), + ).then_return(123) with pytest.raises(TipNotEmptyError): await subject.execute(data) + decoy.when( + state_view.pipettes.get_aspirated_volume(pipette_id=pipette_id), + ).then_return(None) + with pytest.raises(PipetteNotReadyToAspirateError): + await subject.execute(data) + async def test_liquid_probe_location_checking( decoy: Decoy, + state_view: StateView, movement: MovementHandler, subject: EitherImplementation, params_type: EitherParamsType, @@ -305,6 +343,7 @@ async def test_liquid_probe_location_checking( wellName=well_name, wellLocation=well_location, ) + decoy.when(state_view.pipettes.get_aspirated_volume(pipette_id)).then_return(0) decoy.when( await movement.check_for_valid_position( mount=MountType.LEFT, diff --git a/api/tests/opentrons/protocol_engine/commands/test_load_labware.py b/api/tests/opentrons/protocol_engine/commands/test_load_labware.py index c9bf96c12c2..85cb7794d76 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_load_labware.py +++ b/api/tests/opentrons/protocol_engine/commands/test_load_labware.py @@ -1,5 +1,10 @@ """Test load labware commands.""" import inspect +from typing import Optional +from opentrons.protocol_engine.state.update_types import ( + LoadedLabwareUpdate, + StateUpdate, +) import pytest from decoy import Decoy @@ -37,11 +42,13 @@ def patch_mock_labware_validation( monkeypatch.setattr(labware_validation, name, decoy.mock(func=func)) +@pytest.mark.parametrize("display_name", [("My custom display name"), (None)]) async def test_load_labware_implementation( decoy: Decoy, well_plate_def: LabwareDefinition, equipment: EquipmentHandler, state_view: StateView, + display_name: Optional[str], ) -> None: """A LoadLabware command should have an execution implementation.""" subject = LoadLabwareImplementation(equipment=equipment, state_view=state_view) @@ -51,7 +58,7 @@ async def test_load_labware_implementation( loadName="some-load-name", namespace="opentrons-test", version=1, - displayName="My custom display name", + displayName=display_name, ) decoy.when( @@ -88,6 +95,15 @@ async def test_load_labware_implementation( offsetId="labware-offset-id", ), private=None, + state_update=StateUpdate( + loaded_labware=LoadedLabwareUpdate( + labware_id="labware-id", + definition=well_plate_def, + offset_id="labware-offset-id", + new_location=DeckSlotLocation(slotName=DeckSlotName.SLOT_4), + display_name=display_name, + ) + ), ) @@ -156,7 +172,6 @@ async def test_load_labware_on_labware( ).then_return(True) result = await subject.execute(data) - assert result == SuccessData( public=LoadLabwareResult( labwareId="labware-id", @@ -164,6 +179,15 @@ async def test_load_labware_on_labware( offsetId="labware-offset-id", ), private=None, + state_update=StateUpdate( + loaded_labware=LoadedLabwareUpdate( + labware_id="labware-id", + definition=well_plate_def, + offset_id="labware-offset-id", + new_location=OnLabwareLocation(labwareId="another-labware-id"), + display_name="My custom display name", + ) + ), ) decoy.verify( diff --git a/api/tests/opentrons/protocol_engine/commands/test_load_pipette.py b/api/tests/opentrons/protocol_engine/commands/test_load_pipette.py index 6b7bd77c32c..5884e015342 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_load_pipette.py +++ b/api/tests/opentrons/protocol_engine/commands/test_load_pipette.py @@ -1,4 +1,9 @@ """Test load pipette commands.""" +from opentrons.protocol_engine.state.update_types import ( + LoadPipetteUpdate, + PipetteConfigUpdate, + StateUpdate, +) import pytest from decoy import Decoy @@ -88,6 +93,19 @@ async def test_load_pipette_implementation( private=LoadPipettePrivateResult( pipette_id="some id", serial_number="some-serial-number", config=config_data ), + state_update=StateUpdate( + loaded_pipette=LoadPipetteUpdate( + pipette_name=PipetteNameType.P300_SINGLE, + mount=MountType.LEFT, + pipette_id="some id", + liquid_presence_detection=None, + ), + pipette_config=PipetteConfigUpdate( + pipette_id="some id", + serial_number="some-serial-number", + config=config_data, + ), + ), ) @@ -143,6 +161,19 @@ async def test_load_pipette_implementation_96_channel( private=LoadPipettePrivateResult( pipette_id="pipette-id", serial_number="some id", config=config_data ), + state_update=StateUpdate( + loaded_pipette=LoadPipetteUpdate( + pipette_name=PipetteNameType.P1000_96, + mount=MountType.LEFT, + pipette_id="pipette-id", + liquid_presence_detection=None, + ), + pipette_config=PipetteConfigUpdate( + pipette_id="pipette-id", + serial_number="some id", + config=config_data, + ), + ), ) diff --git a/api/tests/opentrons/protocol_engine/commands/test_move_labware.py b/api/tests/opentrons/protocol_engine/commands/test_move_labware.py index b80da9d902d..d1309761d8f 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_move_labware.py +++ b/api/tests/opentrons/protocol_engine/commands/test_move_labware.py @@ -1,8 +1,15 @@ """Test the ``moveLabware`` command.""" +from datetime import datetime import inspect import pytest -from decoy import Decoy +from decoy import Decoy, matchers +from opentrons_shared_data.errors.exceptions import ( + EnumeratedError, + FailedGripperPickupError, + LabwareDroppedError, + StallOrCollisionDetectedError, +) from opentrons_shared_data.labware.labware_definition import Parameters, Dimensions from opentrons_shared_data.gripper.constants import GRIPPER_PADDLE_WIDTH @@ -11,6 +18,7 @@ from opentrons.protocols.models import LabwareDefinition from opentrons.protocol_engine import errors, Config from opentrons.protocol_engine.resources import labware_validation +from opentrons.protocol_engine.resources.model_utils import ModelUtils from opentrons.protocol_engine.types import ( CurrentWell, DeckSlotLocation, @@ -24,8 +32,9 @@ AddressableAreaLocation, ) from opentrons.protocol_engine.state.state import StateView -from opentrons.protocol_engine.commands.command import SuccessData +from opentrons.protocol_engine.commands.command import DefinedErrorData, SuccessData from opentrons.protocol_engine.commands.move_labware import ( + GripperMovementError, MoveLabwareParams, MoveLabwareResult, MoveLabwareImplementation, @@ -46,6 +55,24 @@ def patch_mock_labware_validation( monkeypatch.setattr(labware_validation, name, decoy.mock(func=func)) +@pytest.fixture +def subject( + equipment: EquipmentHandler, + labware_movement: LabwareMovementHandler, + state_view: StateView, + run_control: RunControlHandler, + model_utils: ModelUtils, +) -> MoveLabwareImplementation: + """Return a test subject configured to use mocked-out dependencies.""" + return MoveLabwareImplementation( + state_view=state_view, + equipment=equipment, + labware_movement=labware_movement, + run_control=run_control, + model_utils=model_utils, + ) + + @pytest.mark.parametrize( argnames=["strategy", "times_pause_called"], argvalues=[ @@ -55,21 +82,14 @@ def patch_mock_labware_validation( ) async def test_manual_move_labware_implementation( decoy: Decoy, + subject: MoveLabwareImplementation, equipment: EquipmentHandler, - labware_movement: LabwareMovementHandler, state_view: StateView, run_control: RunControlHandler, strategy: LabwareMovementStrategy, times_pause_called: int, ) -> None: """It should execute a pause and return the new offset.""" - subject = MoveLabwareImplementation( - state_view=state_view, - equipment=equipment, - labware_movement=labware_movement, - run_control=run_control, - ) - data = MoveLabwareParams( labwareId="my-cool-labware-id", newLocation=DeckSlotLocation(slotName=DeckSlotName.SLOT_4), @@ -107,24 +127,24 @@ async def test_manual_move_labware_implementation( offsetId="wowzers-a-new-offset-id", ), private=None, + state_update=update_types.StateUpdate( + labware_location=update_types.LabwareLocationUpdate( + labware_id="my-cool-labware-id", + offset_id="wowzers-a-new-offset-id", + new_location=DeckSlotLocation(slotName=DeckSlotName.SLOT_5), + ) + ), ) async def test_move_labware_implementation_on_labware( decoy: Decoy, + subject: MoveLabwareImplementation, equipment: EquipmentHandler, - labware_movement: LabwareMovementHandler, state_view: StateView, run_control: RunControlHandler, ) -> None: """It should execute a pause and return the new offset.""" - subject = MoveLabwareImplementation( - state_view=state_view, - equipment=equipment, - labware_movement=labware_movement, - run_control=run_control, - ) - data = MoveLabwareParams( labwareId="my-cool-labware-id", newLocation=OnLabwareLocation(labwareId="new-labware-id"), @@ -173,23 +193,24 @@ async def test_move_labware_implementation_on_labware( offsetId="wowzers-a-new-offset-id", ), private=None, + state_update=update_types.StateUpdate( + labware_location=update_types.LabwareLocationUpdate( + labware_id="my-cool-labware-id", + offset_id="wowzers-a-new-offset-id", + new_location=OnLabwareLocation(labwareId="my-even-cooler-labware-id"), + ) + ), ) async def test_gripper_move_labware_implementation( decoy: Decoy, + subject: MoveLabwareImplementation, equipment: EquipmentHandler, labware_movement: LabwareMovementHandler, state_view: StateView, - run_control: RunControlHandler, ) -> None: """It should delegate to the equipment handler and return the new offset.""" - subject = MoveLabwareImplementation( - state_view=state_view, - equipment=equipment, - labware_movement=labware_movement, - run_control=run_control, - ) from_location = DeckSlotLocation(slotName=DeckSlotName.SLOT_1) new_location = DeckSlotLocation(slotName=DeckSlotName.SLOT_5) @@ -260,7 +281,109 @@ async def test_gripper_move_labware_implementation( offsetId="wowzers-a-new-offset-id", ), private=None, - state_update=update_types.StateUpdate(pipette_location=update_types.CLEAR), + state_update=update_types.StateUpdate( + pipette_location=update_types.CLEAR, + labware_location=update_types.LabwareLocationUpdate( + labware_id="my-cool-labware-id", + new_location=new_location, + offset_id="wowzers-a-new-offset-id", + ), + ), + ) + + +@pytest.mark.parametrize( + "underlying_exception", + [ + FailedGripperPickupError(), + LabwareDroppedError(), + StallOrCollisionDetectedError(), + ], +) +async def test_gripper_error( + decoy: Decoy, + subject: MoveLabwareImplementation, + state_view: StateView, + model_utils: ModelUtils, + labware_movement: LabwareMovementHandler, + underlying_exception: EnumeratedError, +) -> None: + """Test the handling of errors during a gripper movement.""" + labware_id = "labware-id" + labware_namespace = "labware-namespace" + labware_load_name = "load-name" + labware_definition_uri = "opentrons-test/load-name/1" + labware_def = LabwareDefinition.construct( # type: ignore[call-arg] + namespace=labware_namespace, + ) + original_location = DeckSlotLocation(slotName=DeckSlotName.SLOT_A1) + new_location = DeckSlotLocation(slotName=DeckSlotName.SLOT_A2) + error_id = "error-id" + error_created_at = datetime.now() + + # Common MoveLabwareImplementation boilerplate: + decoy.when(state_view.labware.get_definition(labware_id=labware_id)).then_return( + LabwareDefinition.construct(namespace=labware_namespace) # type: ignore[call-arg] + ) + decoy.when(state_view.labware.get(labware_id=labware_id)).then_return( + LoadedLabware( + id=labware_id, + loadName=labware_load_name, + definitionUri=labware_definition_uri, + location=original_location, + offsetId=None, + ) + ) + decoy.when( + state_view.geometry.ensure_valid_gripper_location(original_location) + ).then_return(original_location) + decoy.when( + state_view.geometry.ensure_valid_gripper_location(new_location) + ).then_return(new_location) + decoy.when( + state_view.geometry.ensure_location_not_occupied( + location=new_location, + ) + ).then_return(new_location) + decoy.when(labware_validation.validate_gripper_compatible(labware_def)).then_return( + True + ) + params = MoveLabwareParams( + labwareId=labware_id, + newLocation=new_location, + strategy=LabwareMovementStrategy.USING_GRIPPER, + ) + + # Actual setup for this test: + decoy.when( + await labware_movement.move_labware_with_gripper( + labware_id=labware_id, + current_location=original_location, + new_location=new_location, + user_offset_data=LabwareMovementOffsetData( + pickUpOffset=LabwareOffsetVector(x=0, y=0, z=0), + dropOffset=LabwareOffsetVector(x=0, y=0, z=0), + ), + post_drop_slide_offset=None, + ) + ).then_raise(underlying_exception) + decoy.when(model_utils.get_timestamp()).then_return(error_created_at) + decoy.when(model_utils.generate_id()).then_return(error_id) + + result = await subject.execute(params) + + assert result == DefinedErrorData( + public=GripperMovementError.construct( + id=error_id, + createdAt=error_created_at, + errorCode=underlying_exception.code.value.code, + detail=underlying_exception.code.value.detail, + wrappedErrors=[matchers.Anything()], + ), + state_update=update_types.StateUpdate( + labware_location=update_types.NO_CHANGE, + pipette_location=update_types.CLEAR, + ), ) @@ -273,22 +396,13 @@ async def test_gripper_move_labware_implementation( ) async def test_clears_location_if_current_labware_moved_from_under_pipette( decoy: Decoy, - equipment: EquipmentHandler, - labware_movement: LabwareMovementHandler, + subject: MoveLabwareImplementation, state_view: StateView, - run_control: RunControlHandler, current_labware_id: str, moved_labware_id: str, expect_cleared_location: bool, ) -> None: """If it moves the labware that the pipette is currently over, it should clear the location.""" - subject = MoveLabwareImplementation( - state_view=state_view, - equipment=equipment, - labware_movement=labware_movement, - run_control=run_control, - ) - from_location = DeckSlotLocation(slotName=DeckSlotName.SLOT_A1) to_location = DeckSlotLocation(slotName=DeckSlotName.SLOT_A2) @@ -324,18 +438,12 @@ async def test_clears_location_if_current_labware_moved_from_under_pipette( async def test_gripper_move_to_waste_chute_implementation( decoy: Decoy, + subject: MoveLabwareImplementation, equipment: EquipmentHandler, labware_movement: LabwareMovementHandler, state_view: StateView, - run_control: RunControlHandler, ) -> None: """It should drop the labware with a delay added.""" - subject = MoveLabwareImplementation( - state_view=state_view, - equipment=equipment, - labware_movement=labware_movement, - run_control=run_control, - ) from_location = DeckSlotLocation(slotName=DeckSlotName.SLOT_1) new_location = AddressableAreaLocation(addressableAreaName="gripperWasteChute") labware_width = 50 @@ -409,24 +517,24 @@ async def test_gripper_move_to_waste_chute_implementation( offsetId="wowzers-a-new-offset-id", ), private=None, - state_update=update_types.StateUpdate(pipette_location=update_types.CLEAR), + state_update=update_types.StateUpdate( + pipette_location=update_types.CLEAR, + labware_location=update_types.LabwareLocationUpdate( + labware_id="my-cool-labware-id", + new_location=new_location, + offset_id="wowzers-a-new-offset-id", + ), + ), ) async def test_move_labware_raises_for_labware_or_module_not_found( decoy: Decoy, + subject: MoveLabwareImplementation, equipment: EquipmentHandler, - labware_movement: LabwareMovementHandler, - run_control: RunControlHandler, state_view: StateView, ) -> None: """It should raise an error when specified labware/ module is not found.""" - subject = MoveLabwareImplementation( - state_view=state_view, - labware_movement=labware_movement, - equipment=equipment, - run_control=run_control, - ) move_non_existent_labware_params = MoveLabwareParams( labwareId="my-cool-labware-id", newLocation=DeckSlotLocation(slotName=DeckSlotName.SLOT_5), @@ -471,19 +579,12 @@ async def test_move_labware_raises_for_labware_or_module_not_found( async def test_move_labware_raises_if_movement_obstructed( decoy: Decoy, + subject: MoveLabwareImplementation, equipment: EquipmentHandler, labware_movement: LabwareMovementHandler, state_view: StateView, - run_control: RunControlHandler, ) -> None: """It should execute a pause and return the new offset.""" - subject = MoveLabwareImplementation( - state_view=state_view, - equipment=equipment, - labware_movement=labware_movement, - run_control=run_control, - ) - data = MoveLabwareParams( labwareId="my-cool-labware-id", newLocation=DeckSlotLocation(slotName=DeckSlotName.SLOT_5), @@ -523,18 +624,10 @@ async def test_move_labware_raises_if_movement_obstructed( async def test_move_labware_raises_when_location_occupied( decoy: Decoy, - equipment: EquipmentHandler, - labware_movement: LabwareMovementHandler, + subject: MoveLabwareImplementation, state_view: StateView, - run_control: RunControlHandler, ) -> None: """It should raise an error when trying to move labware to non-empty location.""" - subject = MoveLabwareImplementation( - state_view=state_view, - labware_movement=labware_movement, - equipment=equipment, - run_control=run_control, - ) move_labware_params = MoveLabwareParams( labwareId="my-cool-labware-id", newLocation=DeckSlotLocation(slotName=DeckSlotName.SLOT_5), @@ -561,19 +654,10 @@ async def test_move_labware_raises_when_location_occupied( async def test_move_labware_raises_when_moving_adapter_with_gripper( decoy: Decoy, - equipment: EquipmentHandler, - labware_movement: LabwareMovementHandler, + subject: MoveLabwareImplementation, state_view: StateView, - run_control: RunControlHandler, ) -> None: """It should raise an error when trying to move an adapter with a gripper.""" - subject = MoveLabwareImplementation( - state_view=state_view, - equipment=equipment, - labware_movement=labware_movement, - run_control=run_control, - ) - data = MoveLabwareParams( labwareId="my-cool-labware-id", newLocation=DeckSlotLocation(slotName=DeckSlotName.SLOT_4), @@ -611,19 +695,10 @@ async def test_move_labware_raises_when_moving_adapter_with_gripper( async def test_move_labware_raises_when_moving_labware_with_gripper_incompatible_quirk( decoy: Decoy, - equipment: EquipmentHandler, - labware_movement: LabwareMovementHandler, + subject: MoveLabwareImplementation, state_view: StateView, - run_control: RunControlHandler, ) -> None: """It should raise an error when trying to move an adapter with a gripper.""" - subject = MoveLabwareImplementation( - state_view=state_view, - equipment=equipment, - labware_movement=labware_movement, - run_control=run_control, - ) - data = MoveLabwareParams( labwareId="my-cool-labware-id", newLocation=DeckSlotLocation(slotName=DeckSlotName.SLOT_4), @@ -659,18 +734,10 @@ async def test_move_labware_raises_when_moving_labware_with_gripper_incompatible async def test_move_labware_with_gripper_raises_on_ot2( decoy: Decoy, - equipment: EquipmentHandler, - labware_movement: LabwareMovementHandler, + subject: MoveLabwareImplementation, state_view: StateView, - run_control: RunControlHandler, ) -> None: """It should raise an error when using a gripper with robot type of OT2.""" - subject = MoveLabwareImplementation( - state_view=state_view, - equipment=equipment, - labware_movement=labware_movement, - run_control=run_control, - ) data = MoveLabwareParams( labwareId="my-cool-labware-id", newLocation=DeckSlotLocation(slotName=DeckSlotName.SLOT_4), @@ -700,19 +767,10 @@ async def test_move_labware_with_gripper_raises_on_ot2( async def test_move_labware_raises_when_moving_fixed_trash_labware( decoy: Decoy, - equipment: EquipmentHandler, - labware_movement: LabwareMovementHandler, + subject: MoveLabwareImplementation, state_view: StateView, - run_control: RunControlHandler, ) -> None: """It should raise an error when trying to move a fixed trash.""" - subject = MoveLabwareImplementation( - state_view=state_view, - equipment=equipment, - labware_movement=labware_movement, - run_control=run_control, - ) - data = MoveLabwareParams( labwareId="my-cool-labware-id", newLocation=DeckSlotLocation(slotName=DeckSlotName.FIXED_TRASH), diff --git a/api/tests/opentrons/protocol_engine/commands/test_pick_up_tip.py b/api/tests/opentrons/protocol_engine/commands/test_pick_up_tip.py index 9b92fd219a0..c4ff37c501d 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_pick_up_tip.py +++ b/api/tests/opentrons/protocol_engine/commands/test_pick_up_tip.py @@ -78,7 +78,11 @@ async def test_success( pipette_id="pipette-id", new_location=update_types.Well(labware_id="labware-id", well_name="A3"), new_deck_point=DeckPoint(x=111, y=222, z=333), - ) + ), + pipette_tip_state=update_types.PipetteTipStateUpdate( + pipette_id="pipette-id", + tip_geometry=TipGeometry(length=42, diameter=5, volume=300), + ), ), ) diff --git a/api/tests/opentrons/protocol_engine/commands/test_reload_labware.py b/api/tests/opentrons/protocol_engine/commands/test_reload_labware.py index 51b3f24b753..c79727c9a31 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_reload_labware.py +++ b/api/tests/opentrons/protocol_engine/commands/test_reload_labware.py @@ -1,5 +1,9 @@ """Test load labware commands.""" import inspect +from opentrons.protocol_engine.state.update_types import ( + LabwareLocationUpdate, + StateUpdate, +) import pytest from decoy import Decoy @@ -63,6 +67,13 @@ async def test_reload_labware_implementation( offsetId="labware-offset-id", ), private=None, + state_update=StateUpdate( + labware_location=LabwareLocationUpdate( + labware_id="my-labware-id", + new_location=DeckSlotLocation(slotName=DeckSlotName.SLOT_4), + offset_id="labware-offset-id", + ) + ), ) diff --git a/api/tests/opentrons/protocol_engine/commands/thermocycler/test_run_extended_profile.py b/api/tests/opentrons/protocol_engine/commands/thermocycler/test_run_extended_profile.py new file mode 100644 index 00000000000..9dcefceb9f1 --- /dev/null +++ b/api/tests/opentrons/protocol_engine/commands/thermocycler/test_run_extended_profile.py @@ -0,0 +1,115 @@ +"""Test Thermocycler run profile command implementation.""" +from typing import List, Union + +from decoy import Decoy + +from opentrons.hardware_control.modules import Thermocycler + +from opentrons.protocol_engine.state.state import StateView +from opentrons.protocol_engine.state.module_substates import ( + ThermocyclerModuleSubState, + ThermocyclerModuleId, +) +from opentrons.protocol_engine.execution import EquipmentHandler +from opentrons.protocol_engine.commands import thermocycler as tc_commands +from opentrons.protocol_engine.commands.command import SuccessData +from opentrons.protocol_engine.commands.thermocycler.run_extended_profile import ( + RunExtendedProfileImpl, + ProfileStep, + ProfileCycle, +) + + +async def test_run_extended_profile( + decoy: Decoy, + state_view: StateView, + equipment: EquipmentHandler, +) -> None: + """It should be able to execute the specified module's profile run.""" + subject = RunExtendedProfileImpl(state_view=state_view, equipment=equipment) + + step_data: List[Union[ProfileStep, ProfileCycle]] = [ + ProfileStep(celsius=12.3, holdSeconds=45), + ProfileCycle( + steps=[ + ProfileStep(celsius=78.9, holdSeconds=910), + ProfileStep(celsius=12, holdSeconds=1), + ], + repetitions=2, + ), + ProfileStep(celsius=45.6, holdSeconds=78), + ProfileCycle( + steps=[ + ProfileStep(celsius=56, holdSeconds=11), + ProfileStep(celsius=34, holdSeconds=10), + ], + repetitions=1, + ), + ] + data = tc_commands.RunExtendedProfileParams( + moduleId="input-thermocycler-id", + profileElements=step_data, + blockMaxVolumeUl=56.7, + ) + expected_result = tc_commands.RunExtendedProfileResult() + + tc_module_substate = decoy.mock(cls=ThermocyclerModuleSubState) + tc_hardware = decoy.mock(cls=Thermocycler) + + decoy.when( + state_view.modules.get_thermocycler_module_substate("input-thermocycler-id") + ).then_return(tc_module_substate) + + decoy.when(tc_module_substate.module_id).then_return( + ThermocyclerModuleId("thermocycler-id") + ) + + # Stub temperature validation from hs module view + decoy.when(tc_module_substate.validate_target_block_temperature(12.3)).then_return( + 32.1 + ) + decoy.when(tc_module_substate.validate_target_block_temperature(78.9)).then_return( + 78.9 + ) + decoy.when(tc_module_substate.validate_target_block_temperature(12)).then_return(12) + decoy.when(tc_module_substate.validate_target_block_temperature(45.6)).then_return( + 65.4 + ) + decoy.when(tc_module_substate.validate_target_block_temperature(56)).then_return(56) + decoy.when(tc_module_substate.validate_target_block_temperature(34)).then_return(34) + + # Stub volume validation from hs module view + decoy.when(tc_module_substate.validate_max_block_volume(56.7)).then_return(76.5) + + # Get attached hardware modules + decoy.when( + equipment.get_module_hardware_api(ThermocyclerModuleId("thermocycler-id")) + ).then_return(tc_hardware) + + result = await subject.execute(data) + + decoy.verify( + await tc_hardware.execute_profile( + profile=[ + {"temperature": 32.1, "hold_time_seconds": 45}, + { + "steps": [ + {"temperature": 78.9, "hold_time_seconds": 910}, + {"temperature": 12, "hold_time_seconds": 1}, + ], + "repetitions": 2, + }, + {"temperature": 65.4, "hold_time_seconds": 78}, + { + "steps": [ + {"temperature": 56, "hold_time_seconds": 11}, + {"temperature": 34, "hold_time_seconds": 10}, + ], + "repetitions": 1, + }, + ], + volume=76.5, + ), + times=1, + ) + assert result == SuccessData(public=expected_result, private=None) diff --git a/api/tests/opentrons/protocol_engine/commands/unsafe/test_ungrip_labware.py b/api/tests/opentrons/protocol_engine/commands/unsafe/test_ungrip_labware.py new file mode 100644 index 00000000000..1a41244d556 --- /dev/null +++ b/api/tests/opentrons/protocol_engine/commands/unsafe/test_ungrip_labware.py @@ -0,0 +1,40 @@ +"""Test update-position-estimator commands.""" +from decoy import Decoy + +from opentrons.protocol_engine.commands.unsafe.unsafe_ungrip_labware import ( + UnsafeUngripLabwareParams, + UnsafeUngripLabwareResult, + UnsafeUngripLabwareImplementation, +) +from opentrons.protocol_engine.commands.command import SuccessData +from opentrons.protocol_engine.errors.exceptions import GripperNotAttachedError +from opentrons.hardware_control import OT3HardwareControlAPI +import pytest + + +async def test_ungrip_labware_implementation( + decoy: Decoy, ot3_hardware_api: OT3HardwareControlAPI +) -> None: + """Test UngripLabware command execution.""" + subject = UnsafeUngripLabwareImplementation(hardware_api=ot3_hardware_api) + + decoy.when(ot3_hardware_api.has_gripper()).then_return(True) + + result = await subject.execute(params=UnsafeUngripLabwareParams()) + + assert result == SuccessData(public=UnsafeUngripLabwareResult(), private=None) + + decoy.verify( + await ot3_hardware_api.ungrip(), + ) + + +async def test_ungrip_labware_implementation_raises_no_gripper_attached( + decoy: Decoy, ot3_hardware_api: OT3HardwareControlAPI +) -> None: + """Test UngripLabware command execution.""" + subject = UnsafeUngripLabwareImplementation(hardware_api=ot3_hardware_api) + + decoy.when(ot3_hardware_api.has_gripper()).then_return(False) + with pytest.raises(GripperNotAttachedError): + await subject.execute(params=UnsafeUngripLabwareParams()) diff --git a/api/tests/opentrons/protocol_engine/commands/unsafe/test_unsafe_drop_tip_in_place.py b/api/tests/opentrons/protocol_engine/commands/unsafe/test_unsafe_drop_tip_in_place.py index 6d739f97442..4913fe3c444 100644 --- a/api/tests/opentrons/protocol_engine/commands/unsafe/test_unsafe_drop_tip_in_place.py +++ b/api/tests/opentrons/protocol_engine/commands/unsafe/test_unsafe_drop_tip_in_place.py @@ -1,4 +1,8 @@ """Test unsafe drop tip in place commands.""" +from opentrons.protocol_engine.state.update_types import ( + PipetteTipStateUpdate, + StateUpdate, +) import pytest from decoy import Decoy @@ -44,7 +48,13 @@ async def test_drop_tip_implementation( result = await subject.execute(params) - assert result == SuccessData(public=UnsafeDropTipInPlaceResult(), private=None) + assert result == SuccessData( + public=UnsafeDropTipInPlaceResult(), + private=None, + state_update=StateUpdate( + pipette_tip_state=PipetteTipStateUpdate(pipette_id="abc", tip_geometry=None) + ), + ) decoy.verify( await ot3_hardware_api.update_axis_position_estimations([Axis.P_L]), diff --git a/api/tests/opentrons/protocol_engine/execution/test_equipment_handler.py b/api/tests/opentrons/protocol_engine/execution/test_equipment_handler.py index 370b76a16dd..b7a020c2d35 100644 --- a/api/tests/opentrons/protocol_engine/execution/test_equipment_handler.py +++ b/api/tests/opentrons/protocol_engine/execution/test_equipment_handler.py @@ -53,9 +53,9 @@ ) from opentrons.protocol_engine.execution.equipment import ( EquipmentHandler, - LoadedLabwareData, LoadedPipetteData, LoadedModuleData, + LoadedLabwareData, ) from ..pipette_fixtures import get_default_nozzle_map diff --git a/api/tests/opentrons/protocol_engine/execution/test_tip_handler.py b/api/tests/opentrons/protocol_engine/execution/test_tip_handler.py index 560675b8190..5abeb7308b6 100644 --- a/api/tests/opentrons/protocol_engine/execution/test_tip_handler.py +++ b/api/tests/opentrons/protocol_engine/execution/test_tip_handler.py @@ -3,10 +3,10 @@ from decoy import Decoy from mock import AsyncMock, patch -from typing import Dict, ContextManager, Optional +from typing import Dict, ContextManager, Optional, OrderedDict from contextlib import nullcontext as does_not_raise -from opentrons.types import Mount, MountType +from opentrons.types import Mount, MountType, Point from opentrons.hardware_control import API as HardwareAPI from opentrons.hardware_control.types import TipStateType from opentrons.hardware_control.protocols.types import OT2RobotType, FlexRobotType @@ -25,6 +25,8 @@ VirtualTipHandler, create_tip_handler, ) +from opentrons.hardware_control.nozzle_manager import NozzleMap +from opentrons_shared_data.pipette.pipette_definition import ValidNozzleMaps @pytest.fixture @@ -53,6 +55,17 @@ def tip_rack_definition() -> LabwareDefinition: return LabwareDefinition.construct(namespace="test", version=42) # type: ignore[call-arg] +MOCK_MAP = NozzleMap.build( + physical_nozzles=OrderedDict({"A1": Point(0, 0, 0)}), + physical_rows=OrderedDict({"A": ["A1"]}), + physical_columns=OrderedDict({"1": ["A1"]}), + starting_nozzle="A1", + back_left_nozzle="A1", + front_right_nozzle="A1", + valid_nozzle_maps=ValidNozzleMaps(maps={"Full": ["A1"]}), +) + + async def test_create_tip_handler( decoy: Decoy, mock_state_view: StateView, @@ -102,6 +115,9 @@ async def test_flex_pick_up_tip_state( decoy.when(mock_state_view.pipettes.get_mount("pipette-id")).then_return( MountType.LEFT ) + decoy.when(mock_state_view.pipettes.state.nozzle_configuration_by_id).then_return( + {"pipette-id": MOCK_MAP} + ) decoy.when( mock_state_view.geometry.get_nominal_tip_geometry( pipette_id="pipette-id", @@ -170,6 +186,10 @@ async def test_pick_up_tip( MountType.LEFT ) + decoy.when(mock_state_view.pipettes.state.nozzle_configuration_by_id).then_return( + {"pipette-id": MOCK_MAP} + ) + decoy.when( mock_state_view.geometry.get_nominal_tip_geometry( pipette_id="pipette-id", @@ -224,6 +244,9 @@ async def test_drop_tip( decoy.when(mock_state_view.pipettes.get_mount("pipette-id")).then_return( MountType.RIGHT ) + decoy.when(mock_state_view.pipettes.state.nozzle_configuration_by_id).then_return( + {"pipette-id": MOCK_MAP} + ) await subject.drop_tip(pipette_id="pipette-id", home_after=True) @@ -498,6 +521,11 @@ async def test_verify_tip_presence_on_ot3( decoy.when(mock_state_view.pipettes.get_mount("pipette-id")).then_return( MountType.LEFT ) + + decoy.when( + mock_state_view.pipettes.state.nozzle_configuration_by_id + ).then_return({"pipette-id": MOCK_MAP}) + await subject.verify_tip_presence("pipette-id", expected, None) decoy.verify( diff --git a/api/tests/opentrons/protocol_engine/state/command_fixtures.py b/api/tests/opentrons/protocol_engine/state/command_fixtures.py index df7fb4dca9a..53025629920 100644 --- a/api/tests/opentrons/protocol_engine/state/command_fixtures.py +++ b/api/tests/opentrons/protocol_engine/state/command_fixtures.py @@ -113,6 +113,22 @@ def create_succeeded_command( ) +def create_comment_command(command_id: str = "command-id") -> cmd.Comment: + """Create a completed LoadLabware command.""" + params = cmd.CommentParams(message="hello world!") + + result = cmd.CommentResult() + + return cmd.Comment( + id=command_id, + key="command-key", + status=cmd.CommandStatus.SUCCEEDED, + createdAt=datetime.now(), + params=params, + result=result, + ) + + def create_load_labware_command( labware_id: str, location: LabwareLocation, diff --git a/api/tests/opentrons/protocol_engine/state/test_command_state.py b/api/tests/opentrons/protocol_engine/state/test_command_state.py index afafcc3cabe..6f090612a74 100644 --- a/api/tests/opentrons/protocol_engine/state/test_command_state.py +++ b/api/tests/opentrons/protocol_engine/state/test_command_state.py @@ -557,6 +557,79 @@ def test_door_during_error_recovery() -> None: assert subject.state.failed_command_errors == [expected_error_occurance] +@pytest.mark.parametrize("close_door_before_queueing", [False, True]) +def test_door_ungrip_labware(close_door_before_queueing: bool) -> None: + """Ungrip commands should be able to run even when the door is open.""" + subject = CommandStore( + is_door_open=False, + error_recovery_policy=_placeholder_error_recovery_policy, + config=Config( + block_on_door_open=True, + # Choice of robot and deck type are arbitrary. + robot_type="OT-2 Standard", + deck_type=DeckType.OT2_STANDARD, + ), + ) + subject_view = CommandView(subject.state) + + # Fail a command to put the subject in recovery mode. + queue_failing = actions.QueueCommandAction( + request=commands.CommentCreate( + params=commands.CommentParams(message=""), key="command-key-1" + ), + request_hash=None, + created_at=datetime(year=2021, month=1, day=1), + command_id="failing-command-id", + ) + subject.handle_action(queue_failing) + run_failing = actions.RunCommandAction( + command_id="failing-command-id", + started_at=datetime(year=2022, month=2, day=2), + ) + subject.handle_action(run_failing) + expected_error = errors.ProtocolEngineError(message="oh no") + fail_failing = actions.FailCommandAction( + command_id="failing-command-id", + running_command=subject_view.get("failing-command-id"), + error_id="error-id", + failed_at=datetime(year=2023, month=3, day=3), + error=expected_error, + notes=[], + type=ErrorRecoveryType.WAIT_FOR_RECOVERY, + ) + subject.handle_action(fail_failing) + + # Open the door: + subject.handle_action(actions.DoorChangeAction(DoorState.OPEN)) + assert ( + subject_view.get_status() == EngineStatus.AWAITING_RECOVERY_BLOCKED_BY_OPEN_DOOR + ) + assert subject_view.get_next_to_execute() is None + + if close_door_before_queueing: + subject.handle_action(actions.DoorChangeAction(DoorState.CLOSED)) + + assert subject_view.get_status() in ( + EngineStatus.AWAITING_RECOVERY_PAUSED, # If we closed the door. + EngineStatus.AWAITING_RECOVERY_BLOCKED_BY_OPEN_DOOR, # If we didn't. + ) + + # Make sure the special ungrip command can be queued and that it will be returned + # as next to execute: + queue_fixit = actions.QueueCommandAction( + request=commands.unsafe.UnsafeUngripLabwareCreate( + params=commands.unsafe.UnsafeUngripLabwareParams(), + intent=CommandIntent.FIXIT, + ), + request_hash=None, + created_at=datetime(year=2021, month=1, day=1), + command_id="fixit-command-id", + ) + subject_view.validate_action_allowed(queue_fixit) + subject.handle_action(queue_fixit) + assert subject_view.get_next_to_execute() == "fixit-command-id" + + @pytest.mark.parametrize( ("door_initially_open", "expected_engine_status_after_play"), [ diff --git a/api/tests/opentrons/protocol_engine/state/test_command_view_old.py b/api/tests/opentrons/protocol_engine/state/test_command_view_old.py index 48918eec6eb..06318cb8d36 100644 --- a/api/tests/opentrons/protocol_engine/state/test_command_view_old.py +++ b/api/tests/opentrons/protocol_engine/state/test_command_view_old.py @@ -595,6 +595,21 @@ class ActionAllowedSpec(NamedTuple): action=ResumeFromRecoveryAction(), expected_error=errors.ResumeFromRecoveryNotAllowedError, ), + ActionAllowedSpec( + subject=get_command_view( + queue_status=QueueStatus.AWAITING_RECOVERY_PAUSED, is_door_blocking=True + ), + action=QueueCommandAction( + request=cmd.unsafe.UnsafeUngripLabwareCreate( + params=cmd.unsafe.UnsafeUngripLabwareParams(), + intent=cmd.CommandIntent.FIXIT, + ), + request_hash=None, + command_id="command-id", + created_at=datetime(year=2021, month=1, day=1), + ), + expected_error=None, + ), ] diff --git a/api/tests/opentrons/protocol_engine/state/test_geometry_view.py b/api/tests/opentrons/protocol_engine/state/test_geometry_view.py index e897e2a8570..9e7f7d027f2 100644 --- a/api/tests/opentrons/protocol_engine/state/test_geometry_view.py +++ b/api/tests/opentrons/protocol_engine/state/test_geometry_view.py @@ -1,6 +1,10 @@ """Test state getters for retrieving geometry views of state.""" import inspect import json +from opentrons.protocol_engine.state.update_types import ( + LoadedLabwareUpdate, + StateUpdate, +) import pytest from math import isclose from decoy import Decoy @@ -2559,6 +2563,15 @@ def test_get_offset_location_deck_slot( ), ), private_result=None, + state_update=StateUpdate( + loaded_labware=LoadedLabwareUpdate( + labware_id="labware-id-1", + definition=nice_labware_definition, + offset_id=None, + new_location=DeckSlotLocation(slotName=DeckSlotName.SLOT_C2), + display_name=None, + ) + ), ) labware_store.handle_action(action) offset_location = subject.get_offset_location("labware-id-1") @@ -2615,7 +2628,17 @@ def test_get_offset_location_module( ), ), private_result=None, + state_update=StateUpdate( + loaded_labware=LoadedLabwareUpdate( + labware_id="labware-id-1", + definition=nice_labware_definition, + offset_id=None, + new_location=ModuleLocation(moduleId="module-id-1"), + display_name=None, + ) + ), ) + module_store.handle_action(load_module) labware_store.handle_action(load_labware) offset_location = subject.get_offset_location("labware-id-1") @@ -2674,6 +2697,15 @@ def test_get_offset_location_module_with_adapter( ), ), private_result=None, + state_update=StateUpdate( + loaded_labware=LoadedLabwareUpdate( + labware_id="adapter-id-1", + definition=nice_adapter_definition, + offset_id=None, + new_location=ModuleLocation(moduleId="module-id-1"), + display_name=None, + ) + ), ) load_labware = SucceedCommandAction( command=LoadLabware( @@ -2694,6 +2726,15 @@ def test_get_offset_location_module_with_adapter( ), ), private_result=None, + state_update=StateUpdate( + loaded_labware=LoadedLabwareUpdate( + labware_id="labware-id-1", + definition=nice_labware_definition, + offset_id=None, + new_location=OnLabwareLocation(labwareId="adapter-id-1"), + display_name=None, + ) + ), ) module_store.handle_action(load_module) labware_store.handle_action(load_adapter) @@ -2734,6 +2775,15 @@ def test_get_offset_fails_with_off_deck_labware( ), ), private_result=None, + state_update=StateUpdate( + loaded_labware=LoadedLabwareUpdate( + labware_id="labware-id-1", + definition=nice_labware_definition, + offset_id=None, + new_location=OFF_DECK_LOCATION, + display_name=None, + ) + ), ) labware_store.handle_action(action) offset_location = subject.get_offset_location("labware-id-1") diff --git a/api/tests/opentrons/protocol_engine/state/test_labware_store.py b/api/tests/opentrons/protocol_engine/state/test_labware_store.py index cb651fc37a7..68c7e86c5ff 100644 --- a/api/tests/opentrons/protocol_engine/state/test_labware_store.py +++ b/api/tests/opentrons/protocol_engine/state/test_labware_store.py @@ -1,4 +1,6 @@ """Labware state store tests.""" +from typing import Optional +from opentrons.protocol_engine.state import update_types import pytest from datetime import datetime @@ -16,7 +18,6 @@ DeckSlotLocation, LoadedLabware, OFF_DECK_LOCATION, - LabwareMovementStrategy, ) from opentrons.protocol_engine.actions import ( AddLabwareOffsetAction, @@ -26,9 +27,7 @@ from opentrons.protocol_engine.state.labware import LabwareStore, LabwareState from .command_fixtures import ( - create_load_labware_command, - create_move_labware_command, - create_reload_labware_command, + create_comment_command, ) @@ -85,9 +84,14 @@ def test_handles_add_labware_offset( assert subject.state.labware_offsets_by_id == {"offset-id": resolved_offset} +@pytest.mark.parametrize( + "display_name, offset_id", [("display-name", "offset-id"), (None, None)] +) def test_handles_load_labware( subject: LabwareStore, well_plate_def: LabwareDefinition, + display_name: Optional[str], + offset_id: Optional[str], ) -> None: """It should add the labware data to the state.""" offset_request = LabwareOffsetCreate( @@ -96,13 +100,7 @@ def test_handles_load_labware( vector=LabwareOffsetVector(x=1, y=2, z=3), ) - command = create_load_labware_command( - location=DeckSlotLocation(slotName=DeckSlotName.SLOT_1), - labware_id="test-labware-id", - definition=well_plate_def, - offset_id="offset-id", - display_name="display-name", - ) + command = create_comment_command() expected_definition_uri = uri_from_details( load_name=well_plate_def.parameters.loadName, @@ -115,8 +113,8 @@ def test_handles_load_labware( loadName=well_plate_def.parameters.loadName, definitionUri=expected_definition_uri, location=DeckSlotLocation(slotName=DeckSlotName.SLOT_1), - offsetId="offset-id", - displayName="display-name", + offsetId=offset_id, + displayName=display_name, ) subject.handle_action( @@ -126,7 +124,21 @@ def test_handles_load_labware( created_at=datetime(year=2021, month=1, day=2), ) ) - subject.handle_action(SucceedCommandAction(private_result=None, command=command)) + subject.handle_action( + SucceedCommandAction( + private_result=None, + command=command, + state_update=update_types.StateUpdate( + loaded_labware=update_types.LoadedLabwareUpdate( + labware_id="test-labware-id", + definition=well_plate_def, + offset_id=offset_id, + display_name=display_name, + new_location=DeckSlotLocation(slotName=DeckSlotName.SLOT_1), + ), + ), + ) + ) assert subject.state.labware_by_id["test-labware-id"] == expected_labware_data @@ -138,16 +150,22 @@ def test_handles_reload_labware( well_plate_def: LabwareDefinition, ) -> None: """It should override labware data in the state.""" - load_labware = create_load_labware_command( - location=DeckSlotLocation(slotName=DeckSlotName.SLOT_A1), - labware_id="test-labware-id", - definition=well_plate_def, - display_name="display-name", - offset_id=None, - ) + command = create_comment_command() subject.handle_action( - SucceedCommandAction(private_result=None, command=load_labware) + SucceedCommandAction( + private_result=None, + command=command, + state_update=update_types.StateUpdate( + loaded_labware=update_types.LoadedLabwareUpdate( + labware_id="test-labware-id", + definition=well_plate_def, + offset_id=None, + display_name="display-name", + new_location=DeckSlotLocation(slotName=DeckSlotName.SLOT_1), + ), + ), + ) ) expected_definition_uri = uri_from_details( load_name=well_plate_def.parameters.loadName, @@ -171,19 +189,28 @@ def test_handles_reload_labware( created_at=datetime(year=2021, month=1, day=2), ) ) - reload_labware = create_reload_labware_command( - labware_id="test-labware-id", - offset_id="offset-id", + comment_command_2 = create_comment_command( + command_id="comment-id-1", ) subject.handle_action( - SucceedCommandAction(private_result=None, command=reload_labware) + SucceedCommandAction( + private_result=None, + command=comment_command_2, + state_update=update_types.StateUpdate( + labware_location=update_types.LabwareLocationUpdate( + new_location=DeckSlotLocation(slotName=DeckSlotName.SLOT_1), + offset_id="offset-id", + labware_id="test-labware-id", + ) + ), + ) ) expected_labware_data = LoadedLabware( id="test-labware-id", loadName=well_plate_def.parameters.loadName, definitionUri=expected_definition_uri, - location=DeckSlotLocation(slotName=DeckSlotName.SLOT_A1), + location=DeckSlotLocation(slotName=DeckSlotName.SLOT_1), offsetId="offset-id", displayName="display-name", ) @@ -212,13 +239,7 @@ def test_handles_move_labware( well_plate_def: LabwareDefinition, ) -> None: """It should update labware state with new location & offset.""" - load_labware_command = create_load_labware_command( - location=DeckSlotLocation(slotName=DeckSlotName.SLOT_1), - labware_id="my-labware-id", - definition=well_plate_def, - offset_id="old-offset-id", - display_name="display-name", - ) + comment_command = create_comment_command() offset_request = LabwareOffsetCreate( definitionUri="offset-definition-uri", location=LabwareOffsetLocation(slotName=DeckSlotName.SLOT_1), @@ -232,21 +253,40 @@ def test_handles_move_labware( ) ) subject.handle_action( - SucceedCommandAction(private_result=None, command=load_labware_command) + SucceedCommandAction( + private_result=None, + command=comment_command, + state_update=update_types.StateUpdate( + loaded_labware=update_types.LoadedLabwareUpdate( + labware_id="my-labware-id", + definition=well_plate_def, + offset_id=None, + display_name="display-name", + new_location=DeckSlotLocation(slotName=DeckSlotName.SLOT_1), + ), + ), + ) ) - move_command = create_move_labware_command( - labware_id="my-labware-id", - new_location=DeckSlotLocation(slotName=DeckSlotName.SLOT_4), - offset_id="my-new-offset", - strategy=LabwareMovementStrategy.MANUAL_MOVE_WITH_PAUSE, + comment_2 = create_comment_command( + command_id="my-command-id", ) subject.handle_action( - SucceedCommandAction(private_result=None, command=move_command) + SucceedCommandAction( + private_result=None, + command=comment_2, + state_update=update_types.StateUpdate( + labware_location=update_types.LabwareLocationUpdate( + labware_id="my-labware-id", + offset_id="my-new-offset", + new_location=DeckSlotLocation(slotName=DeckSlotName.SLOT_1), + ), + ), + ) ) assert subject.state.labware_by_id["my-labware-id"].location == DeckSlotLocation( - slotName=DeckSlotName.SLOT_4 + slotName=DeckSlotName.SLOT_1 ) assert subject.state.labware_by_id["my-labware-id"].offsetId == "my-new-offset" @@ -256,13 +296,7 @@ def test_handles_move_labware_off_deck( well_plate_def: LabwareDefinition, ) -> None: """It should update labware state with new location & offset.""" - load_labware_command = create_load_labware_command( - location=DeckSlotLocation(slotName=DeckSlotName.SLOT_1), - labware_id="my-labware-id", - definition=well_plate_def, - offset_id="old-offset-id", - display_name="display-name", - ) + comment_command = create_comment_command() offset_request = LabwareOffsetCreate( definitionUri="offset-definition-uri", location=LabwareOffsetLocation(slotName=DeckSlotName.SLOT_1), @@ -276,16 +310,36 @@ def test_handles_move_labware_off_deck( ) ) subject.handle_action( - SucceedCommandAction(private_result=None, command=load_labware_command) + SucceedCommandAction( + private_result=None, + command=comment_command, + state_update=update_types.StateUpdate( + loaded_labware=update_types.LoadedLabwareUpdate( + labware_id="my-labware-id", + definition=well_plate_def, + offset_id=None, + display_name="display-name", + new_location=DeckSlotLocation(slotName=DeckSlotName.SLOT_1), + ), + ), + ) ) - move_labware_off_deck_cmd = create_move_labware_command( - labware_id="my-labware-id", - new_location=OFF_DECK_LOCATION, - strategy=LabwareMovementStrategy.MANUAL_MOVE_WITH_PAUSE, + comment_2 = create_comment_command( + command_id="my-command-id", ) subject.handle_action( - SucceedCommandAction(private_result=None, command=move_labware_off_deck_cmd) + SucceedCommandAction( + private_result=None, + command=comment_2, + state_update=update_types.StateUpdate( + labware_location=update_types.LabwareLocationUpdate( + labware_id="my-labware-id", + new_location=OFF_DECK_LOCATION, + offset_id=None, + ) + ), + ) ) assert subject.state.labware_by_id["my-labware-id"].location == OFF_DECK_LOCATION assert subject.state.labware_by_id["my-labware-id"].offsetId is None diff --git a/api/tests/opentrons/protocol_engine/state/test_pipette_store.py b/api/tests/opentrons/protocol_engine/state/test_pipette_store.py index 0ba973e4cd1..81ddf13f5d8 100644 --- a/api/tests/opentrons/protocol_engine/state/test_pipette_store.py +++ b/api/tests/opentrons/protocol_engine/state/test_pipette_store.py @@ -99,7 +99,13 @@ def test_location_state_update(subject: PipetteStore) -> None: well_name="let's go party", ), new_deck_point=DeckPoint(x=111, y=222, z=333), - ) + ), + loaded_pipette=update_types.LoadPipetteUpdate( + pipette_id="pipette-id", + liquid_presence_detection=None, + pipette_name=PipetteNameType.P300_SINGLE, + mount=MountType.RIGHT, + ), ), ) ) @@ -193,7 +199,20 @@ def test_handles_load_pipette(subject: PipetteStore) -> None: mount=MountType.LEFT, ) - subject.handle_action(SucceedCommandAction(private_result=None, command=command)) + subject.handle_action( + SucceedCommandAction( + private_result=None, + command=command, + state_update=update_types.StateUpdate( + loaded_pipette=update_types.LoadPipetteUpdate( + pipette_id="pipette-id", + pipette_name=PipetteNameType.P300_SINGLE, + mount=MountType.LEFT, + liquid_presence_detection=None, + ) + ), + ) + ) result = subject.state @@ -224,10 +243,31 @@ def test_handles_pick_up_and_drop_tip(subject: PipetteStore) -> None: ) subject.handle_action( - SucceedCommandAction(private_result=None, command=load_pipette_command) + SucceedCommandAction( + private_result=None, + command=load_pipette_command, + state_update=update_types.StateUpdate( + loaded_pipette=update_types.LoadPipetteUpdate( + pipette_id="abc", + pipette_name=PipetteNameType.P300_SINGLE, + mount=MountType.LEFT, + liquid_presence_detection=None, + ) + ), + ) ) + subject.handle_action( - SucceedCommandAction(private_result=None, command=pick_up_tip_command) + SucceedCommandAction( + private_result=None, + command=pick_up_tip_command, + state_update=update_types.StateUpdate( + pipette_tip_state=update_types.PipetteTipStateUpdate( + pipette_id="abc", + tip_geometry=TipGeometry(volume=42, length=101, diameter=8.0), + ) + ), + ) ) assert subject.state.attached_tip_by_id["abc"] == TipGeometry( volume=42, length=101, diameter=8.0 @@ -235,7 +275,15 @@ def test_handles_pick_up_and_drop_tip(subject: PipetteStore) -> None: assert subject.state.aspirated_volume_by_id["abc"] == 0 subject.handle_action( - SucceedCommandAction(private_result=None, command=drop_tip_command) + SucceedCommandAction( + private_result=None, + command=drop_tip_command, + state_update=update_types.StateUpdate( + pipette_tip_state=update_types.PipetteTipStateUpdate( + pipette_id="abc", tip_geometry=None + ) + ), + ) ) assert subject.state.attached_tip_by_id["abc"] is None assert subject.state.aspirated_volume_by_id["abc"] is None @@ -258,10 +306,30 @@ def test_handles_drop_tip_in_place(subject: PipetteStore) -> None: ) subject.handle_action( - SucceedCommandAction(private_result=None, command=load_pipette_command) + SucceedCommandAction( + private_result=None, + command=load_pipette_command, + state_update=update_types.StateUpdate( + loaded_pipette=update_types.LoadPipetteUpdate( + pipette_id="xyz", + pipette_name=PipetteNameType.P300_SINGLE, + mount=MountType.LEFT, + liquid_presence_detection=None, + ) + ), + ) ) subject.handle_action( - SucceedCommandAction(private_result=None, command=pick_up_tip_command) + SucceedCommandAction( + private_result=None, + command=pick_up_tip_command, + state_update=update_types.StateUpdate( + pipette_tip_state=update_types.PipetteTipStateUpdate( + pipette_id="xyz", + tip_geometry=TipGeometry(volume=42, length=101, diameter=8.0), + ) + ), + ) ) assert subject.state.attached_tip_by_id["xyz"] == TipGeometry( volume=42, length=101, diameter=8.0 @@ -269,7 +337,15 @@ def test_handles_drop_tip_in_place(subject: PipetteStore) -> None: assert subject.state.aspirated_volume_by_id["xyz"] == 0 subject.handle_action( - SucceedCommandAction(private_result=None, command=drop_tip_in_place_command) + SucceedCommandAction( + private_result=None, + command=drop_tip_in_place_command, + state_update=update_types.StateUpdate( + pipette_tip_state=update_types.PipetteTipStateUpdate( + pipette_id="xyz", tip_geometry=None + ) + ), + ) ) assert subject.state.attached_tip_by_id["xyz"] is None assert subject.state.aspirated_volume_by_id["xyz"] is None @@ -292,10 +368,30 @@ def test_handles_unsafe_drop_tip_in_place(subject: PipetteStore) -> None: ) subject.handle_action( - SucceedCommandAction(private_result=None, command=load_pipette_command) + SucceedCommandAction( + private_result=None, + command=load_pipette_command, + state_update=update_types.StateUpdate( + loaded_pipette=update_types.LoadPipetteUpdate( + pipette_id="xyz", + pipette_name=PipetteNameType.P300_SINGLE, + mount=MountType.LEFT, + liquid_presence_detection=None, + ) + ), + ) ) subject.handle_action( - SucceedCommandAction(private_result=None, command=pick_up_tip_command) + SucceedCommandAction( + private_result=None, + command=pick_up_tip_command, + state_update=update_types.StateUpdate( + pipette_tip_state=update_types.PipetteTipStateUpdate( + pipette_id="xyz", + tip_geometry=TipGeometry(volume=42, length=101, diameter=8.0), + ) + ), + ) ) assert subject.state.attached_tip_by_id["xyz"] == TipGeometry( volume=42, length=101, diameter=8.0 @@ -304,7 +400,13 @@ def test_handles_unsafe_drop_tip_in_place(subject: PipetteStore) -> None: subject.handle_action( SucceedCommandAction( - private_result=None, command=unsafe_drop_tip_in_place_command + private_result=None, + command=unsafe_drop_tip_in_place_command, + state_update=update_types.StateUpdate( + pipette_tip_state=update_types.PipetteTipStateUpdate( + pipette_id="xyz", tip_geometry=None + ) + ), ) ) assert subject.state.attached_tip_by_id["xyz"] is None @@ -331,7 +433,18 @@ def test_aspirate_adds_volume( ) subject.handle_action( - SucceedCommandAction(private_result=None, command=load_command) + SucceedCommandAction( + private_result=None, + command=load_command, + state_update=update_types.StateUpdate( + loaded_pipette=update_types.LoadPipetteUpdate( + pipette_id="pipette-id", + pipette_name=PipetteNameType.P300_SINGLE, + mount=MountType.LEFT, + liquid_presence_detection=None, + ) + ), + ) ) subject.handle_action( SucceedCommandAction(private_result=None, command=aspirate_command) @@ -373,7 +486,18 @@ def test_dispense_subtracts_volume( ) subject.handle_action( - SucceedCommandAction(private_result=None, command=load_command) + SucceedCommandAction( + private_result=None, + command=load_command, + state_update=update_types.StateUpdate( + loaded_pipette=update_types.LoadPipetteUpdate( + pipette_id="pipette-id", + pipette_name=PipetteNameType.P300_SINGLE, + mount=MountType.LEFT, + liquid_presence_detection=None, + ) + ), + ) ) subject.handle_action( SucceedCommandAction(private_result=None, command=aspirate_command) @@ -415,7 +539,18 @@ def test_blow_out_clears_volume( ) subject.handle_action( - SucceedCommandAction(private_result=None, command=load_command) + SucceedCommandAction( + private_result=None, + command=load_command, + state_update=update_types.StateUpdate( + loaded_pipette=update_types.LoadPipetteUpdate( + pipette_id="pipette-id", + pipette_name=PipetteNameType.P300_SINGLE, + mount=MountType.LEFT, + liquid_presence_detection=None, + ) + ), + ) ) subject.handle_action( SucceedCommandAction(private_result=None, command=aspirate_command) @@ -455,32 +590,42 @@ def test_add_pipette_config( ), result=cmd.LoadPipetteResult(pipetteId="pipette-id"), ) - private_result = cmd.LoadPipettePrivateResult( - pipette_id="pipette-id", - serial_number="pipette-serial", - config=LoadedStaticPipetteData( - model="pipette-model", - display_name="pipette name", - min_volume=1.23, - max_volume=4.56, - channels=7, - flow_rates=FlowRates( - default_aspirate={"a": 1}, - default_dispense={"b": 2}, - default_blow_out={"c": 3}, - ), - tip_configuration_lookup_table={4: supported_tip_fixture}, - nominal_tip_overlap={"default": 5}, - home_position=8.9, - nozzle_offset_z=10.11, - nozzle_map=get_default_nozzle_map(PipetteNameType.P300_SINGLE), - back_left_corner_offset=Point(x=1, y=2, z=3), - front_right_corner_offset=Point(x=4, y=5, z=6), - pipette_lld_settings={}, + config = LoadedStaticPipetteData( + model="pipette-model", + display_name="pipette name", + min_volume=1.23, + max_volume=4.56, + channels=7, + flow_rates=FlowRates( + default_aspirate={"a": 1}, + default_dispense={"b": 2}, + default_blow_out={"c": 3}, ), + tip_configuration_lookup_table={4: supported_tip_fixture}, + nominal_tip_overlap={"default": 5}, + home_position=8.9, + nozzle_offset_z=10.11, + nozzle_map=get_default_nozzle_map(PipetteNameType.P300_SINGLE), + back_left_corner_offset=Point(x=1, y=2, z=3), + front_right_corner_offset=Point(x=4, y=5, z=6), + pipette_lld_settings={}, + ) + + private_result = cmd.LoadPipettePrivateResult( + pipette_id="pipette-id", serial_number="pipette-serial", config=config ) subject.handle_action( - SucceedCommandAction(command=command, private_result=private_result) + SucceedCommandAction( + command=command, + private_result=private_result, + state_update=update_types.StateUpdate( + pipette_config=update_types.PipetteConfigUpdate( + pipette_id="pipette-id", + config=config, + serial_number="pipette-serial", + ) + ), + ) ) assert subject.state.static_config_by_id["pipette-id"] == StaticPipetteConfig( @@ -532,13 +677,38 @@ def test_prepare_to_aspirate_marks_pipette_ready( pipette_id="pipette-id", tip_volume=42, tip_length=101, tip_diameter=8.0 ) subject.handle_action( - SucceedCommandAction(private_result=None, command=load_pipette_command) + SucceedCommandAction( + private_result=None, + command=load_pipette_command, + state_update=update_types.StateUpdate( + loaded_pipette=update_types.LoadPipetteUpdate( + pipette_id="pipette-id", + pipette_name=PipetteNameType.P50_MULTI_FLEX, + mount=MountType.LEFT, + liquid_presence_detection=None, + ) + ), + ) ) subject.handle_action( - SucceedCommandAction(private_result=None, command=pick_up_tip_command) + SucceedCommandAction( + private_result=None, + command=pick_up_tip_command, + state_update=update_types.StateUpdate( + pipette_tip_state=update_types.PipetteTipStateUpdate( + pipette_id="pipette-id", + tip_geometry=TipGeometry(volume=42, length=101, diameter=8.0), + ) + ), + ) ) - subject.handle_action(SucceedCommandAction(private_result=None, command=previous)) + subject.handle_action( + SucceedCommandAction( + private_result=None, + command=previous, + ) + ) prepare_to_aspirate_command = create_prepare_to_aspirate_command( pipette_id="pipette-id" diff --git a/api/tests/opentrons/protocol_engine/state/test_pipette_view.py b/api/tests/opentrons/protocol_engine/state/test_pipette_view.py index e8823c3c6ad..27bee5f1d15 100644 --- a/api/tests/opentrons/protocol_engine/state/test_pipette_view.py +++ b/api/tests/opentrons/protocol_engine/state/test_pipette_view.py @@ -9,6 +9,7 @@ from opentrons_shared_data.pipette.pipette_definition import ValidNozzleMaps from opentrons.config.defaults_ot2 import Z_RETRACT_DISTANCE +from opentrons.hardware_control import CriticalPoint from opentrons.types import MountType, Mount as HwMount, Point from opentrons.hardware_control.dev_types import PipetteDict from opentrons.protocol_engine import errors @@ -586,8 +587,9 @@ class _PipetteSpecs(NamedTuple): tip_length: float bounding_box_offsets: PipetteBoundingBoxOffsets nozzle_map: NozzleMap + critical_point: Optional[CriticalPoint] destination_position: Point - nozzle_bounds_result: Tuple[Point, Point, Point, Point] + pipette_bounds_result: Tuple[Point, Point, Point, Point] _pipette_spec_cases = [ @@ -609,8 +611,9 @@ class _PipetteSpecs(NamedTuple): front_right_nozzle="H1", valid_nozzle_maps=ValidNozzleMaps(maps={"Full": EIGHT_CHANNEL_COLS["1"]}), ), + critical_point=None, destination_position=Point(100, 200, 300), - nozzle_bounds_result=( + pipette_bounds_result=( ( Point(x=100.0, y=200.0, z=342.0), Point(x=100.0, y=137.0, z=342.0), @@ -637,8 +640,9 @@ class _PipetteSpecs(NamedTuple): front_right_nozzle="H1", valid_nozzle_maps=ValidNozzleMaps(maps={"H1": ["H1"]}), ), + critical_point=None, destination_position=Point(100, 200, 300), - nozzle_bounds_result=( + pipette_bounds_result=( ( Point(x=100.0, y=263.0, z=342.0), Point(x=100.0, y=200.0, z=342.0), @@ -647,6 +651,68 @@ class _PipetteSpecs(NamedTuple): ) ), ), + _PipetteSpecs( + # 8-channel P300, full configuration. Critical point of XY_CENTER + tip_length=42, + bounding_box_offsets=PipetteBoundingBoxOffsets( + back_left_corner=Point(0.0, 31.5, 35.52), + front_right_corner=Point(0.0, -31.5, 35.52), + front_left_corner=Point(0.0, -31.5, 35.52), + back_right_corner=Point(0.0, 31.5, 35.52), + ), + nozzle_map=NozzleMap.build( + physical_nozzles=EIGHT_CHANNEL_MAP, + physical_rows=EIGHT_CHANNEL_ROWS, + physical_columns=EIGHT_CHANNEL_COLS, + starting_nozzle="A1", + back_left_nozzle="A1", + front_right_nozzle="H1", + valid_nozzle_maps=ValidNozzleMaps(maps={"Full": EIGHT_CHANNEL_COLS["1"]}), + ), + critical_point=CriticalPoint.XY_CENTER, + destination_position=Point(100, 200, 300), + pipette_bounds_result=( + ( + Point(x=100.0, y=231.5, z=342.0), + Point(x=100.0, y=168.5, z=342.0), + Point(x=100.0, y=231.5, z=342.0), + Point(x=100.0, y=168.5, z=342.0), + ) + ), + ), + _PipetteSpecs( + # 8-channel P300, Partial A1-E1 configuration. Critical point of XY_CENTER + tip_length=42, + bounding_box_offsets=PipetteBoundingBoxOffsets( + back_left_corner=Point(0.0, 31.5, 35.52), + front_right_corner=Point(0.0, -31.5, 35.52), + front_left_corner=Point(0.0, -31.5, 35.52), + back_right_corner=Point(0.0, 31.5, 35.52), + ), + nozzle_map=NozzleMap.build( + physical_nozzles=EIGHT_CHANNEL_MAP, + physical_rows=EIGHT_CHANNEL_ROWS, + physical_columns=EIGHT_CHANNEL_COLS, + starting_nozzle="H1", + back_left_nozzle="E1", + front_right_nozzle="H1", + valid_nozzle_maps=ValidNozzleMaps( + maps={ + "H1toE1": ["E1", "F1", "G1", "H1"], + } + ), + ), + critical_point=CriticalPoint.XY_CENTER, + destination_position=Point(100, 200, 300), + pipette_bounds_result=( + ( + Point(x=100.0, y=249.5, z=342.0), + Point(x=100.0, y=186.5, z=342.0), + Point(x=100.0, y=249.5, z=342.0), + Point(x=100.0, y=186.5, z=342.0), + ) + ), + ), _PipetteSpecs( # 96-channel P1000, full configuration tip_length=42, @@ -681,8 +747,9 @@ class _PipetteSpecs(NamedTuple): } ), ), + critical_point=None, destination_position=Point(100, 200, 300), - nozzle_bounds_result=( + pipette_bounds_result=( ( Point(x=100.0, y=200.0, z=342.0), Point(x=199.0, y=137.0, z=342.0), @@ -709,8 +776,9 @@ class _PipetteSpecs(NamedTuple): front_right_nozzle="H1", valid_nozzle_maps=ValidNozzleMaps(maps={"Column1": NINETY_SIX_COLS["1"]}), ), + critical_point=None, destination_position=Point(100, 200, 300), - nozzle_bounds_result=( + pipette_bounds_result=( Point(100, 200, 342), Point(199, 137, 342), Point(199, 200, 342), @@ -735,8 +803,9 @@ class _PipetteSpecs(NamedTuple): front_right_nozzle="H12", valid_nozzle_maps=ValidNozzleMaps(maps={"Column12": NINETY_SIX_COLS["12"]}), ), + critical_point=None, destination_position=Point(100, 200, 300), - nozzle_bounds_result=( + pipette_bounds_result=( Point(1, 200, 342), Point(100, 137, 342), Point(100, 200, 342), @@ -761,14 +830,96 @@ class _PipetteSpecs(NamedTuple): front_right_nozzle="A12", valid_nozzle_maps=ValidNozzleMaps(maps={"RowA": NINETY_SIX_ROWS["A"]}), ), + critical_point=None, destination_position=Point(100, 200, 300), - nozzle_bounds_result=( + pipette_bounds_result=( Point(100, 200, 342), Point(199, 137, 342), Point(199, 200, 342), Point(100, 137, 342), ), ), + _PipetteSpecs( + # 96-channel P1000, ROW configuration. Critical point of XY_CENTER + tip_length=42, + bounding_box_offsets=PipetteBoundingBoxOffsets( + back_left_corner=Point(-36.0, -25.5, -259.15), + front_right_corner=Point(63.0, -88.5, -259.15), + front_left_corner=Point(-36.0, -88.5, -259.15), + back_right_corner=Point(63.0, -25.5, -259.15), + ), + nozzle_map=NozzleMap.build( + physical_nozzles=NINETY_SIX_MAP, + physical_rows=NINETY_SIX_ROWS, + physical_columns=NINETY_SIX_COLS, + starting_nozzle="A1", + back_left_nozzle="A1", + front_right_nozzle="A12", + valid_nozzle_maps=ValidNozzleMaps(maps={"RowA": NINETY_SIX_ROWS["A"]}), + ), + critical_point=CriticalPoint.XY_CENTER, + destination_position=Point(100, 200, 300), + pipette_bounds_result=( + Point(x=50.5, y=200, z=342), + Point(x=149.5, y=137, z=342), + Point(x=149.5, y=200, z=342), + Point(x=50.5, y=137, z=342), + ), + ), + _PipetteSpecs( + # 96-channel P1000, A12 COLUMN configuration. Critical point of Y_CENTER + tip_length=42, + bounding_box_offsets=PipetteBoundingBoxOffsets( + back_left_corner=Point(-36.0, -25.5, -259.15), + front_right_corner=Point(63.0, -88.5, -259.15), + front_left_corner=Point(-36.0, -88.5, -259.15), + back_right_corner=Point(63.0, -25.5, -259.15), + ), + nozzle_map=NozzleMap.build( + physical_nozzles=NINETY_SIX_MAP, + physical_rows=NINETY_SIX_ROWS, + physical_columns=NINETY_SIX_COLS, + starting_nozzle="A12", + back_left_nozzle="A12", + front_right_nozzle="H12", + valid_nozzle_maps=ValidNozzleMaps(maps={"Column12": NINETY_SIX_COLS["12"]}), + ), + critical_point=CriticalPoint.Y_CENTER, + destination_position=Point(100, 200, 300), + pipette_bounds_result=( + Point(1, 231.5, 342), + Point(100, 168.5, 342), + Point(100, 231.5, 342), + Point(1, 168.5, 342), + ), + ), + _PipetteSpecs( + # 96-channel P1000, A1 COLUMN configuration. Critical point of XY_CENTER + tip_length=42, + bounding_box_offsets=PipetteBoundingBoxOffsets( + back_left_corner=Point(-36.0, -25.5, -259.15), + front_right_corner=Point(63.0, -88.5, -259.15), + front_left_corner=Point(-36.0, -88.5, -259.15), + back_right_corner=Point(63.0, -25.5, -259.15), + ), + nozzle_map=NozzleMap.build( + physical_nozzles=NINETY_SIX_MAP, + physical_rows=NINETY_SIX_ROWS, + physical_columns=NINETY_SIX_COLS, + starting_nozzle="A1", + back_left_nozzle="A1", + front_right_nozzle="H1", + valid_nozzle_maps=ValidNozzleMaps(maps={"Column1": NINETY_SIX_COLS["1"]}), + ), + critical_point=CriticalPoint.XY_CENTER, + destination_position=Point(100, 200, 300), + pipette_bounds_result=( + Point(100, 231.5, 342), + Point(199, 168.5, 342), + Point(199, 231.5, 342), + Point(100, 168.5, 342), + ), + ), ] @@ -776,12 +927,13 @@ class _PipetteSpecs(NamedTuple): argnames=_PipetteSpecs._fields, argvalues=_pipette_spec_cases, ) -def test_get_nozzle_bounds_at_location( +def test_get_pipette_bounds_at_location( tip_length: float, bounding_box_offsets: PipetteBoundingBoxOffsets, nozzle_map: NozzleMap, destination_position: Point, - nozzle_bounds_result: Tuple[Point, Point, Point, Point], + critical_point: Optional[CriticalPoint], + pipette_bounds_result: Tuple[Point, Point, Point, Point], ) -> None: """It should get the pipette's nozzle's bounds at the given location.""" subject = get_pipette_view( @@ -810,7 +962,9 @@ def test_get_nozzle_bounds_at_location( ) assert ( subject.get_pipette_bounds_at_specified_move_to_position( - pipette_id="pipette-id", destination_position=destination_position + pipette_id="pipette-id", + destination_position=destination_position, + critical_point=critical_point, ) - == nozzle_bounds_result + == pipette_bounds_result ) diff --git a/api/tests/opentrons/protocol_runner/test_json_translator.py b/api/tests/opentrons/protocol_runner/test_json_translator.py index d7c82ca7475..a583fcbf1c4 100644 --- a/api/tests/opentrons/protocol_runner/test_json_translator.py +++ b/api/tests/opentrons/protocol_runner/test_json_translator.py @@ -85,17 +85,17 @@ protocol_schema_v8.Command( commandType="aspirate", key=None, - params=protocol_schema_v8.Params( - pipetteId="pipette-id-1", - labwareId="labware-id-2", - volume=1.23, - flowRate=4.56, - wellName="A1", - wellLocation=SD_WellLocation( - origin="bottom", - offset=OffsetVector(x=0, y=0, z=7.89), - ), - ), + params={ + "pipetteId": "pipette-id-1", + "labwareId": "labware-id-2", + "volume": 1.23, + "flowRate": 4.56, + "wellName": "A1", + "wellLocation": { + "origin": "bottom", + "offset": {"x": 0, "y": 0, "z": 7.89}, + }, + }, ), pe_commands.AspirateCreate( key=None, @@ -147,17 +147,17 @@ protocol_schema_v8.Command( commandType="dispense", key="dispense-key", - params=protocol_schema_v8.Params( - pipetteId="pipette-id-1", - labwareId="labware-id-2", - volume=1.23, - flowRate=4.56, - wellName="A1", - wellLocation=SD_WellLocation( - origin="bottom", - offset=OffsetVector(x=0, y=0, z=7.89), - ), - ), + params={ + "pipetteId": "pipette-id-1", + "labwareId": "labware-id-2", + "volume": 1.23, + "flowRate": 4.56, + "wellName": "A1", + "wellLocation": { + "origin": "bottom", + "offset": {"x": 0, "y": 0, "z": 7.89}, + }, + }, ), pe_commands.DispenseCreate( key="dispense-key", @@ -193,11 +193,11 @@ ), protocol_schema_v8.Command( commandType="dropTip", - params=protocol_schema_v8.Params( - pipetteId="pipette-id-1", - labwareId="labware-id-2", - wellName="A1", - ), + params={ + "pipetteId": "pipette-id-1", + "labwareId": "labware-id-2", + "wellName": "A1", + }, ), pe_commands.DropTipCreate( params=pe_commands.DropTipParams( @@ -230,11 +230,11 @@ ), protocol_schema_v8.Command( commandType="pickUpTip", - params=protocol_schema_v8.Params( - pipetteId="pipette-id-1", - labwareId="labware-id-2", - wellName="A1", - ), + params={ + "pipetteId": "pipette-id-1", + "labwareId": "labware-id-2", + "wellName": "A1", + }, ), pe_commands.PickUpTipCreate( params=pe_commands.PickUpTipParams( @@ -272,15 +272,15 @@ ), protocol_schema_v8.Command( commandType="touchTip", - params=protocol_schema_v8.Params( - pipetteId="pipette-id-1", - labwareId="labware-id-2", - wellName="A1", - wellLocation=SD_WellLocation( - origin="bottom", - offset=OffsetVector(x=0, y=0, z=-1.23), - ), - ), + params={ + "pipetteId": "pipette-id-1", + "labwareId": "labware-id-2", + "wellName": "A1", + "wellLocation": { + "origin": "bottom", + "offset": {"x": 0, "y": 0, "z": -1.23}, + }, + }, ), pe_commands.TouchTipCreate( params=pe_commands.TouchTipParams( @@ -307,9 +307,11 @@ ), protocol_schema_v8.Command( commandType="loadPipette", - params=protocol_schema_v8.Params( - pipetteId="pipette-id-1", mount="left", pipetteName="p10_single" - ), + params={ + "pipetteId": "pipette-id-1", + "mount": "left", + "pipetteName": "p10_single", + }, ), pe_commands.LoadPipetteCreate( params=pe_commands.LoadPipetteParams( @@ -337,11 +339,11 @@ ), protocol_schema_v8.Command( commandType="loadModule", - params=protocol_schema_v8.Params( - moduleId="module-id-1", - model="magneticModuleV2", - location=Location(slotName="3"), - ), + params={ + "moduleId": "module-id-1", + "model": "magneticModuleV2", + "location": {"slotName": "3"}, + }, ), pe_commands.LoadModuleCreate( params=pe_commands.LoadModuleParams( @@ -372,14 +374,14 @@ ), protocol_schema_v8.Command( commandType="loadLabware", - params=protocol_schema_v8.Params( - labwareId="labware-id-2", - version=1, - namespace="example", - loadName="foo_8_plate_33ul", - location=Location(moduleId="temperatureModuleId"), - displayName="Trash", - ), + params={ + "labwareId": "labware-id-2", + "version": 1, + "namespace": "example", + "loadName": "foo_8_plate_33ul", + "location": {"moduleId": "temperatureModuleId"}, + "displayName": "Trash", + }, ), pe_commands.LoadLabwareCreate( params=pe_commands.LoadLabwareParams( @@ -421,16 +423,16 @@ ), protocol_schema_v8.Command( commandType="blowout", - params=protocol_schema_v8.Params( - pipetteId="pipette-id-1", - labwareId="labware-id-2", - wellName="A1", - wellLocation=SD_WellLocation( - origin="bottom", - offset=OffsetVector(x=0, y=0, z=7.89), - ), - flowRate=1.23, - ), + params={ + "pipetteId": "pipette-id-1", + "labwareId": "labware-id-2", + "wellName": "A1", + "wellLocation": { + "origin": "bottom", + "offset": {"x": 0, "y": 0, "z": 7.89}, + }, + "flowRate": 1.23, + }, ), pe_commands.BlowOutCreate( params=pe_commands.BlowOutParams( @@ -456,7 +458,7 @@ ), protocol_schema_v8.Command( commandType="delay", - params=protocol_schema_v8.Params(waitForResume=True, message="hello world"), + params={"waitForResume": True, "message": "hello world"}, ), pe_commands.WaitForResumeCreate( params=pe_commands.WaitForResumeParams(message="hello world") @@ -473,7 +475,7 @@ ), protocol_schema_v8.Command( commandType="delay", - params=protocol_schema_v8.Params(seconds=12.34, message="hello world"), + params={"seconds": 12.34, "message": "hello world"}, ), pe_commands.WaitForDurationCreate( params=pe_commands.WaitForDurationParams( @@ -493,7 +495,7 @@ ), protocol_schema_v8.Command( commandType="waitForResume", - params=protocol_schema_v8.Params(message="hello world"), + params={"message": "hello world"}, ), pe_commands.WaitForResumeCreate( params=pe_commands.WaitForResumeParams(message="hello world") @@ -510,7 +512,7 @@ ), protocol_schema_v8.Command( commandType="waitForDuration", - params=protocol_schema_v8.Params(seconds=12.34, message="hello world"), + params={"seconds": 12.34, "message": "hello world"}, ), pe_commands.WaitForDurationCreate( params=pe_commands.WaitForDurationParams( @@ -540,12 +542,12 @@ ), protocol_schema_v8.Command( commandType="moveToCoordinates", - params=protocol_schema_v8.Params( - pipetteId="pipette-id-1", - coordinates=OffsetVector(x=1.1, y=2.2, z=3.3), - minimumZHeight=123.4, - forceDirect=True, - ), + params={ + "pipetteId": "pipette-id-1", + "coordinates": {"x": 1.1, "y": 2.2, "z": 3.3}, + "minimumZHeight": 123.4, + "forceDirect": True, + }, ), pe_commands.MoveToCoordinatesCreate( params=pe_commands.MoveToCoordinatesParams( @@ -593,20 +595,20 @@ ), protocol_schema_v8.Command( commandType="thermocycler/runProfile", - params=protocol_schema_v8.Params( - moduleId="module-id-2", - blockMaxVolumeUl=1.11, - profile=[ - ProfileStep( - celsius=2.22, - holdSeconds=3.33, - ), - ProfileStep( - celsius=4.44, - holdSeconds=5.55, - ), + params={ + "moduleId": "module-id-2", + "blockMaxVolumeUl": 1.11, + "profile": [ + { + "celsius": 2.22, + "holdSeconds": 3.33, + }, + { + "celsius": 4.44, + "holdSeconds": 5.55, + }, ], - ), + }, ), pe_commands.thermocycler.RunProfileCreate( params=pe_commands.thermocycler.RunProfileParams( @@ -645,11 +647,11 @@ protocol_schema_v8.Command( commandType="loadLiquid", key=None, - params=protocol_schema_v8.Params( - labwareId="labware-id-2", - liquidId="liquid-id-555", - volumeByWell={"A1": 32, "B2": 50}, - ), + params={ + "labwareId": "labware-id-2", + "liquidId": "liquid-id-555", + "volumeByWell": {"A1": 32, "B2": 50}, + }, ), pe_commands.LoadLiquidCreate( key=None, @@ -706,7 +708,7 @@ def _load_labware_definition_data() -> LabwareDefinition: ], bottomShape=SphericalSegment( shape="spherical", - radius_of_curvature=6, + radiusOfCurvature=6, depth=10, ), ) @@ -816,7 +818,7 @@ def _make_v8_json_protocol( ), labwareDefinitions=labware_definitions, labwareDefinitionSchemaId="opentronsLabwareSchemaV2", - commandSchemaId="opentronsCommandSchemaV8", + commandSchemaId=protocol_schema_v8.CommandSchemaId("opentronsCommandSchemaV8"), commands=commands, liquidSchemaId="opentronsLiquidSchemaV1", liquids=liquids, diff --git a/api/tests/opentrons/protocol_runner/test_legacy_command_mapper.py b/api/tests/opentrons/protocol_runner/test_legacy_command_mapper.py index ed171280d17..8663c3e0a8d 100644 --- a/api/tests/opentrons/protocol_runner/test_legacy_command_mapper.py +++ b/api/tests/opentrons/protocol_runner/test_legacy_command_mapper.py @@ -3,6 +3,11 @@ from datetime import datetime from typing import cast +from opentrons.protocol_engine.state.update_types import ( + LoadPipetteUpdate, + LoadedLabwareUpdate, + StateUpdate, +) import pytest from decoy import matchers, Decoy @@ -316,6 +321,15 @@ def test_map_labware_load(minimal_labware_def: LabwareDefinition) -> None: notes=[], ), private_result=None, + state_update=StateUpdate( + loaded_labware=LoadedLabwareUpdate( + labware_id="labware-0", + definition=matchers.Anything(), + offset_id="labware-offset-id-123", + new_location=DeckSlotLocation(slotName=DeckSlotName.SLOT_1), + display_name="My special labware", + ) + ), ) result_queue, result_run, result_succeed = LegacyCommandMapper().map_equipment_load( input @@ -369,6 +383,14 @@ def test_map_instrument_load(decoy: Decoy) -> None: private_result=pe_commands.LoadPipettePrivateResult( pipette_id="pipette-0", serial_number="fizzbuzz", config=pipette_config ), + state_update=StateUpdate( + loaded_pipette=LoadPipetteUpdate( + pipette_id="pipette-0", + mount=expected_params.mount, + pipette_name=expected_params.pipetteName, + liquid_presence_detection=expected_params.liquidPresenceDetection, + ) + ), ) [ @@ -500,6 +522,15 @@ def test_map_module_labware_load(minimal_labware_def: LabwareDefinition) -> None notes=[], ), private_result=None, + state_update=StateUpdate( + loaded_labware=LoadedLabwareUpdate( + labware_id="labware-0", + definition=matchers.Anything(), + offset_id="labware-offset-id-123", + new_location=ModuleLocation(moduleId="module-123"), + display_name="My very special module labware", + ) + ), ) subject = LegacyCommandMapper() diff --git a/api/tests/opentrons/protocols/geometry/test_frustum_helpers.py b/api/tests/opentrons/protocols/geometry/test_frustum_helpers.py new file mode 100644 index 00000000000..0bf74aae5b2 --- /dev/null +++ b/api/tests/opentrons/protocols/geometry/test_frustum_helpers.py @@ -0,0 +1,265 @@ +import pytest +from math import pi, isclose +from typing import Any, List + +from opentrons_shared_data.labware.types import ( + RectangularBoundedSection, + CircularBoundedSection, + SphericalSegment, +) +from opentrons.protocol_engine.state.frustum_helpers import ( + cross_section_area_rectangular, + cross_section_area_circular, + reject_unacceptable_heights, + get_boundary_pairs, + circular_frustum_polynomial_roots, + rectangular_frustum_polynomial_roots, + volume_from_height_rectangular, + volume_from_height_circular, + volume_from_height_spherical, + height_from_volume_circular, + height_from_volume_rectangular, + height_from_volume_spherical, +) +from opentrons.protocol_engine.errors.exceptions import InvalidLiquidHeightFound + + +def fake_frusta() -> List[List[Any]]: + """A bunch of weird fake well shapes.""" + frusta = [] + frusta.append( + [ + RectangularBoundedSection( + shape="rectangular", xDimension=9.0, yDimension=10.0, topHeight=10.0 + ), + RectangularBoundedSection( + shape="rectangular", xDimension=8.0, yDimension=9.0, topHeight=5.0 + ), + CircularBoundedSection(shape="circular", diameter=23.0, topHeight=1.0), + SphericalSegment(shape="spherical", radiusOfCurvature=4.0, depth=1.0), + ] + ) + frusta.append( + [ + RectangularBoundedSection( + shape="rectangular", xDimension=8.0, yDimension=70.0, topHeight=3.5 + ), + RectangularBoundedSection( + shape="rectangular", xDimension=8.0, yDimension=75.0, topHeight=2.0 + ), + RectangularBoundedSection( + shape="rectangular", xDimension=8.0, yDimension=80.0, topHeight=1.0 + ), + RectangularBoundedSection( + shape="rectangular", xDimension=8.0, yDimension=90.0, topHeight=0.0 + ), + ] + ) + frusta.append( + [ + CircularBoundedSection(shape="circular", diameter=23.0, topHeight=7.5), + CircularBoundedSection(shape="circular", diameter=11.5, topHeight=5.0), + CircularBoundedSection(shape="circular", diameter=23.0, topHeight=2.5), + CircularBoundedSection(shape="circular", diameter=11.5, topHeight=0.0), + ] + ) + frusta.append( + [ + CircularBoundedSection(shape="circular", diameter=4.0, topHeight=3.0), + CircularBoundedSection(shape="circular", diameter=5.0, topHeight=2.0), + SphericalSegment(shape="spherical", radiusOfCurvature=3.5, depth=2.0), + ] + ) + frusta.append( + [SphericalSegment(shape="spherical", radiusOfCurvature=4.0, depth=3.0)] + ) + frusta.append( + [ + RectangularBoundedSection( + shape="rectangular", xDimension=27.0, yDimension=36.0, topHeight=3.5 + ), + RectangularBoundedSection( + shape="rectangular", xDimension=36.0, yDimension=26.0, topHeight=1.5 + ), + SphericalSegment(shape="spherical", radiusOfCurvature=4.0, depth=1.5), + ] + ) + return frusta + + +@pytest.mark.parametrize( + ["max_height", "potential_heights", "expected_heights"], + [ + (34, [complex(4, 5), complex(5, 0), 35, 34, 33, 10, 0], [5, 34, 33, 10, 0]), + (2934, [complex(4, 5), complex(5, 0)], [5]), + (100, [-99, -1, complex(99.99, 0), 101], [99.99]), + (2, [0, -1, complex(-1.5, 0)], [0]), + (8, [complex(7, 1), -0.01], []), + ], +) +def test_reject_unacceptable_heights( + max_height: float, potential_heights: List[Any], expected_heights: List[float] +) -> None: + """Make sure we reject all mathematical solutions that are physically not possible.""" + if len(expected_heights) != 1: + with pytest.raises(InvalidLiquidHeightFound): + reject_unacceptable_heights( + max_height=max_height, potential_heights=potential_heights + ) + else: + found_heights = reject_unacceptable_heights( + max_height=max_height, potential_heights=potential_heights + ) + assert found_heights == expected_heights[0] + + +@pytest.mark.parametrize("diameter", [2, 5, 8, 356, 1000]) +def test_cross_section_area_circular(diameter: float) -> None: + """Test circular area calculation.""" + expected_area = pi * (diameter / 2) ** 2 + assert cross_section_area_circular(diameter) == expected_area + + +@pytest.mark.parametrize( + ["x_dimension", "y_dimension"], [(1, 38402), (234, 983), (94857, 40), (234, 999)] +) +def test_cross_section_area_rectangular(x_dimension: float, y_dimension: float) -> None: + """Test rectangular area calculation.""" + expected_area = x_dimension * y_dimension + assert ( + cross_section_area_rectangular(x_dimension=x_dimension, y_dimension=y_dimension) + == expected_area + ) + + +@pytest.mark.parametrize("well", fake_frusta()) +def test_get_cross_section_boundaries(well: List[List[Any]]) -> None: + """Make sure get_cross_section_boundaries returns the expected list indices.""" + i = 0 + for f, next_f in get_boundary_pairs(well): + assert f == well[i] + assert next_f == well[i + 1] + i += 1 + + +@pytest.mark.parametrize("well", fake_frusta()) +def test_volume_and_height_circular(well: List[Any]) -> None: + """Test both volume and height calculations for circular frusta.""" + if well[-1]["shape"] == "spherical": + return + total_height = well[0]["topHeight"] + for f, next_f in get_boundary_pairs(well): + if f["shape"] == next_f["shape"] == "circular": + top_radius = next_f["diameter"] / 2 + bottom_radius = f["diameter"] / 2 + a = pi * ((top_radius - bottom_radius) ** 2) / (3 * total_height**2) + b = pi * bottom_radius * (top_radius - bottom_radius) / total_height + c = pi * bottom_radius**2 + assert circular_frustum_polynomial_roots( + top_radius=top_radius, + bottom_radius=bottom_radius, + total_frustum_height=total_height, + ) == (a, b, c) + # test volume within a bunch of arbitrary heights + for target_height in range(round(total_height)): + expected_volume = ( + a * (target_height**3) + + b * (target_height**2) + + c * target_height + ) + found_volume = volume_from_height_circular( + target_height=target_height, + total_frustum_height=total_height, + bottom_radius=bottom_radius, + top_radius=top_radius, + ) + assert found_volume == expected_volume + # test going backwards to get height back + found_height = height_from_volume_circular( + volume=found_volume, + total_frustum_height=total_height, + bottom_radius=bottom_radius, + top_radius=top_radius, + ) + assert isclose(found_height, target_height) + + +@pytest.mark.parametrize("well", fake_frusta()) +def test_volume_and_height_rectangular(well: List[Any]) -> None: + """Test both volume and height calculations for rectangular frusta.""" + if well[-1]["shape"] == "spherical": + return + total_height = well[0]["topHeight"] + for f, next_f in get_boundary_pairs(well): + if f["shape"] == next_f["shape"] == "rectangular": + top_length = next_f["yDimension"] + top_width = next_f["xDimension"] + bottom_length = f["yDimension"] + bottom_width = f["xDimension"] + a = ( + (top_length - bottom_length) + * (top_width - bottom_width) + / (3 * total_height**2) + ) + b = ( + (bottom_length * (top_width - bottom_width)) + + (bottom_width * (top_length - bottom_length)) + ) / (2 * total_height) + c = bottom_length * bottom_width + assert rectangular_frustum_polynomial_roots( + top_length=top_length, + bottom_length=bottom_length, + top_width=top_width, + bottom_width=bottom_width, + total_frustum_height=total_height, + ) == (a, b, c) + # test volume within a bunch of arbitrary heights + for target_height in range(round(total_height)): + expected_volume = ( + a * (target_height**3) + + b * (target_height**2) + + c * target_height + ) + found_volume = volume_from_height_rectangular( + target_height=target_height, + total_frustum_height=total_height, + bottom_length=bottom_length, + bottom_width=bottom_width, + top_length=top_length, + top_width=top_width, + ) + assert found_volume == expected_volume + # test going backwards to get height back + found_height = height_from_volume_rectangular( + volume=found_volume, + total_frustum_height=total_height, + bottom_length=bottom_length, + bottom_width=bottom_width, + top_length=top_length, + top_width=top_width, + ) + assert isclose(found_height, target_height) + + +@pytest.mark.parametrize("well", fake_frusta()) +def test_volume_and_height_spherical(well: List[Any]) -> None: + """Test both volume and height calculations for spherical segments.""" + if well[0]["shape"] == "spherical": + for target_height in range(round(well[0]["depth"])): + expected_volume = ( + (1 / 3) + * pi + * (target_height**2) + * (3 * well[0]["radiusOfCurvature"] - target_height) + ) + found_volume = volume_from_height_spherical( + target_height=target_height, + radius_of_curvature=well[0]["radiusOfCurvature"], + ) + assert found_volume == expected_volume + found_height = height_from_volume_spherical( + volume=found_volume, + radius_of_curvature=well[0]["radiusOfCurvature"], + total_frustum_height=well[0]["depth"], + ) + assert isclose(found_height, target_height) diff --git a/app-shell-odd/vite.config.ts b/app-shell-odd/vite.config.mts similarity index 100% rename from app-shell-odd/vite.config.ts rename to app-shell-odd/vite.config.mts diff --git a/app-shell/build/release-notes-internal.md b/app-shell/build/release-notes-internal.md index ce6e62da888..5316ca3ad71 100644 --- a/app-shell/build/release-notes-internal.md +++ b/app-shell/build/release-notes-internal.md @@ -1,6 +1,10 @@ For more details about this release, please see the full [technical changelog][]. [technical change log]: https://github.com/Opentrons/opentrons/releases +## Internal Release 2.2.0-alpha.0 + +This internal release, pulled from the `edge` branch, contains features being developed for 8.2.0. It's for internal testing only. + ## Internal Release 2.0.0-alpha.4 This internal release, pulled from the `edge` branch, contains features being developed for 8.0.0. It's for internal testing only. There are no changes to `buildroot`, `ot3-firmware`, or `oe-core` since the last internal release. diff --git a/app-shell/build/release-notes.md b/app-shell/build/release-notes.md index 5ab9009bebc..80b36253b85 100644 --- a/app-shell/build/release-notes.md +++ b/app-shell/build/release-notes.md @@ -27,8 +27,9 @@ Welcome to the v8.0.0 release of the Opentrons App! ### Known Issues -- Labware offsets can't be applied to protocols that require selecting a CSV file as a runtime parameter value. Write the protocol in such a way that it passes analysis with or without the CSV file, or run Labware Position Check after confirming parameter values. +- Stored labware offsets can't be applied to protocols that require selecting a CSV file as a runtime parameter value. Write the protocol in such a way that it passes analysis with or without the CSV file, or run Labware Position Check after confirming parameter values. - Error recovery can't perform partial tip pickup, because it doesn't account for the pipette nozzle configuration of 8- and 96-channel pipettes. If a recovery step requires partial tip pickup, cancel the protocol instead. +- Downloading robot logs via USB may take up to 2 minutes on macOS, and may fail entirely on Windows. Use an Ethernet or Wi-Fi connection to download logs if needed. --- diff --git a/app-shell/vite.config.ts b/app-shell/vite.config.mts similarity index 98% rename from app-shell/vite.config.ts rename to app-shell/vite.config.mts index 546fe19e23f..63862287fc1 100644 --- a/app-shell/vite.config.ts +++ b/app-shell/vite.config.mts @@ -34,7 +34,7 @@ export default defineConfig( esbuildOptions: { target: 'CommonJs', }, - exclude: ['node_modules'] + exclude: ['node_modules'], }, define: { 'process.env': process.env, diff --git a/app/src/App/DesktopApp.tsx b/app/src/App/DesktopApp.tsx index ee191db1f37..3c9dc3ae253 100644 --- a/app/src/App/DesktopApp.tsx +++ b/app/src/App/DesktopApp.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, Fragment } from 'react' import { Navigate, Route, Routes, useMatch } from 'react-router-dom' import { ErrorBoundary } from 'react-error-boundary' import { I18nextProvider } from 'react-i18next' @@ -13,8 +13,8 @@ import { ApiHostProvider } from '@opentrons/react-api-client' import NiceModal from '@ebay/nice-modal-react' import { i18n } from '/app/i18n' -import { Alerts } from '/app/organisms/Alerts' -import { Breadcrumbs } from '/app/organisms/Breadcrumbs' +import { Alerts } from '/app/organisms/Desktop/Alerts' +import { Breadcrumbs } from '/app/organisms/Desktop/Breadcrumbs' import { ToasterOven } from '/app/organisms/ToasterOven' import { CalibrationDashboard } from '/app/pages/Desktop/Devices/CalibrationDashboard' import { DeviceDetails } from '/app/pages/Desktop/Devices/DeviceDetails' @@ -46,12 +46,12 @@ export const DesktopApp = (): JSX.Element => { const [ isEmergencyStopModalDismissed, setIsEmergencyStopModalDismissed, - ] = React.useState(false) + ] = useState(false) const desktopRoutes: RouteProps[] = [ { Component: ProtocolsLanding, - name: 'Protocols', + name: 'protocols', navLinkTo: '/protocols', path: '/protocols', }, @@ -67,13 +67,13 @@ export const DesktopApp = (): JSX.Element => { }, { Component: Labware, - name: 'Labware', + name: 'labware', navLinkTo: '/labware', path: '/labware', }, { Component: DevicesLanding, - name: 'Devices', + name: 'devices', navLinkTo: '/devices', path: '/devices', }, @@ -124,7 +124,7 @@ export const DesktopApp = (): JSX.Element => { + { - + } path={path} /> diff --git a/app/src/App/DesktopAppFallback.tsx b/app/src/App/DesktopAppFallback.tsx index a1bb6528f45..1bf2645e8b1 100644 --- a/app/src/App/DesktopAppFallback.tsx +++ b/app/src/App/DesktopAppFallback.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useDispatch } from 'react-redux' import { useNavigate } from 'react-router-dom' import { useTranslation } from 'react-i18next' diff --git a/app/src/App/Navbar.tsx b/app/src/App/Navbar.tsx index ed960c93d08..db8a4acd005 100644 --- a/app/src/App/Navbar.tsx +++ b/app/src/App/Navbar.tsx @@ -1,4 +1,5 @@ import * as React from 'react' +import { useTranslation } from 'react-i18next' import { NavLink, useNavigate } from 'react-router-dom' import styled from 'styled-components' import debounce from 'lodash/debounce' @@ -110,6 +111,8 @@ const LogoImg = styled('img')` ` export function Navbar({ routes }: { routes: RouteProps[] }): JSX.Element { + const { t } = useTranslation('top_navigation') + const navigate = useNavigate() const navRoutes = routes.filter( ({ navLinkTo }: RouteProps) => navLinkTo != null @@ -148,7 +151,7 @@ export function Navbar({ routes }: { routes: RouteProps[] }): JSX.Element { as="h3" margin={`${SPACING.spacing8} 0 ${SPACING.spacing8} ${SPACING.spacing12}`} > - {name} + {t(name)} ))} diff --git a/app/src/App/ODDTopLevelRedirects/index.tsx b/app/src/App/ODDTopLevelRedirects/index.tsx index 2bda4c52f94..fa0692bd1c4 100644 --- a/app/src/App/ODDTopLevelRedirects/index.tsx +++ b/app/src/App/ODDTopLevelRedirects/index.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { Navigate, Route, Routes } from 'react-router-dom' import { useCurrentRunId } from '/app/resources/runs' diff --git a/app/src/App/OnDeviceDisplayApp.tsx b/app/src/App/OnDeviceDisplayApp.tsx index 812b05185a3..46fb91b21f4 100644 --- a/app/src/App/OnDeviceDisplayApp.tsx +++ b/app/src/App/OnDeviceDisplayApp.tsx @@ -1,6 +1,6 @@ -import * as React from 'react' +import { useEffect, useState, useCallback } from 'react' import { useDispatch, useSelector } from 'react-redux' -import { Navigate, Route, Routes } from 'react-router-dom' +import { Routes, Route, Navigate, useLocation } from 'react-router-dom' import { css } from 'styled-components' import { ErrorBoundary } from 'react-error-boundary' @@ -33,7 +33,7 @@ import { RobotDashboard } from '/app/pages/ODD/RobotDashboard' import { RobotSettingsDashboard } from '/app/pages/ODD/RobotSettingsDashboard' import { ProtocolDashboard } from '/app/pages/ODD/ProtocolDashboard' import { ProtocolDetails } from '/app/pages/ODD/ProtocolDetails' -import { QuickTransferFlow } from '/app/organisms/QuickTransferFlow' +import { QuickTransferFlow } from '/app/organisms/ODD/QuickTransferFlow' import { QuickTransferDashboard } from '/app/pages/ODD/QuickTransferDashboard' import { QuickTransferDetails } from '/app/pages/ODD/QuickTransferDetails' import { RunningProtocol } from '/app/pages/ODD/RunningProtocol' @@ -51,7 +51,7 @@ import { updateConfigValue, } from '/app/redux/config' import { updateBrightness } from '/app/redux/shell' -import { SLEEP_NEVER_MS } from './constants' +import { SLEEP_NEVER_MS } from '/app/local-resources/config' import { useProtocolReceiptToast, useSoftwareUpdatePoll } from './hooks' import { ODDTopLevelRedirects } from './ODDTopLevelRedirects' @@ -163,7 +163,7 @@ export const OnDeviceDisplayApp = (): JSX.Element => { const dispatch = useDispatch() const isIdle = useIdle(sleepTime, options) - React.useEffect(() => { + useEffect(() => { if (isIdle) { dispatch(updateBrightness(TURN_OFF_BACKLIGHT)) } else { @@ -220,11 +220,19 @@ const getTargetPath = (unfinishedUnboxingFlowRoute: string | null): string => { // split to a separate function because scrollRef rerenders on every route change // this avoids rerendering parent providers as well export function OnDeviceDisplayAppRoutes(): JSX.Element { - const [currentNode, setCurrentNode] = React.useState(null) - const scrollRef = React.useCallback((node: HTMLElement | null) => { + const [currentNode, setCurrentNode] = useState(null) + const scrollRef = useCallback((node: HTMLElement | null) => { setCurrentNode(node) }, []) const isScrolling = useScrolling(currentNode) + const location = useLocation() + useEffect(() => { + currentNode?.scrollTo({ + top: 0, + left: 0, + behavior: 'auto', + }) + }, [location.pathname]) const { unfinishedUnboxingFlowRoute } = useSelector( getOnDeviceDisplaySettings diff --git a/app/src/App/OnDeviceDisplayAppFallback.tsx b/app/src/App/OnDeviceDisplayAppFallback.tsx index 1e507463445..6077db2d4da 100644 --- a/app/src/App/OnDeviceDisplayAppFallback.tsx +++ b/app/src/App/OnDeviceDisplayAppFallback.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useEffect } from 'react' import { useDispatch, useSelector } from 'react-redux' import { useTranslation } from 'react-i18next' @@ -47,7 +47,7 @@ export function OnDeviceDisplayAppFallback({ } // immediately report to robot logs that something fatal happened - React.useEffect(() => { + useEffect(() => { dispatch(sendLog(`ODD app encountered a fatal error: ${error.message}`)) }, []) diff --git a/app/src/App/__mocks__/portal.tsx b/app/src/App/__mocks__/portal.tsx index 67fd57af2de..f80b1deb44e 100644 --- a/app/src/App/__mocks__/portal.tsx +++ b/app/src/App/__mocks__/portal.tsx @@ -1,5 +1,5 @@ // mock portal for enzyme tests -import * as React from 'react' +import type * as React from 'react' interface Props { children: React.ReactNode diff --git a/app/src/App/__tests__/App.test.tsx b/app/src/App/__tests__/App.test.tsx index cd7a08e1c2c..0f5faf53894 100644 --- a/app/src/App/__tests__/App.test.tsx +++ b/app/src/App/__tests__/App.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { vi, describe, beforeEach, afterEach, expect, it } from 'vitest' import { when } from 'vitest-when' import { screen } from '@testing-library/react' diff --git a/app/src/App/__tests__/DesktopApp.test.tsx b/app/src/App/__tests__/DesktopApp.test.tsx index e43cae4a097..cd769ec0a1b 100644 --- a/app/src/App/__tests__/DesktopApp.test.tsx +++ b/app/src/App/__tests__/DesktopApp.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { screen } from '@testing-library/react' import { when } from 'vitest-when' @@ -6,7 +5,7 @@ import { vi, describe, beforeEach, afterEach, expect, it } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' -import { Breadcrumbs } from '/app/organisms/Breadcrumbs' +import { Breadcrumbs } from '/app/organisms/Desktop/Breadcrumbs' import { CalibrationDashboard } from '/app/pages/Desktop/Devices/CalibrationDashboard' import { DeviceDetails } from '/app/pages/Desktop/Devices/DeviceDetails' import { DevicesLanding } from '/app/pages/Desktop/Devices/DevicesLanding' @@ -14,14 +13,14 @@ import { ProtocolsLanding } from '/app/pages/Desktop/Protocols/ProtocolsLanding' import { ProtocolRunDetails } from '/app/pages/Desktop/Devices/ProtocolRunDetails' import { RobotSettings } from '/app/pages/Desktop/Devices/RobotSettings' import { GeneralSettings } from '/app/pages/Desktop/AppSettings/GeneralSettings' -import { AlertsModal } from '/app/organisms/Alerts/AlertsModal' +import { AlertsModal } from '/app/organisms/Desktop/Alerts/AlertsModal' import { useFeatureFlag } from '/app/redux/config' import { useIsFlex } from '/app/redux-resources/robots' import { ProtocolTimeline } from '/app/pages/Desktop/Protocols/ProtocolDetails/ProtocolTimeline' import { useSoftwareUpdatePoll } from '../hooks' import { DesktopApp } from '../DesktopApp' -vi.mock('/app/organisms/Breadcrumbs') +vi.mock('/app/organisms/Desktop/Breadcrumbs') vi.mock('/app/pages/Desktop/AppSettings/GeneralSettings') vi.mock('/app/pages/Desktop/Devices/CalibrationDashboard') vi.mock('/app/pages/Desktop/Devices/DeviceDetails') @@ -29,7 +28,7 @@ vi.mock('/app/pages/Desktop/Devices/DevicesLanding') vi.mock('/app/pages/Desktop/Protocols/ProtocolsLanding') vi.mock('/app/pages/Desktop/Devices/ProtocolRunDetails') vi.mock('/app/pages/Desktop/Devices/RobotSettings') -vi.mock('/app/organisms/Alerts/AlertsModal') +vi.mock('/app/organisms/Desktop/Alerts/AlertsModal') vi.mock('/app/pages/Desktop/Protocols/ProtocolDetails/ProtocolTimeline') vi.mock('/app/redux/config') vi.mock('/app/redux-resources/robots') diff --git a/app/src/App/__tests__/Navbar.test.tsx b/app/src/App/__tests__/Navbar.test.tsx index db7eedc744b..508323c739c 100644 --- a/app/src/App/__tests__/Navbar.test.tsx +++ b/app/src/App/__tests__/Navbar.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { describe, it } from 'vitest' import { screen, render } from '@testing-library/react' import { MemoryRouter } from 'react-router-dom' diff --git a/app/src/App/__tests__/OnDeviceDisplayApp.test.tsx b/app/src/App/__tests__/OnDeviceDisplayApp.test.tsx index 5243db5310a..fae54eb2fed 100644 --- a/app/src/App/__tests__/OnDeviceDisplayApp.test.tsx +++ b/app/src/App/__tests__/OnDeviceDisplayApp.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { screen } from '@testing-library/react' import { vi, describe, beforeEach, afterEach, expect, it } from 'vitest' import { MemoryRouter } from 'react-router-dom' diff --git a/app/src/App/__tests__/OnDeviceDisplayAppFallback.test.tsx b/app/src/App/__tests__/OnDeviceDisplayAppFallback.test.tsx index d04a0f8df1c..864e714694a 100644 --- a/app/src/App/__tests__/OnDeviceDisplayAppFallback.test.tsx +++ b/app/src/App/__tests__/OnDeviceDisplayAppFallback.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { vi, describe, beforeEach, it, expect } from 'vitest' import { fireEvent, screen } from '@testing-library/react' import { renderWithProviders } from '/app/__testing-utils__' diff --git a/app/src/App/__tests__/hooks.test.tsx b/app/src/App/__tests__/hooks.test.tsx index 9ce1f5e9160..5b3f315049b 100644 --- a/app/src/App/__tests__/hooks.test.tsx +++ b/app/src/App/__tests__/hooks.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { vi, describe, beforeEach, afterEach, expect, it } from 'vitest' import { renderHook } from '@testing-library/react' import { createStore } from 'redux' diff --git a/app/src/App/constants.ts b/app/src/App/constants.ts index 73380a6da99..86dc3aa3128 100644 --- a/app/src/App/constants.ts +++ b/app/src/App/constants.ts @@ -1,6 +1,5 @@ // defines a constant for the nav bar width - used in run log component to calculate centering export const NAV_BAR_WIDTH = '5.625rem' -export const SLEEP_NEVER_MS = 604800000 // What is the maximum number of protocols one can pin? This many. export const MAXIMUM_PINNED_PROTOCOLS = 8 diff --git a/app/src/App/hooks.ts b/app/src/App/hooks.ts index dd28b35e964..d01082d8dc1 100644 --- a/app/src/App/hooks.ts +++ b/app/src/App/hooks.ts @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useCallback, useRef, useEffect } from 'react' import difference from 'lodash/difference' import { useTranslation } from 'react-i18next' import { useQueryClient } from 'react-query' @@ -23,7 +23,7 @@ const PROTOCOL_IDS_RECHECK_INTERVAL_MS = 3000 export function useSoftwareUpdatePoll(): void { const dispatch = useDispatch() - const checkAppUpdate = React.useCallback(() => dispatch(checkShellUpdate()), [ + const checkAppUpdate = useCallback(() => dispatch(checkShellUpdate()), [ dispatch, ]) useInterval(checkAppUpdate, UPDATE_RECHECK_INTERVAL_MS) @@ -41,8 +41,8 @@ export function useProtocolReceiptToast(): void { true ) const protocolIds = protocolIdsQuery.data?.data ?? [] - const protocolIdsRef = React.useRef(protocolIds) - const hasRefetched = React.useRef(true) + const protocolIdsRef = useRef(protocolIds) + const hasRefetched = useRef(true) const { createLiveCommand } = useCreateLiveCommandMutation() const animationCommand: SetStatusBarCreateCommand = { commandType: 'setStatusBar', @@ -53,7 +53,7 @@ export function useProtocolReceiptToast(): void { hasRefetched.current = false } - React.useEffect(() => { + useEffect(() => { const newProtocolIds = difference(protocolIds, protocolIdsRef.current) if (!hasRefetched.current && newProtocolIds.length > 0) { Promise.all( diff --git a/app/src/App/index.tsx b/app/src/App/index.tsx index 2e94c63d6f7..f0ba1de0304 100644 --- a/app/src/App/index.tsx +++ b/app/src/App/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useSelector } from 'react-redux' import { Flex, POSITION_FIXED, DIRECTION_ROW } from '@opentrons/components' diff --git a/app/src/App/portal.tsx b/app/src/App/portal.tsx index 346d5842d81..d9e17199f56 100644 --- a/app/src/App/portal.tsx +++ b/app/src/App/portal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { Box } from '@opentrons/components' export const TOP_PORTAL_ID = '__otAppTopPortalRoot' diff --git a/app/src/DesignTokens/BorderRadius/BorderRadius.stories.tsx b/app/src/DesignTokens/BorderRadius/BorderRadius.stories.tsx index 677e26b0c77..29e655c3a11 100644 --- a/app/src/DesignTokens/BorderRadius/BorderRadius.stories.tsx +++ b/app/src/DesignTokens/BorderRadius/BorderRadius.stories.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { ALIGN_FLEX_START, BORDERS, diff --git a/app/src/DesignTokens/Colors/Colors.stories.tsx b/app/src/DesignTokens/Colors/Colors.stories.tsx index 60bbdff3945..98601ccac19 100644 --- a/app/src/DesignTokens/Colors/Colors.stories.tsx +++ b/app/src/DesignTokens/Colors/Colors.stories.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { ALIGN_FLEX_START, BORDERS, diff --git a/app/src/DesignTokens/Spacing/Spacing.stories.tsx b/app/src/DesignTokens/Spacing/Spacing.stories.tsx index 5a0d0d4da81..3b12ae833db 100644 --- a/app/src/DesignTokens/Spacing/Spacing.stories.tsx +++ b/app/src/DesignTokens/Spacing/Spacing.stories.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { ALIGN_FLEX_START, Box, diff --git a/app/src/DesignTokens/Typography/Typography.stories.tsx b/app/src/DesignTokens/Typography/Typography.stories.tsx index ac95fa3a369..787d558bf52 100644 --- a/app/src/DesignTokens/Typography/Typography.stories.tsx +++ b/app/src/DesignTokens/Typography/Typography.stories.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { css } from 'styled-components' import type { FlattenSimpleInterpolation } from 'styled-components' import { diff --git a/app/src/LocalizationProvider.tsx b/app/src/LocalizationProvider.tsx index 7fbb30d4774..1cd676d2095 100644 --- a/app/src/LocalizationProvider.tsx +++ b/app/src/LocalizationProvider.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { I18nextProvider } from 'react-i18next' import reduce from 'lodash/reduce' diff --git a/app/src/__testing-utils__/renderWithProviders.tsx b/app/src/__testing-utils__/renderWithProviders.tsx index 65a2e01855e..11e3ba16d9b 100644 --- a/app/src/__testing-utils__/renderWithProviders.tsx +++ b/app/src/__testing-utils__/renderWithProviders.tsx @@ -1,6 +1,6 @@ // render using targetted component using @testing-library/react // with wrapping providers for i18next and redux -import * as React from 'react' +import type * as React from 'react' import { QueryClient, QueryClientProvider } from 'react-query' import { I18nextProvider } from 'react-i18next' import { Provider } from 'react-redux' diff --git a/app/src/assets/localization/en/app_settings.json b/app/src/assets/localization/en/app_settings.json index adbc00d3181..933fde16eea 100644 --- a/app/src/assets/localization/en/app_settings.json +++ b/app/src/assets/localization/en/app_settings.json @@ -4,6 +4,7 @@ "__dev_internal__protocolTimeline": "Protocol Timeline", "__dev_internal__enableRunNotes": "Display Notes During a Protocol Run", "__dev_internal__enableLabwareCreator": "Enable App Labware Creator", + "__dev_internal__enableLocalization": "Enable App Localization", "add_folder_button": "Add labware source folder", "add_ip_button": "Add", "add_ip_error": "Enter an IP Address or Hostname", diff --git a/app/src/assets/localization/en/drop_tip_wizard.json b/app/src/assets/localization/en/drop_tip_wizard.json index d683b3bdabf..a03827ae2af 100644 --- a/app/src/assets/localization/en/drop_tip_wizard.json +++ b/app/src/assets/localization/en/drop_tip_wizard.json @@ -5,6 +5,7 @@ "blowout_liquid": "Blow out liquid", "cant_safely_drop_tips": "Can't safely drop tips", "choose_blowout_location": "Choose blowout location", + "choose_deck_location": "Choose deck location", "choose_drop_tip_location": "Choose tip-drop location", "confirm_blowout_location": "Is the pipette positioned where the liquids should be blown out?", "confirm_drop_tip_location": "Is the pipette positioned where the tips should be dropped?", @@ -41,5 +42,9 @@ "stand_back_dropping_tips": "Stand back, robot is dropping tips", "stand_back_robot_in_motion": "Stand back, robot is in motion", "start_over": "Start over", + "trash_bin_in_slot": "Trash bin in {{slot}}", + "waste_chute_in_slot": "Waste chute in {{slot}}", + "where_to_blowout": "Where do you want to blow out the aspirated liquid?", + "where_to_drop_tips": "Where do you want to drop the attached tips?", "yes_blow_out_liquid": "Yes, blow out liquid in labware" } diff --git a/app/src/assets/localization/en/error_recovery.json b/app/src/assets/localization/en/error_recovery.json index 605c2b55527..dde0d183387 100644 --- a/app/src/assets/localization/en/error_recovery.json +++ b/app/src/assets/localization/en/error_recovery.json @@ -11,32 +11,45 @@ "change_location": "Change location", "change_tip_pickup_location": "Change tip pick-up location", "choose_a_recovery_action": "Choose a recovery action", + "close_door_to_resume": "Close robot door to resume", "close_the_robot_door": "Close the robot door, and then resume the recovery action.", "confirm": "Confirm", "continue": "Continue", "continue_run_now": "Continue run now", "continue_to_drop_tip": "Continue to drop tip", + "ensure_lw_is_accurately_placed": "Ensure labware is accurately placed in the slot to prevent further errors", "error": "Error", "error_details": "Error details", "error_on_robot": "Error on {{robot}}", "failed_dispense_step_not_completed": "The failed dispense step will not be completed. The run will continue from the next step with the attached tips.Close the robot door before proceeding.", "failed_step": "Failed step", - "first_take_any_necessary_actions": "First, take any necessary actions to prepare the robot to retry the failed step.Then, close the robot door before proceeding.", + "first_is_gripper_holding_labware": "First, is the gripper holding labware?", "go_back": "Go back", + "gripper_error": "Gripper error", + "gripper_errors_occur_when": "Gripper errors occur when the gripper stalls or collides with another object on the deck and are usually caused by improperly placed labware or inaccurate labware offsets", + "gripper_releasing_labware": "Gripper releasing labware", + "gripper_will_release_in_s": "Gripper will release labware in {{seconds}} seconds", "homing_pipette_dangerous": "Homing the {{mount}} pipette with liquid in the tips may damage it. You must remove all tips before using the pipette again.", + "if_issue_persists_gripper_error": " If the issue persists, cancel the run and rerun gripper calibration", + "if_issue_persists_overpressure": " If the issue persists, cancel the run and make the necessary changes to the protocol", + "if_issue_persists_tip_not_detected": " If the issue persists, cancel the run and initiate Labware Position Check", "if_tips_are_attached": "If tips are attached, you can choose to blow out any aspirated liquid and drop tips before the run is terminated.", "ignore_all_errors_of_this_type": "Ignore all errors of this type", "ignore_error_and_skip": "Ignore error and skip to next step", "ignore_only_this_error": "Ignore only this error", "ignore_similar_errors_later_in_run": "Ignore similar errors later in the run?", + "labware_released_from_current_height": "The labware will be released from its current height", "launch_recovery_mode": "Launch Recovery Mode", "manually_fill_liquid_in_well": "Manually fill liquid in well {{well}}", "manually_fill_well_and_skip": "Manually fill well and skip to next step", + "manually_move_lw_and_skip": "Manually move labware and skip to next step", + "manually_move_lw_on_deck": "Manually move labware on deck", + "manually_replace_lw_and_retry": "Manually replace labware on deck and retry step", + "manually_replace_lw_on_deck": "Manually replace labware on deck", "next_step": "Next step", "next_try_another_action": "Next, you can try another recovery action or cancel the run.", "no_liquid_detected": "No liquid detected", "overpressure_is_usually_caused": "Overpressure is usually caused by a tip contacting labware, a clog, or moving viscous liquid too quickly", - "if_issue_persists": " If the issue persists, cancel the run and make the necessary changes to the protocol", "pick_up_tips": "Pick up tips", "pipette_overpressure": "Pipette overpressure", "preserve_aspirated_liquid": "First, do you need to preserve aspirated liquid?", @@ -45,6 +58,8 @@ "recovery_action_failed": "{{action}} failed", "recovery_mode": "Recovery Mode", "recovery_mode_explanation": "Recovery Mode provides you with guided and manual controls for handling errors at runtime.
You can make changes to ensure the step in progress when the error occurred can be completed or choose to cancel the protocol. When changes are made and no subsequent errors are detected, the method completes. Depending on the conditions that caused the error, you will only be provided with appropriate options.", + "release": "Release", + "release_labware_from_gripper": "Release labware from gripper", "remove_any_attached_tips": "Remove any attached tips", "replace_tips_and_select_location": "It's best to replace tips and select the last location used for tip pickup.", "replace_used_tips_in_rack_location": "Replace used tips in rack location {{location}} in slot {{slot}}", @@ -59,6 +74,8 @@ "robot_door_is_open": "Robot door is open", "robot_is_canceling_run": "Robot is canceling the run", "robot_is_in_recovery_mode": "Robot is in recovery mode", + "robot_not_attempt_to_move_lw": "The robot will not attempt to move the labware again. The run will continue from the next step.Close the robot door before proceeding.", + "robot_retry_failed_lw_movement": "The robot will retry the failed labware movement step from where the labware was replaced on the deck.Close the robot door before proceeding.", "robot_will_not_check_for_liquid": "The robot will not check for liquid again. The run will continue from the next step.Close the robot door before proceeding.", "robot_will_retry_with_new_tips": "The robot will retry the failed step with the new tips.Close the robot door before proceeding.", "robot_will_retry_with_same_tips": "The robot will retry the failed step with the same tips.Close the robot door before proceeding.", @@ -75,9 +92,13 @@ "stand_back_resuming": "Stand back, resuming current step", "stand_back_retrying": "Stand back, retrying failed step", "stand_back_skipping_to_next_step": "Stand back, skipping to next step", + "take_any_necessary_precautions": "Take any necessary precautions before positioning yourself to stabilize or catch the labware. Once confirmed, a countdown will begin before the gripper releases.", + "take_necessary_actions": "First, take any necessary actions to prepare the robot to retry the failed step.Then, close the robot door before proceeding.", + "take_necessary_actions_failed_pickup": "First, take any necessary actions to prepare the robot to retry the failed tip pickup.Then, close the robot door before proceeding.", "terminate_remote_activity": "Terminate remote activity", "tip_drop_failed": "Tip drop failed", "tip_not_detected": "Tip not detected", + "tip_presence_errors_are_caused": "Tip presence errors are usually caused by improperly placed labware or inaccurate labware offsets", "view_error_details": "View error details", "view_recovery_options": "View recovery options", "you_can_still_drop_tips": "You can still drop the attached tips before proceeding to tip selection." diff --git a/app/src/assets/localization/en/protocol_command_text.json b/app/src/assets/localization/en/protocol_command_text.json index 379a047cda8..c78aef13785 100644 --- a/app/src/assets/localization/en/protocol_command_text.json +++ b/app/src/assets/localization/en/protocol_command_text.json @@ -8,7 +8,7 @@ "closing_tc_lid": "Closing Thermocycler lid", "comment": "Comment", "configure_for_volume": "Configure {{pipette}} to aspirate {{volume}} µL", - "configure_nozzle_layout": "Configure {{pipette}} to use {{amount}} nozzles", + "configure_nozzle_layout": "Configure {{pipette}} to use {{layout}}", "confirm_and_resume": "Confirm and resume", "deactivate_hs_shake": "Deactivating shaker", "deactivate_temperature_module": "Deactivating Temperature Module", @@ -71,8 +71,10 @@ "slot": "Slot {{slot_name}}", "target_temperature": "target temperature", "tc_awaiting_for_duration": "Waiting for Thermocycler profile to complete", - "tc_run_profile_steps": "temperature: {{celsius}}°C, seconds: {{seconds}}", - "tc_starting_profile": "Thermocycler starting {{repetitions}} repetitions of cycle composed of the following steps:", + "tc_run_profile_steps": "Temperature: {{celsius}}°C, hold time: {{duration}}", + "tc_starting_extended_profile_cycle": "{{repetitions}} repetitions of the following steps:", + "tc_starting_extended_profile": "Running thermocycler profile with {{elementCount}} total steps and cycles:", + "tc_starting_profile": "Running thermocycler profile with {{stepCount}} steps:", "touch_tip": "Touching tip", "trash_bin_in_slot": "Trash Bin in {{slot_name}}", "unlatching_hs_latch": "Unlatching labware on Heater-Shaker", diff --git a/app/src/assets/localization/en/quick_transfer.json b/app/src/assets/localization/en/quick_transfer.json index 0cb31912964..32efac281bc 100644 --- a/app/src/assets/localization/en/quick_transfer.json +++ b/app/src/assets/localization/en/quick_transfer.json @@ -96,7 +96,7 @@ "pipette_path": "Pipette path", "pipette_path_multi_aspirate": "Multi-aspirate", "pipette_path_multi_dispense": "Multi-dispense", - "pipette_path_multi_dispense_volume_blowout": "Multi-dispense, {{volume}} disposal volume, blowout {{blowOutLocation}}", + "pipette_path_multi_dispense_volume_blowout": "Multi-dispense, {{volume}} µL disposal volume, blowout {{blowOutLocation}}", "pipette_path_single": "Single transfers", "pre_wet_tip": "Pre-wet tip", "quick_transfer": "Quick transfer", diff --git a/app/src/assets/localization/en/run_details.json b/app/src/assets/localization/en/run_details.json index f8ce9a7590e..e9f39f81d06 100644 --- a/app/src/assets/localization/en/run_details.json +++ b/app/src/assets/localization/en/run_details.json @@ -18,7 +18,8 @@ "clear_protocol": "Clear protocol", "clear_protocol_to_make_available": "Clear protocol from robot to make it available.", "close_door": "Close robot door", - "close_door_to_resume": "Close robot door to resume run", + "close_door_to_resume": "Close robot door to resume", + "close_door_to_resume_run": "Close robot door to resume run", "closing_protocol": "Closing Protocol", "comment": "Comment", "comment_step": "Comment", diff --git a/app/src/assets/localization/index.ts b/app/src/assets/localization/index.ts index e92a7077ed9..2b16ff8c61b 100644 --- a/app/src/assets/localization/index.ts +++ b/app/src/assets/localization/index.ts @@ -1,5 +1,7 @@ import { en } from './en' +import { zh } from './zh' export const resources = { en, + zh, } diff --git a/app/src/assets/localization/zh/anonymous.json b/app/src/assets/localization/zh/anonymous.json new file mode 100644 index 00000000000..696dff65751 --- /dev/null +++ b/app/src/assets/localization/zh/anonymous.json @@ -0,0 +1,74 @@ +{ + "a_robot_software_update_is_available": "需要更新工作站软件版本才能使用该版本的桌面应用程序运行协议。转到工作站这个金属块是一个特制的工具,完美适配您的甲板,有助于校准。如果您没有校准块,请发送电子邮件给支持团队,以便我们寄送一个给您。在您提供的信息中,请确保包括您的姓名、公司或机构名称和寄送地址。在等待校准块到达过程中,您可以暂时利用工作站里垃圾桶上的平面进行校准。", + "calibration_on_opentrons_tips_is_important": "使用上述吸头和吸头盒进行校准非常重要,因为工作站的准确性是基于这些吸头的已知尺寸来确定的。", + "choose_what_data_to_share": "选择要共享的工作站数据。", + "computer_in_app_is_controlling_robot": "当前正在由一台已联网的计算机控制此工作站。", + "confirm_terminate": "这将立即停止计算机上进行的活动。您或其他用户可能会丢失进度或在该计算机上出现报错提示。", + "connect_and_screw_in_gripper": "连接并固定转板抓手", + "connect_via_usb_description_3": "3. 在连接的计算机上启动工作站应用程序以继续。", + "connection_description_usb": "直接连接到计算机。", + "connection_lost_description": "应用程序现在无法与此工作站通信。请检查与工作站的USB或Wi-Fi连接,然后尝试重新连接。", + "contact_information": "请与支持人员联系以获得帮助。", + "contact_support_for_connection_help": "如果以上方法都无法解决问题,请联系支持人员寻求帮助(通过此应用程序中的问号链接,或发送电子邮件至{{support_email}}。)", + "deck_fixture_setup_modal_bottom_description": "有关安装不同类型固定装置的详细信息,请与支持人员联系。", + "delete_protocol_from_app": "删除协议,针对错误进行修改,然后从桌面应用程序将协议重新发送到此工作站。", + "error_boundary_description": "您需要重新启动触摸屏。联系支持人员以获取帮助。", + "estop_pressed_description": "首先,安全清理甲板上的任何实验耗材和洒出的液体。然后,顺时针旋转急停开关。最后,让工作站将龙门架移动到其原位。", + "find_your_robot": "在应用程序的“设备”栏找到您的工作站,以安装软件更新。", + "firmware_update_download_logs": "请与支持人员联系以获得帮助。", + "general_error_message": "如果该消息反复出现,请尝试重新启动您的应用程序和工作站。如果这不能解决问题,请与支持人员联系。", + "gripper_still_attached": "转板抓手仍处于连接状态", + "gripper_successfully_attached_and_calibrated": "转板抓手已成功连接并校准", + "gripper_successfully_calibrated": "转板抓手已成功校准", + "gripper_successfully_detached": "转板抓手已成功卸下", + "gripper": "转板抓手", + "help_us_improve_send_error_report": "通过向支持团队发送错误报告,帮助我们改进您的使用体验", + "ip_description_second": "请联系网络管理员,为工作站分配静态IP地址。", + "learn_uninstalling": "了解更多有关卸载应用程序的信息", + "loosen_screws_and_detach": "松开螺丝并卸下转板抓手", + "modal_instructions": "有关设置模块的分步说明,请参阅随包装附带的快速指引。", + "module_calibration_failed": "模块校准失败。请确保校准适配器正确放置在模块上,然后重试。如果仍然有问题,请与支持人员联系。{{error}}", + "module_calibration_get_started": "开始前,请从工作台上移除实验耗材并清理工作区,以便于校准。还需准备好右侧显示的所需设备。校准适配器随模块一起提供。移液器探头随移液器一起提供。", + "module_error_contact_support": "尝试关闭模块电源,然后再打开。如果报错仍然存在,请与支持人员联系。", + "network_setup_menu_description": "您将使用此连接来运行软件更新,并将协议加载到您的工作站上。", + "oem_mode_description": "启用OEM模式,以从Flex触摸屏中移除Opentrons的相关信息。", + "opentrons_app_successfully_updated": "应用程序已成功更新。", + "opentrons_app_update": "应用程序更新", + "opentrons_app_update_available": "应用程序可更新", + "opentrons_app_update_available_variation": "有可用的应用程序更新。", + "opentrons_app_will_use_interpreter": "在指定路径后,应用程序将使用此路径的Python解释器,而不是默认绑定的Python解释器。", + "opentrons_cares_about_privacy": "我们注重您的隐私。我们匿名化所有数据,仅用于改进我们的产品。", + "opentrons_def": "已验证的数据", + "opentrons_labware_def": "已验证的实验耗材数据", + "opentrons_tip_racks_recommended": "建议使用Opentrons吸头盒。其他吸头盒无法保证精度。", + "opentrons_tip_rack_name": "opentrons", + "previous_releases": "查看以前的版本", + "receive_alert": "当软件更新可用时接收提醒。", + "restore_description": "不建议恢复到过往的软件版本,但您可以访问下方的过往版本。为了获得最佳效果,请在安装过往版本之前卸载现有应用程序并删除其配置文件。", + "robot_server_version_ot3_description": "工作站软件包括工作站服务器和触摸屏显示界面。", + "robot_software_update_required": "需要对工作站软件进行更新才能运行此版本应用程序的协议。", + "run_failed_modal_description_desktop": "请与支持人员联系以获得帮助。", + "secure_labware_explanation_magnetic_module": "通过调整模块顶部的黑色固定支架,确保您的实验耗材固定在磁性模块上。 您的模块提供了两种尺寸的板固定支架:标准和深孔。这些固定支架可以通过拧开模块的拇指螺钉(前面的银色旋钮)来移除和更换。", + "secure_labware_explanation_thermocycler": "通过关闭热循环仪模块的闩锁将您的实验耗材固定在其上。这样可以确保水平以及板位置的准确,从而获得最佳结果。", + "send_a_protocol_to_store": "向工作站发送协议以开始。", + "setup_instructions_description": "有关设置模块的分步说明,请参阅随包装附带的快速指引。", + "share_app_analytics": "共享应用程序分析数据", + "share_app_analytics_description": "通过自动发送匿名诊断和使用数据来帮助改进此产品。", + "share_display_usage_description": "关于工作站触摸屏的交互数据。", + "share_logs_with_opentrons": "共享工作站日志", + "share_logs_with_opentrons_description": "通过自动发送匿名的工作站日志来帮助改进此产品。这些日志用于解决工作站问题和发现错误趋势。", + "show_labware_offset_snippets_description": "仅适用于需要在应用程序之外应用耗材校准数据的用户。启用后,在设置协议过程中可访问Jupyter Notebook和SSH的代码片段。", + "something_seems_wrong": "您的移液器可能有问题。退出设置并联系支持人员以获取帮助。", + "these_are_advanced_settings": "这些是高级设置。请勿在没有支持团队帮助的情况下尝试调整这些设置。更改这些设置可能会影响您的移液器寿命。这些设置不会覆盖协议中定义的任何移液器设置。", + "update_requires_restarting_app": "更新需要重新启动应用程序。", + "update_robot_software_description": "绕过自动更新过程并手动更新工作站软件", + "update_robot_software_link": "启动软件更新页面", + "versions_sync": "了解更多有关保持应用程序和工作站软件同步的信息", + "view_latest_release_notes_at": "请联系支持人员以获取发布说明。", + "want_to_help_out": "想要帮助吗?", + "welcome_title": "欢迎!", + "why_use_lpc": "耗材位置校准旨在纠正微小的偏差,请不要使用该校准方式来进行较大的位置补偿调整。如果需要进行较大调整的耗材数据校准可能表明工作站的校准存在问题。" +} diff --git a/app/src/assets/localization/zh/app_settings.json b/app/src/assets/localization/zh/app_settings.json new file mode 100644 index 00000000000..9e4a9f1bbc7 --- /dev/null +++ b/app/src/assets/localization/zh/app_settings.json @@ -0,0 +1,103 @@ +{ + "__dev_internal__forceHttpPolling": "强制轮询所有网络请求,而不是使用MQTT", + "__dev_internal__protocolStats": "协议统计", + "__dev_internal__enableRunNotes": "在协议运行期间显示备注", + "__dev_internal__enableQuickTransfer": "启用快速移液", + "__dev_internal__enableLabwareCreator": "Enable App Labware Creator", + "__dev_internal__enableLocalization": "Enable App Localization", + "add_folder_button": "添加实验耗材源文件夹", + "add_ip_button": "添加", + "add_ip_error": "输入IP地址或主机名", + "add_ip_hostname": "添加IP地址或主机名", + "add_override_path": "添加覆盖路径", + "additional_folder_description": "如果要指定一个文件夹来手动管理自定义实验耗材文件,可以在此处添加目录。", + "additional_folder_location": "附加源文件夹", + "additional_labware_folder_title": "其他定制实验耗材源文件夹", + "advanced": "高级", + "app_changes": "应用程序更改于", + "app_settings": "应用设置", + "bug_fixes": "错误修复", + "cal_block": "始终使用校准块进行校准", + "change_folder_button": "更改实验耗材源文件夹", + "channel": "通道", + "clear_confirm": "清除不可用的工作站", + "clear_robots_button": "清除不可用工作站列表", + "clear_robots_description": "清除设备页面上不可用工作站的列表。此操作无法撤消。", + "clear_unavail_robots": "清除不可用工作站", + "clear_unavailable_robots": "清除不可用的工作站?", + "clearing_cannot_be_undone": "在设备页面清除不可用工作站列表的操作无法撤销。", + "close": "关闭", + "connect_ip": "通过IP地址连接到工作站", + "connect_ip_button": "完成", + "connect_ip_link": "了解更多关于手动连接工作站的信息", + "discovery_timeout": "发现超时。", + "download_update": "正在下载更新...", + "enable_dev_tools": "开发者工具", + "enable_dev_tools_description": "启用此设置将在应用启动时打开开发者工具,打开额外的日志记录并访问功能标志。", + "error_boundary_desktop_app_description": "您需要重新加载应用程序。出现以下错误信息,请联系技术支持:", + "error_boundary_title": "发生未知错误", + "feature_flags": "功能标志", + "general": "通用", + "heater_shaker_attach_description": "在进行测试振荡功能或在协议中使用热震荡模块功能之前,显示正确连接热震荡模块的提醒。", + "heater_shaker_attach_visible": "确认热震荡模块连接", + "how_to_restore": "如何恢复过往的软件版本", + "installing_update": "正在安装更新...", + "ip_available": "可用", + "ip_description_first": "输入IP地址或主机名以连接到工作站。", + "manage_versions": "工作站版本和应用程序软件版本必须一致。通过工作站设置 > 高级查看工作站软件版本。", + "new_features": "新功能", + "no_folder": "未指定其他源文件夹", + "no_specified_folder": "未指定路径", + "no_unavail_robots_to_clear": "无待清除的不可用工作站", + "not_found": "未找到", + "opt_in": "加入", + "opt_in_description": "自动向我们发送匿名诊断和使用数据。我们仅将这些信息用于改进我们的产品。", + "opt_out": "退出", + "ot2_advanced_settings": "OT-2高级设置", + "override_path": "覆盖路径", + "override_path_to_python": "覆盖Python路径", + "prevent_robot_caching": "阻止工作站进行缓存", + "prevent_robot_caching_description": "启用此功能后,应用程序将立即清除不可用的工作站,并且不会记住它们。在网络上有许多工作站的情况下,防止缓存可能会提高网络性能,但代价是在应用程序启动时工作站发现的速度变慢且可靠性降低。", + "privacy": "隐私", + "problem_during_update": "此次更新耗时较长。", + "prompt": "始终显示选择校准块或垃圾桶的提示", + "release_notes": "发行说明", + "reload_app": "重新加载应用程序", + "remind_later": "稍后提醒我", + "reset_to_default": "恢复默认设置", + "restart_touchscreen": "重启触摸屏", + "restarting_app": "下载完成,正在重启应用程序...", + "restore_previous": "查看如何恢复过往软件版本", + "searching": "正在搜索30秒", + "setup_connection": "设置连接", + "share_display_usage": "分享屏幕使用情况", + "share_robot_logs": "分享工作站日志", + "share_robot_logs_description": "工作站执行的操作数据,如运行协议。", + "show_labware_offset_snippets": "显示实验耗材校准数据代码片段", + "software_update_available": "有可用的软件更新", + "software_version": "应用程序软件版本", + "successfully_deleted_unavail_robots": "成功删除不可用的工作站", + "tip_length_cal_method": "吸头长度校准方法", + "trash_bin": "始终使用垃圾桶进行校准", + "try_restarting_the_update": "尝试重新启动更新。", + "turn_off_updates": "在应用程序设置中关闭软件更新通知。", + "up_to_date": "最新", + "update_alerts": "软件更新提醒", + "update_app_now": "立即更新应用程序", + "update_available": "更新可用", + "update_channel": "更新通道", + "update_description": "稳定版将接收最新的稳定版本。测试版将允许您在稳定版发布之前尝试正在开发的新功能,但这些功能尚未完成测试。", + "usb_to_ethernet_adapter_description": "描述", + "usb_to_ethernet_adapter_driver_version": "驱动程序版本", + "usb_to_ethernet_adapter_info": "USB-to-Ethernet适配器信息", + "usb_to_ethernet_adapter_info_description": "OT-2内置了一些USB-to-Ethernet适配器。如果您使用的OT-2有这个适配器,当您建立有线连接时,它将添加到您的计算机设备列表中。如果您使用的是 Realtek 适配器,驱动程序必须是最新的。", + "usb_to_ethernet_adapter_link": "前往Realtek.com", + "usb_to_ethernet_adapter_manufacturer": "制造商", + "usb_to_ethernet_adapter_no_driver_version": "未知", + "usb_to_ethernet_adapter_toast_message": "Realtek USB-to-Ethernet适配器驱动程序有更新", + "usb_to_ethernet_not_connected": "没有连接USB-to-Ethernet适配器", + "usb_to_ethernet_unknown_manufacturer": "未知制造商", + "usb_to_ethernet_unknown_product": "未知适配器", + "view_software_update": "查看软件更新", + "view_update": "查看更新" +} diff --git a/app/src/assets/localization/zh/branded.json b/app/src/assets/localization/zh/branded.json new file mode 100644 index 00000000000..4bff5f976d4 --- /dev/null +++ b/app/src/assets/localization/zh/branded.json @@ -0,0 +1,74 @@ +{ + "a_robot_software_update_is_available": "需要更新工作站软件才能使用此版本的Opentrons应用程序运行协议。转到工作站", + "about_flex_gripper": "关于Flex转板抓手", + "alternative_security_types_description": "Opentrons应用程序支持将Flex连接到各种企业接入点。通过USB连接并在应用程序中完成设置。", + "calibration_block_description": "这个金属块是一个特制的工具,完美适配您的甲板,有助于校准。如果您没有校准块,请发送电子邮件至support@opentrons.com,以便我们寄送一个给您。在您提供的信息中,请确保包括您的姓名、公司或机构名称和寄送地址。在等待校准块到达过程中,您可以暂时利用工作站里垃圾桶上的平面进行校准。", + "calibration_on_opentrons_tips_is_important": "使用上述Opentrons吸头和吸头盒进行校准非常重要,因为工作站的准确性是基于这些吸头的已知尺寸来确定的。", + "choose_what_data_to_share": "选择要与Opentrons共享的数据。", + "computer_in_app_is_controlling_robot": "计算机当前正在通过Opentrons应用程序控制此工作站。", + "confirm_terminate": "这将立即停止计算机上开始的活动。您或其他用户可能会丢失进度或在Opentrons应用程序中看到报错", + "connect_and_screw_in_gripper": "连接并固定Flex转板抓手", + "connect_via_usb_description_3": "3. 在计算机上启动Opentrons应用程序以继续。", + "connection_description_usb": "直接连接到计算机(运行Opentrons应用程序)。", + "connection_lost_description": "Opentrons应用程序现在无法与此工作站通信。请仔细检查与工作站的USB或Wi-Fi连接,然后尝试重新连接。", + "contact_information": "从Opentrons应用程序下载工作站日志,并将其发送到support@opentrons.com寻求帮助。", + "contact_support_for_connection_help": "如果以上方法都无法解决问题,请联系Opentrons支持人员寻求帮助(通过此应用程序中的问号链接,或发送电子邮件至{{support_email}}。)", + "deck_fixture_setup_modal_bottom_description": "有关安装不同类型固定装置的详细信息,请扫描二维码或在support.opentrons.com上搜索“deck configuration”", + "delete_protocol_from_app": "删除协议,针对错误进行修改,然后从Opentrons应用程序将协议重新发送到此工作站。", + "error_boundary_description": "您需要重新启动触摸屏。然后从Opentrons应用程序下载工作站日志并将其发送到support@opentrons.com寻求帮助。", + "estop_pressed_description": "首先,安全清理甲板上的任何实验耗材或洒出液体。然后,顺时针旋转急停开关。最后,让Flex将龙门架移动到其原位。", + "find_your_robot": "在Opentrons应用程序中找到您的工作站以安装软件更新。", + "firmware_update_download_logs": "从Opentrons应用程序下载工作站日志并将其发送到support@opentrons.com寻求帮助。", + "general_error_message": "如果您一直收到此消息,请尝试重新启动您的应用程序和工作站。如果这不能解决问题,请与Opentrons支持人员联系。", + "gripper_still_attached": "Flex转板抓手仍处于连接状态", + "gripper_successfully_attached_and_calibrated": "Flex转板抓手已成功连接并校准", + "gripper_successfully_calibrated": "Flex转板抓手已成功校准", + "gripper_successfully_detached": "Flex转板抓手已成功卸下", + "gripper": "Flex转板抓手", + "help_us_improve_send_error_report": "通过向{{support_email}}发送错误报告,帮助我们改进您的使用体验", + "ip_description_second": "Opentrons建议您联系网络管理员,为工作站分配静态IP地址。", + "learn_uninstalling": "了解更多有关卸载Opentrons应用程序的信息", + "loosen_screws_and_detach": "松开螺丝并卸下Flex转板抓手", + "modal_instructions": "有关设置模块的分步说明,请参阅随包装附带的快速指引。您也可以单击下面的链接或扫描二维码访问Opentrons帮助中心的模块部分。", + "module_calibration_failed": "模块校准失败。请确保校准适配器正确放置在模块上,然后重试。如果仍然有问题,请与Opentrons支持人员联系。{{error}}", + "module_calibration_get_started": "开始前,请从工作台上移除实验耗材并清理工作区,以便于校准。还需准备好右侧显示的所需设备。校准适配器随模块一起提供。移液器探头随Flex移液器一起提供。", + "module_error_contact_support": "尝试关闭模块电源,然后再打开。如果报错仍然存在,请与Opentrons支持人员联系。", + "network_setup_menu_description": "您将使用此连接来运行软件更新,并将协议加载到您的Opentrons Flex上。", + "oem_mode_description": "启用OEM模式,以从Flex触摸屏中移除Opentrons的所有信息。", + "opentrons_app_successfully_updated": "Opentrons应用程序已成功更新。.", + "opentrons_app_update": "Opentrons应用程序更新", + "opentrons_app_update_available": "Opentrons应用程序可更新", + "opentrons_app_update_available_variation": "有可用的Opentrons应用程序更新。", + "opentrons_app_will_use_interpreter": "如果指定,Opentrons应用程序将在此路径使用Python解释器,而不是默认绑定的Python解释器。", + "opentrons_cares_about_privacy": "Opentrons关心您的隐私。我们匿名化所有数据,仅用于改进我们的产品。", + "opentrons_def": "已验证的Opentrons数据", + "opentrons_labware_def": "已验证的Opentrons实验耗材数据", + "opentrons_tip_rack_name": "opentrons", + "opentrons_tip_racks_recommended": "建议使用Opentrons吸头盒。其他吸头盒无法保证精度。", + "previous_releases": "查看过往的Opentrons版本", + "receive_alert": "当Opentrons软件更新可用时接收提醒。", + "restore_description": "Opentrons不建议恢复到过往软件版本,但您可以访问下方的过往版本。为了获得最佳效果,请在安装过往版本之前卸载现有应用程序并删除其配置文件。", + "robot_server_version_ot3_description": "Opentrons Flex软件包括工作站服务器和触摸屏显示界面。", + "robot_software_update_required": "需要更新工作站软件才能运行此版本Opentrons应用程序的协议。", + "run_failed_modal_description_desktop": "下载运行日志并将其发送到support@opentrons.com寻求帮助。", + "secure_labware_explanation_magnetic_module": "Opentrons建议通过调整模块顶部的黑色固定支架,确保您的实验耗材固定在磁性模块上。 您的模块提供了两种尺寸的板固定支架:标准和深孔。这些固定支架可以通过拧开模块的拇指螺钉(前面的银色旋钮)来移除和更换。", + "secure_labware_explanation_thermocycler": "Opentrons建议通过关闭热循环仪模块的闩锁将您的实验耗材固定在其上。这样可以确保水平以及板位置的准确,从而获得最佳结果。", + "send_a_protocol_to_store": "从Opentrons应用程序发送协议以开始。", + "setup_instructions_description": "有关设置模块的分步说明,请参阅随包装附带的快速指引,或扫描二维码访问Opentrons帮助中心的模块部分。", + "share_app_analytics": "向Opentrons共享应用分析", + "share_app_analytics_description": "通过自动发送匿名诊断和使用数据,帮助Opentrons改进产品和服务。", + "share_display_usage_description": "关于您如何在Flex上与触摸屏交互的数据。", + "share_logs_with_opentrons": "向opentrons共享工作站日志", + "share_logs_with_opentrons_description": "通过自动发送匿名的工作站日志,帮助Opentrons改进产品和服务。Opentrons使用这些日志来解决工作站问题并发现错误趋势。", + "show_labware_offset_snippets_description": "仅适用于需要在Opentrons应用程序之外应用耗材校准数据的用户。启用后,在设置协议过程中可访问Jupyter Notebook和SSH的代码片段。", + "something_seems_wrong": "您的移液器可能有问题。退出设置并联系Opentrons支持人员以获取帮助。", + "these_are_advanced_settings": "这些是高级设置。请勿在没有Opentrons支持团队帮助的情况下尝试调整这些设置。更改这些设置可能会影响您的移液器寿命。这些设置不会覆盖协议中定义的任何移液器设置。", + "update_requires_restarting_app": "更新需要重新启动Opentrons应用程序。", + "update_robot_software_description": "绕过Opentrons应用程序自动更新过程并手动更新工作站软件", + "update_robot_software_link": "启动Opentrons软件更新页面", + "versions_sync": "了解更多有关保持Opentrons应用程序和工作站软件同步的信息", + "view_latest_release_notes_at": "在{{url}}上查看最新发布说明", + "want_to_help_out": "想帮助Opentrons吗?", + "welcome_title": "欢迎使用您的Opentrons Flex!", + "why_use_lpc": "耗材位置校准旨在纠正微小的偏差,Opentrons不建议使用该校准方式来进行较大的位置补偿调整。如果需要进行较大调整的耗材数据校准可能表明工作站的校准存在问题。" +} diff --git a/app/src/assets/localization/zh/change_pipette.json b/app/src/assets/localization/zh/change_pipette.json new file mode 100644 index 00000000000..9818fd56f85 --- /dev/null +++ b/app/src/assets/localization/zh/change_pipette.json @@ -0,0 +1,52 @@ +{ + "are_you_sure_exit": "您确定要在{{direction}}移液器之前退出吗?", + "attach_name_pipette": "安装一个{{pipette}}移液器", + "attach_pipette_type": "安装一个{{pipetteName}}移液器", + "attach_pipette": "安装一个移液器", + "attach_the_pipette": "

连接移液器

推入白色连接器,直到感觉它插入移液器。", + "attached_pipette_does_not_match": "连接的{{name}}与您最初选择的{{pipette}}不匹配。", + "attaching": "正在连接", + "calibrate_pipette_offset": "校准移液器偏移", + "cancel_attachment": "取消连接", + "check_pipette_is_unplugged": "再次检查以确保移液器连接线已拔下并完全从工作站上卸下。", + "choose_pipette": "选择一个要连接的移液器", + "confirm_attachment": "确认连接", + "confirm_detachment": "确认卸下", + "confirm_level": "确认水平", + "confirming_attachment": "正在确认连接", + "confirming_detachment": "正在确认拆卸", + "continue": "继续", + "detach_pipette_from_mount": "从{{mount}}安装支架上卸下移液器", + "detach_pipette": "从{{mount}}安装支架上卸下{{pipette}}", + "detach_try_again": "卸下并重试", + "detach": "卸下移液器", + "detaching": "正在卸下", + "get_started": "开始", + "go_back": "返回", + "homing": "工作站正在归位", + "incorrect_pipette_attached": "连接了错误的移液器", + "insert_screws": "

插入螺钉

使用 2.5 毫米螺丝刀,插入移液器背面的三个螺丝。", + "leave_attached": "保持连接", + "level_the_pipette": "

调整移液器水平

用您的手,轻轻地、慢慢地将移液器向上推。将移液器向下拉,使 8 个喷嘴都接触到校准块的表面。按住移液器的同时,拧紧三个螺钉。", + "loosen_the_screws": "

松开螺丝

用一把 2.5 毫米的螺丝刀,拧松移液器背面的三颗螺丝。.", + "mount": "{{mount}}安装支架", + "moving_gantry": "移动龙门架...", + "pipette_attached": "移液器已连接!", + "pipette_is_ready_to_use": "{{pipette}}现在可以使用。", + "pipette_movement": "{{mount}}移液器托架正在向{{location}}移动。", + "pipette_setup": "移液器设置", + "pipette_still_detected": "仍然检测到移液器", + "press_white_connector": "确保将白色连接器按到底,并感觉到它与移液器连接。", + "progress_will_be_lost": "进度将丢失", + "recheck_connection": "重新检查连接", + "remove_labware_before_start": "

开始之前

开始前,请从平台上取下所有实验耗材,并从移液器上取下所有吸头。龙门将移动到工作站前端.", + "remove_pipette": "

卸下移液器

抓紧移液器,以免其掉落。拉动白色连接器,断开移液器与工作站的连接。", + "successfully_detached_pipette": "成功卸下移液器!", + "tighten_screws_multi": "从 1 号螺丝开始,以顺时针方向轻轻地拧紧螺丝。您将在后面的步骤中完全拧紧。", + "tighten_screws_single": "从第1号螺丝开始,顺时针方向拧紧螺丝。", + "to_front_left": "到左前方", + "to_front_right": "到右前方", + "unable_to_detect_pipette": "无法检测到{{pipette}}", + "up": "上", + "use_attached_pipette": "使用连接的移液器" +} diff --git a/app/src/assets/localization/zh/device_details.json b/app/src/assets/localization/zh/device_details.json new file mode 100644 index 00000000000..39115321f99 --- /dev/null +++ b/app/src/assets/localization/zh/device_details.json @@ -0,0 +1,195 @@ +{ + "about_gripper": "关于转板抓手", + "about_module": "关于{{name}}", + "about_pipette_name": "关于{{name}}移液器", + "about_pipette": "关于移液器", + "add_fixture_description": "将此硬件添加至甲板配置。它在协议分析期间将会被引用。", + "add_to_slot": "添加到板位{{slotName}}", + "add": "添加", + "an_error_occurred_while_updating_module": "更新{{moduleName}}时出现错误,请重试。", + "an_error_occurred_while_updating_please_try_again": "更新移液器设置时出错,请重试。", + "an_error_occurred_while_updating": "更新移液器设置时发生错误。", + "attach_gripper": "安装转板抓手", + "attach_pipette": "安装移液器", + "bad_run": "无法加载运行", + "both_mounts": "两侧支架", + "bundle_firmware_file_not_found": "未找到类型为{{module}}的模块固件包文件。", + "calibrate_gripper": "校准转板抓手", + "calibrate_now": "立即校准", + "calibrate_pipette_offset": "校准移液器数据", + "calibrate_pipette": "校准移液器", + "calibration_needed_without_link": "需要校准。", + "calibration_needed": "需要校准。 立即校准", + "canceled": "已取消", + "changes_will_be_lost_description": "确定不保存甲板配置直接退出而吗?", + "changes_will_be_lost": "更改将丢失", + "choose_protocol_to_run": "选择在{{name}}上运行的协议", + "close_lid": "关闭上盖", + "completed": "已完成", + "confirm": "确认", + "continue_editing": "继续编辑", + "controls": "控制", + "csv_required_for_analysis": "分析需要CSV文件。请在运行设置时添加。", + "current_speed": "当前:{{speed}}rpm", + "current_temp": "当前:{{temp}}°C", + "current_version": "当前版本", + "deck_cal_missing": "缺少移液器校准数据,请先校准甲板。", + "deck_configuration_is_not_available_when_robot_is_busy": "工作站忙碌时,甲板配置不可用", + "deck_configuration_is_not_available_when_run_is_in_progress": "工作站运行时,甲板配置不可用", + "deck_configuration": "甲板配置", + "deck_fixture_setup_instructions": "甲板配置安装说明", + "deck_fixture_setup_modal_bottom_description_desktop": "针对不同类型的配置,扫描二维码或访问下方链接获取详细说明。", + "deck_fixture_setup_modal_top_description": "首先,拧松并移除计划安装模组的甲板。然后放置模组,并进行固定。", + "deck_hardware": "甲板硬件", + "deck_slot": "甲板板位{{slot}}", + "delete_run": "删除协议运行记录", + "detach_gripper": "卸下转板抓手", + "detach_pipette": "卸下移液器", + "discard_changes": "放弃更改", + "disengaged": "不启用", + "download_run_log": "下载协议运行日志", + "drop_tips": "丢弃吸头", + "empty": "空", + "error_details": "错误详情", + "estop_disconnected": "急停断开。工作站运动已停止。", + "estop_disengaged": "急停解除,但工作站操作仍暂停中。", + "estop_pressed": "急停按钮被按下。工作站运动已停止。", + "failed": "失败", + "files": "文件", + "firmware_update_needed": "需要更新工作站固件。请在工作站的触摸屏上开始更新。", + "firmware_update_available": "固件更新可用。", + "firmware_update_failed": "未能更新模块固件", + "firmware_updated_successfully": "固件更新成功", + "firmware_update_occurring": "固件更新正在进行中...", + "fixture": "配置模组", + "have_not_run_description": "运行一些协议后,它们会在这里显示。", + "have_not_run": "无最近运行记录", + "heater": "加热器", + "height_ranges": "{{gen}}高度范围", + "hot_to_the_touch": "模块接触时很热", + "input_out_of_range": "输入超出范围", + "instrument_attached": "设备已连接", + "instruments_and_modules": "设备与模块", + "labware_bottom": "耗材底部", + "last_run_time": "最后一次运行{{number}}", + "left_right": "左右支架", + "left": "左侧", + "lights": "灯光", + "link_firmware_update": "查看固件更新", + "location_conflicts": "位置冲突", + "location": "位置", + "magdeck_gen1_height": "高度:{{height}}", + "magdeck_gen2_height": "高度:{{height}}毫米", + "max_engage_height": "最大可用高度", + "missing_fixture": "缺少{{num}}个配置", + "missing_fixtures_plural": "缺少{{count}}个配置", + "missing_hardware": "缺少硬件", + "missing_instrument": "缺少{{num}}个设备", + "missing_instruments_plural": "缺少{{count}}个设备", + "missing_module_plural": "缺少{{count}}个模块", + "missing_module": "缺少{{num}}个模块", + "module_actions_unavailable": "协议运行时模块操作不可用", + "module_calibration_required_no_pipette_attached": "需要模块校准。在运行模块校准前,请连接移液器。", + "module_calibration_required_no_pipette_calibrated": "需要模块校准。在校准模块前,请先校准移液器。", + "module_calibration_required_update_pipette_FW": "在进行必要的模块校准前,请先更新移液器固件。", + "module_calibration_required": "需要模块校准。", + "module_controls": "模块控制", + "module_error": "模块错误", + "module_name_error": "{{moduleName}}错误", + "module_status_range": "介于{{min}}至{{max}}{{unit}}之间", + "mount": "{{side}}安装座", + "na_speed": "目标速度: N/A", + "na_temp": "目标温度: N/A", + "no_deck_fixtures": "无甲板配置", + "no_protocol_runs": "暂无协议运行记录!", + "no_protocols_found": "未找到协议", + "no_recent_runs_description": "运行一些协议后,它们将显示在此处。", + "no_recent_runs": "无最近运行记录", + "num_units": "{{num}}毫米", + "offline_deck_configuration": "工作站必须连接网络才能查看甲板配置", + "offline_instruments_and_modules": "工作站必须连接网络才能查看已连接的设备和模块", + "offline_recent_protocol_runs": "工作站必须连接网络才能查看协议运行情况", + "open_lid": "打开上盖", + "overflow_menu_about": "关于模块", + "overflow_menu_deactivate_block": "停用模块", + "overflow_menu_deactivate_lid": "停用上盖", + "overflow_menu_deactivate_temp": "停用模块", + "overflow_menu_disengage": "模块下降", + "overflow_menu_engage": "设置模块高度", + "overflow_menu_lid_temp": "设置上盖温度", + "overflow_menu_mod_temp": "设置模块温度", + "overflow_menu_set_block_temp": "设置模块温度", + "pipette_cal_recommended": "建议进行移液器校准。", + "pipette_calibrations_differ": "所连接的移液器校准数据差异过大。正确校准后,这些数据应相近。", + "pipette_offset_calibration_needed": "需要进行移液器校准。", + "pipette_recalibration_recommended": "建议重新校准移液器", + "pipette_settings": "{{pipetteName}}设置", + "plunger_positions": "活塞位置", + "power_force": "功率 / 力量", + "protocol": "协议", + "protocol_analysis_failed": "协议APP分析失败。", + "protocol_analysis_stale": "协议分析已过期。", + "protocol_details_page_reanalyze": "前往协议详情页面重新分析。", + "ready_to_run": "运行工作准备完成", + "ready": "准备就绪", + "recalibrate_gripper": "重新校准转板抓手", + "recalibrate_now": "立即重新校准", + "recalibrate_pipette_offset": "重新校准移液器偏移", + "recalibrate_pipette": "重新校准移液器", + "recent_protocol_runs": "最近的协议运行", + "rerun_now": "立即重新运行协议", + "reset_all": "重置全部", + "reset_estop": "重置急停", + "resume_operation": "继续操作", + "right": "右侧", + "robot_control_not_available": "运行过程中某些工作站控制功能不可用", + "robot_initializing": "初始化中...", + "run_a_protocol": "运行协议", + "run_again": "再次运行", + "run_duration": "运行时长", + "run": "运行", + "select_options": "选择选项", + "serial_number": "序列号", + "set_block_temp": "设置温度", + "set_block_temperature": "设置模块温度", + "set_engage_height_and_enter_integer": "为此磁力模块设置启用高度。请输入一个介于{{lower}}和{{higher}}之间的整数。", + "set_engage_height_for_module": "为{{name}}设置启用高度", + "set_engage_height": "设置启用高度", + "set_lid_temperature": "设置上盖温度", + "set_shake_of_hs": "为此模块设置转速。", + "set_shake_speed": "设置震荡速度", + "set_status_heater_shaker": "为{{name}}设置{{part}}", + "set_target_temp_of_hs": "设置目标温度。此模块主动加热,但被动冷却至室温。", + "set_temp_or_shake": "设置{{part}}", + "set_temperature": "设置温度", + "setup_instructions": "设置说明", + "shake_speed": "震荡速度", + "shaker": "震荡仪", + "staging_area_slot": "暂存区板位", + "status": "状态", + "target_speed": "目标转速:{{speed}}rpm", + "target_temp": "目标温度:{{temp}}°C", + "tc_block": "模块", + "tc_lid": "上盖", + "tc_set_temperature_body": "预热或预冷您的热循环模块的{{part}}。请输入介于{{min}}°C 和{{max}}°C之间的一个整数。", + "tc_set_temperature": "为{{name}}设置温度{{part}}", + "tempdeck_slideout_body": "预热或冷却您的{{model}}。输入4°C至96°C之间的一个整数。", + "tempdeck_slideout_title": "为{{name}}设置温度", + "temperature": "温度", + "this_robot_will_restart_with_update": "此工作站需要重启以更新软件。重启会立即终止当前的运行或校准。您仍然要现在更新吗?", + "tip_pickup_drop": "吸头拾取/丢弃", + "to_run_protocol_go_to_protocols_page": "要在该工作站上运行协议,请在协议页面导入协议。", + "trash": "垃圾桶", + "update_now": "立即更新", + "updating_firmware": "正在更新固件...", + "usb_port_not_connected": "USB未连接", + "usb_port": "USB端口-{{port}}", + "version": "版本{{version}}", + "view_pipette_setting": "移液器设置", + "view_run_record": "查看协议运行记录", + "view": "查看", + "waste_chute": "外置垃圾槽", + "welcome_modal_description": "运行协议、管理设备及查看工作站状态的地方。", + "welcome_to_your_dashboard": "欢迎来到您的控制面板!", + "yes_update_now": "是的,现在更新" +} diff --git a/app/src/assets/localization/zh/device_settings.json b/app/src/assets/localization/zh/device_settings.json new file mode 100644 index 00000000000..c69e9e46131 --- /dev/null +++ b/app/src/assets/localization/zh/device_settings.json @@ -0,0 +1,324 @@ +{ + "about_advanced": "关于", + "about_calibration_description": "为了让工作站精确移动,您需要对其进行校准。位置校准分为三部分:甲板校准、移液器偏移校准和吸头长度校准。", + "about_calibration_description_ot3": "为了让工作站精确移动,您需要对其进行校准。移液器和转板抓手校准是一个自动化过程,使用校准探头或销钉。校准完成后,您可以将校准数据以JSON文件的形式保存到计算机中。", + "about_calibration_title": "关于校准", + "advanced": "高级", + "alpha_description": "警告:alpha版本功能完整,但可能包含重大错误。", + "alternative_security_types": "可选的安全类型", + "app_change_in": "应用程序在{{version}}中的更改", + "apply_historic_offsets": "应用耗材偏移校准数据", + "are_you_sure_you_want_to_disconnect": "您确定要断开与{{ssid}}的连接吗?", + "attach_a_pipette_before_calibrating": "在执行校准之前,请安装移液器", + "boot_scripts": "启动脚本", + "both": "两者", + "browse_file_system": "浏览文件系统", + "bug_fixes": "错误修复", + "calibrate_deck": "校准甲板", + "calibrate_deck_description": "适用于没有在甲板上蚀刻十字的2019年之前的工作站。", + "calibrate_deck_to_dots": "根据校准点校准甲板", + "calibrate_gripper": "校准转板抓手", + "calibrate_module": "校准模块", + "calibrate_now": "立即校准", + "calibrate_pipette": "校准移液器偏移", + "calibration": "校准", + "calibration_health_check_description": "检查关键校准点的精度,无需重新校准工作站。", + "calibration_health_check_title": "校准运行状况检查", + "change_network": "更改网络", + "characters_max": "最多17个字符", + "check_for_updates": "检查更新", + "checking_for_updates": "正在检查更新", + "choose": "选择...", + "choose_file": "选择文件", + "choose_network_type": "选择网络类型", + "choose_reset_settings": "选择重置设置", + "clear_all_data": "清除所有数据", + "clear_all_stored_data": "清除所有存储的数据", + "clear_all_stored_data_description": "清除校准、协议和所有设置,保留工作站名称和网络设置。", + "clear_calibration_data": "清除校准数据", + "clear_data_and_restart_robot": "清除数据并重新启动工作站", + "clear_individual_data": "清除单个数据", + "clear_option_authorized_keys": "清除SSH公钥", + "clear_option_boot_scripts": "清除自定义启动脚本", + "clear_option_boot_scripts_description": "清除修改工作站开机行为的脚本", + "clear_option_deck_calibration": "清除甲板校准", + "clear_option_gripper_calibration": "清除转板抓手校准", + "clear_option_gripper_offset_calibrations": "清除转板抓手校准", + "clear_option_module_calibration": "清除模块校准", + "clear_option_pipette_calibrations": "清除移液器校准", + "clear_option_pipette_offset_calibrations": "清除移液器偏移校准", + "clear_option_runs_history": "清除协议运行历史", + "clear_option_runs_history_subtext": "清除所有协议的过往运行信息。点击并应用", + "clear_option_tip_length_calibrations": "清除吸头长度校准", + "cancel_software_update": "取消软件更新", + "complete_and_restart_robot": "完成并重新启动工作站", + "confirm_device_reset_description": "这将永久删除所有协议、校准和其他数据。您需要重新进行初始设置才能再次使用工作站。", + "confirm_device_reset_heading": "您确定要重置您的设备吗?", + "connect": "连接", + "connect_the_estop_to_continue": "连接紧急停止按钮以继续", + "connect_to_wifi_network": "连接到Wi-Fi网络", + "connect_via": "通过{{type}}连接", + "connect_via_usb_description_1": "1. 将 USB A-to-B 连接线连接到工作站的 USB-B 端口。", + "connect_via_usb_description_2": "2. 将电缆连接到计算机上的一个空闲USB端口。", + "connected": "已连接", + "connected_network": "已连接网络", + "connected_to_ssid": "已连接到{{ssid}}", + "connected_via": "通过{{networkInterface}}连接", + "connecting_to": "正在连接到{{ssid}}...", + "connection_description_ethernet": "连接到您实验室的有线网络。", + "connection_description_wifi": "在您的实验室中找到一个网络,或者输入您自己的网络。", + "connection_to_robot_lost": "与工作站的连接中断", + "deck_calibration_description": "新工作站或搬迁工作站后需要校准甲板。重新校准甲板后也将需要重新校准移液器偏移。", + "deck_calibration_missing": "缺少甲板校准", + "deck_calibration_missing_no_pipette": "缺少甲板校准。安装移液器以执行甲板校准。", + "deck_calibration_modal_description": "若同时需要校准甲板及校准移液器偏移,不建议在校准甲板之前校准移液器偏移,因为校准甲板会清除所有其他校准数据。", + "deck_calibration_modal_pipette_description": "您想要继续进行移液器偏移校准吗?", + "deck_calibration_modal_title": "您确定要进行校准吗?", + "deck_calibration_recommended": "建议进行甲板校准", + "deck_calibration_title": "甲板校准", + "dev_tools_description": "访问额外的日志记录和功能标志。", + "device_reset": "设备重置", + "device_reset_description": "将耗材校准、启动脚本和/或工作站校准重置为出厂设置。", + "device_reset_slideout_description": "选择单独的设置以仅清除特定的数据类型。", + "device_resets_cannot_be_undone": "重置无法撤销", + "release_notes": "发行说明", + "directly_connected_to_this_computer": "直接连接到这台计算机。", + "disconnect": "断开连接", + "disconnect_from_ssid": "断开与{{ssid}}的连接", + "disconnect_from_wifi": "断开Wi-Fi连接", + "disconnect_from_wifi_network_failure": "您的工作站无法断开与Wi-Fi网络{{ssid}}的连接。", + "disconnect_from_wifi_network_success": "您的工作站已成功断开与Wi-Fi网络的连接。", + "disconnected_from_wifi": "已断开Wi-Fi连接", + "disconnecting_from_wifi_network": "正在断开与Wi-Fi网络{{ssid}}的连接", + "disengaged": "已解除", + "display_brightness": "屏幕亮度", + "display_led_lights": "状态LED灯", + "display_led_lights_description": "控制工作站前部的指示灯条。", + "display_sleep_settings": "屏幕睡眠设置", + "do_not_turn_off": "这可能需要最多{{minutes}}分钟。请不要关闭工作站。", + "done": "完成", + "download": "下载", + "download_calibration_data": "下载校准日志", + "download_error": "下载错误日志", + "download_logs": "下载日志", + "downloading_logs": "正在下载日志...", + "downloading_software": "正在下载软件...", + "downloading_update": "正在下载更新...", + "e_stop_connected": "紧急停止按钮成功连接", + "e_stop_not_connected": "将紧急停止按钮连接到工作站背面的端口。", + "enable_status_light": "启用状态灯", + "enable_status_light_description": "打开或关闭工作站前部的指示LED灯条。", + "engaged": "已连接", + "enter_factory_password": "输入工厂密码", + "enter_network_name": "输入网络名称", + "enter_password": "输入密码", + "estop": "紧急停止按钮", + "estop_disengaged": "紧急停止按钮已解除", + "estop_engaged": "紧急停止按钮已连接", + "estop_missing": "缺少紧急停止按钮", + "estop_missing_description": "您的紧急停止按钮可能已损坏或脱落。{{robotName}}与紧急停止按钮失去连接,因此取消了协议。连接一个功能正常的紧急停止按钮以继续。", + "estop_pressed": "紧急停止按钮被按下", + "ethernet": "以太网", + "ethernet_connection_description": "将以太网线从工作站背面接口连接到网络交换机或集线器。", + "exit": "退出", + "factory_mode": "工厂模式", + "factory_reset": "工厂重置", + "factory_reset_description": "重置所有设置。在再次使用工作站之前,您必须重新进行初始设置。", + "factory_reset_modal_description": "这些数据以后无法检索。", + "factory_resets_cannot_be_undone": "工厂重置无法撤销。", + "failed_to_connect_to_ssid": "无法连接到{{ssid}}", + "feature_flags": "功能标志", + "finish_setup": "完成设置", + "firmware_version": "固件版本", + "fully_calibrate_before_checking_health": "在检查校准健康之前,请完全校准您的工作站", + "gantry_homing": "重启时归位龙门架", + "gantry_homing_description": "沿Z轴归位龙门架。", + "go_to_advanced_settings": "转到高级应用设置", + "gripper_calibration_description": "使用金属销来确定转板抓手相对于甲板槽上的精密切割方格的确切位置。", + "gripper_calibration_title": "转板抓手校准", + "gripper_serial": "转板抓手序列号", + "health_check": "检查健康状态", + "hide": "隐藏", + "historic_offsets_description": "在设置协议时使用存储的数据。", + "incorrect_password_for_ssid": "哎呀!{{ssid}}的密码不正确", + "install_e_stop": "安装紧急停止按钮", + "installing_software": "正在安装软件...", + "installing_update": "正在安装更新...", + "invalid_password": "无效密码", + "ip_address": "IP地址", + "join_other_network": "加入其他网络", + "join_other_network_error_message": "长度必须为2-32个字符", + "jupyter_notebook": "Jupyter Notebook", + "jupyter_notebook_description": "在网页浏览器中打开运行在此工作站上的Jupyter Notebook。这是一个实验性功能。", + "jupyter_notebook_link": "了解更多关于使用Jupyter Notebook的信息", + "last_calibrated": "最后校准时间:{{date}}", + "last_calibrated_label": "最后校准", + "launch_jupyter_notebook": "启动Jupyter Notebook", + "legacy_settings": "遗留设置", + "mac_address": "MAC地址", + "manage_oem_settings": "管理OEM设置", + "minutes": "{{minute}}分钟", + "missing_calibration": "缺少校准", + "model_and_serial": "移液器型号和序列号", + "module": "模块", + "module_calibration": "模块校准", + "module_calibration_description": "模块校准使用移液器和连接的探头来确定模块相对于甲板的确切位置。", + "mount": "安装", + "name_love_it": "{{name}},喜欢它!", + "name_rule_description": "输入最多17个字符(仅限字母和数字)", + "name_rule_error_exist": "哎呀!名称已被使用。选择一个不同的名称。", + "name_rule_error_name_length": "哎呀!工作站名称必须遵循字符计数和限制。", + "name_rule_error_too_short": "哎呀!太短了。工作站名称至少需要1个字符。", + "name_your_robot": "给您的工作站起个名字", + "name_your_robot_description": "别担心,您可以在设置中随时更改这个名称。", + "need_another_security_type": "需要另一种安全类型吗?", + "network_name": "网络名称", + "network_settings": "网络设置", + "networking": "网络连接", + "never": "从不", + "new_features": "新功能", + "next_step": "下一步", + "no_connection_found": "未找到连接", + "no_gripper_attached": "未连接转板抓手", + "no_modules_attached": "未连接模块", + "no_network_found": "未找到网络", + "no_pipette_attached": "未连接移液器", + "none_description": "不推荐", + "not_calibrated": "尚未校准", + "not_calibrated_short": "未校准", + "not_connected": "未连接", + "not_connected_via_ethernet": "未通过以太网连接", + "not_connected_via_usb": "未通过USB连接", + "not_connected_via_wifi": "未通过Wi-Fi连接", + "not_connected_via_wired_usb": "未通过有线USB连接", + "not_now": "不是现在", + "oem_mode": "OEM模式", + "off": "关闭", + "one_hour": "1小时", + "on": "开启", + "other_networks": "其他网络", + "password": "密码", + "password_error_message": "至少需要8个字符", + "pause_protocol": "当工作站前门打开时暂停协议", + "pause_protocol_description": "启用后,在运行过程中打开工作站前门,工作站会在完成当前动作后暂停。", + "pipette_calibrations_description": "使用校准探头来确定移液器相对于甲板槽上的精密切割方格的确切位置。", + "pipette_calibrations_title": "移液器校准", + "pipette_offset_calibration": "移液器偏移校准", + "pipette_offset_calibration_missing": "缺少移液器偏移校准", + "pipette_offset_calibration_recommended": "建议进行移液器偏移校准", + "pipette_offset_calibrations_history": "查看所有移液器偏移校准历史", + "pipette_offset_calibrations_title": "移液器偏移校准", + "privacy": "隐私", + "problem_during_update": "此次更新耗时比平常要长。", + "proceed_without_updating": "跳过更新以继续", + "protocol_run_history": "协议运行历史", + "recalibrate_deck": "重新校准甲板", + "recalibrate_gripper": "重新校准转板抓手", + "recalibrate_module": "重新校准模块", + "recalibrate_now": "立即重新校准", + "recalibrate_pipette": "重新校准移液器偏移数据", + "recalibrate_tip_and_pipette": "重新校准吸头长度和移液器偏移量", + "recalibration_recommended": "建议重新校准", + "reinstall": "重新安装", + "remind_me_later": "稍后提醒我", + "rename_robot": "重命名工作站", + "rename_robot_input_error": "哎呀!工作站名称必须遵循字符计数和限制。", + "rename_robot_input_limitation_detail": "请输入最多17个字符:字母和数字。", + "rename_robot_prefer_usb_connection": "为确保工作站名称更改的可靠性,请通过USB连接。", + "rename_robot_title": "重命名工作站", + "requires_restarting_the_robot": "更新工作站软件需要重启工作站", + "reset_to_factory_settings": "重置为出厂设置?", + "resets_cannot_be_undone": "重置操作无法撤销", + "restart_now": "现在重启?", + "restart_robot_confirmation_description": "重启{{robotName}}将需要几分钟时间。", + "restart_taking_too_long": "{{robotName}}重启所需时间超出预期。请检查其设置页面中的“高级”选项卡,以确认是否已成功更新。如果工作站无响应,请手动重启。", + "restarting_robot": "安装完成,工作站正在重启...", + "resume_robot_operations": "恢复工作站操作", + "returns_your_device_to_new_state": "这将使您的设备恢复到新的状态。", + "robot_busy_protocol": "当协议正在运行时,此工作站无法更新", + "robot_calibration_data": "工作站校准数据", + "robot_initializing": "正在初始化工作站...", + "robot_name": "工作站名称", + "robot_operating_update_available": "工作站操作系统更新可用", + "robot_serial_number": "工作站序列号", + "robot_server_version": "工作站服务器版本", + "robot_settings": "工作站设置", + "robot_settings_advanced_unknown": "未知", + "robot_successfully_connected": "工作站已成功连接到{{networkName}}。", + "robot_system_version": "工作站系统版本", + "robot_system_version_available": "工作站系统版本{{releaseVersion}}可用", + "robot_up_to_date": "工作站已更新至最新版本", + "robot_up_to_date_description": "您的工作站似乎已经是最新版本,但如果您遇到问题,可以重新应用最新更新。", + "robot_update_available": "工作站更新可用", + "robot_update_success": "工作站软件已成功更新", + "search_again": "再次搜索", + "searching": "搜索中", + "searching_for_networks": "正在搜索网络...", + "security_type": "安全类型", + "select_a_network": "选择一个网络", + "select_a_security_type": "选择一个安全类型", + "select_all_settings": "选择所有设置", + "select_authentication_method": "为您所选的网络选择身份验证方法。", + "sending_software": "正在发送软件...", + "serial": "序列号", + "setup_mode": "设置模式", + "short_trash_bin": "短垃圾桶", + "short_trash_bin_description": "适用于2019年之前带有55mm高垃圾桶的工作站(而非默认的77mm)", + "show": "显示", + "show_password": "显示密码", + "sign_into_wifi": "登录Wi-Fi", + "software_is_up_to_date": "您的软件已经是最新版本!", + "software_update_error": "软件更新错误", + "some_robot_controls_are_not_available": "运行过程中无法使用工作站的控制功能", + "ssh_public_keys": "SSH公钥", + "subnet_mask": "子网掩码", + "successfully_connected": "成功连接!", + "successfully_connected_to_network": "已成功连接到{{ssid}}!", + "supported_protocol_api_versions": "支持的协议API版本", + "text_size": "文本大小", + "text_size_description": "所有屏幕上的文本都会根据您在下方选择的大小进行调整。", + "tip_length_calibrations_history": "查看所有吸头长度校准历史", + "tip_length_calibrations_title": "吸头长度校准", + "tiprack": "吸头架", + "touchscreen_brightness": "触摸屏亮度", + "touchscreen_sleep": "触摸屏休眠", + "troubleshooting": "故障排查", + "try_again": "再试一次", + "try_restarting_the_update": "尝试重新启动更新。", + "up_to_date": "最新的", + "update_available": "有可用更新", + "update_channel_description": "稳定版接收最新的稳定版发布。Beta 版允许您在新功能在稳定版发布前先行试用,但这些新功能尚未完成测试。", + "update_complete": "更新完成!", + "update_found": "发现更新!", + "update_robot_now": "现在更新工作站", + "update_robot_software": "使用本地文件(.zip)手动更新工作站软件", + "updating": "正在更新", + "update_requires_restarting_robot": "更新工作站软件需要重启工作站", + "upload_custom_logo_description": "上传一个Logo,用于工作站启动时显示。", + "upload_custom_logo_dimensions": "Logo必须符合 1024 x 600 的尺寸,且是 PNG 文件(.png)。", + "upload_custom_logo": "上传自定义Logo", + "usage_settings": "使用设置", + "usb": "USB", + "usb_to_ethernet_description": "正在查找 USB-to-Ethernet 适配器信息?", + "use_older_aspirate": "使用旧版吸液动作", + "use_older_aspirate_description": "使用在 3.7.0 版本之前使用的较不准确的体积校准进行吸取。如果需要与 3.7.0 版本之前的结果保持一致,请使用此设置。这仅影响 GEN1 P10S、P10M、P50M 和 P300S 移液器。", + "validating_software": "正在验证软件...", + "view_details": "查看详细信息", + "view_network_details": "查看网络详细信息", + "view_update": "查看更新", + "welcome_description": "在实验室台面上快速运行协议并检查工作站状态。", + "wifi": "Wi-Fi", + "wired_ip": "有线IP", + "wired_mac_address": "有线MAC地址", + "wired_subnet_mask": "有线子网掩码", + "wired_usb": "有线USB", + "wired_usb_description": "了解如何通过USB连接到工作站", + "wireless_ip": "无线IP", + "wireless_mac_address": "无线MAC地址", + "wireless_subnet_mask": "无线子网掩码", + "wpa2_personal": "WPA2个人", + "wpa2_personal_description": "大多数实验室都使用此方法", + "yes_clear_data_and_restart_robot": "是,清除数据并重新启动工作站", + "your_mac_address_is": "您的MAC地址是{{macAddress}}", + "your_robot_is_ready_to_go": "您的工作站已准备就绪。" +} diff --git a/app/src/assets/localization/zh/devices_landing.json b/app/src/assets/localization/zh/devices_landing.json new file mode 100644 index 00000000000..587959751e9 --- /dev/null +++ b/app/src/assets/localization/zh/devices_landing.json @@ -0,0 +1,46 @@ +{ + "active": "激活", + "available": "可用({{count}})", + "check_same_network": "检查电脑和工作站是否连接在同一网络上", + "connect_to_network": "连接到网络", + "connection_troubleshooting_intro": "如果工作站的连接出现问题,请尝试执行以下故障排除任务。首先,仔细检查工作站电源是否打开", + "deck_configuration": "甲板配置", + "devices": "设备", + "disconnect_from_network": "断开网络连接", + "empty": "空", + "forget_unavailable_robot": "忘记无法使用的工作站", + "go_to_run": "去运行", + "home_gantry": "龙门架归位", + "how_to_setup_a_robot": "如何设置新工作站", + "idle": "空闲", + "if_connecting_via_usb": "如果通过USB连接", + "if_connecting_wirelessly": "如果通过无线方式连接", + "if_still_having_issues": "如果您仍然有问题", + "learn_more_about_new_robot_setup": "了解有关设置新工作站的更多信息", + "learn_more_about_troubleshooting_connection": "了解有关连接问题故障排除的更多信息", + "left_mount": "左侧安装支架", + "lights_off": "关闭灯光", + "lights_on": "开启灯光", + "loading": "加载中", + "looking_for_robots": "寻找工作站", + "ninety_six_mount": "左侧+右侧安装支架", + "make_sure_robot_is_connected": "确保工作站已连接到此计算机", + "modules": "模块", + "no_robots_found": "未找到工作站", + "not_available": "不可用({{count}})", + "refresh": "刷新", + "restart_the_app": "重启应用程序", + "restart_the_robot": "重启工作站", + "right_mount": "右侧安装支架", + "robot_settings": "工作站设置", + "run_a_protocol": "运行一个协议", + "running": "运行中", + "see_how_to_setup_new_robot": "查看如何设置新工作站", + "setting_up_new_robot": "了解如何设置新工作站", + "this_robot_has_connected_and_power_on_module": "工作站已连接并开启{{moduleName}}", + "troubleshooting_connection_problems": "了解有关连接问题故障排除的更多信息", + "update_robot_software": "更新工作站软件", + "use_usb_cable_for_new_robot": "设置新工作站时,请使用附带的USB线进行首次连接。", + "wait_after_connecting": "将工作站连接到电脑后等待一会", + "why_is_this_robot_unavailable": "为什么这个工作站不可用?" +} diff --git a/app/src/assets/localization/zh/drop_tip_wizard.json b/app/src/assets/localization/zh/drop_tip_wizard.json new file mode 100644 index 00000000000..8984387755e --- /dev/null +++ b/app/src/assets/localization/zh/drop_tip_wizard.json @@ -0,0 +1,39 @@ +{ + "before_you_begin_do_you_want_to_blowout": "开始前,您是否需要保留已吸取的液体?", + "begin_removal": "开始移除", + "blowout_complete": "吹液完成", + "blowout_liquid": "吹出液体", + "cant_safely_drop_tips": "无法安全丢弃吸头", + "choose_blowout_location": "选择吹液位置", + "choose_drop_tip_location": "选择吸头丢弃位置", + "confirm_blowout_location": "移液器是否位于应吹出液体的位置?", + "confirm_drop_tip_location": "移液器是否位于应丢弃吸头的位置?", + "confirm_removal_and_home": "确认移除并回到原点", + "drop_tip_complete": "吸头丢弃完成", + "drop_tip_failed": "丢弃吸头操作未能完成,请联系技术支持获取帮助。", + "drop_tips": "丢弃吸头", + "error_dropping_tips": "丢弃吸头时发生错误", + "exit_screen_title": "在完成吸头丢弃前退出?", + "getting_ready": "正在准备…", + "go_back": "返回", + "move_to_slot": "移至板位", + "no_proceed_to_drop_tip": "否,继续进行吸头移除", + "position_and_blowout": "确保移液器吸头尖端位于指定位置的正上方并保持水平。如果不是,请使用下面的控制键或键盘微调移液器直到正确位置。", + "position_and_drop_tip": "确保移液器吸头尖端位于指定位置的正上方并保持水平。如果不是,请使用下面的控制键或键盘微调移液器直到正确位置。", + "position_the_pipette": "调整移液器位置", + "remove_the_tips": "在协议中再次使用前,您可能需要从{{mount}}移液器上移除吸头。", + "remove_the_tips_from_pipette": "在协议中再次使用前,您可能需要从移液器上移除吸头。", + "remove_the_tips_manually": "手动移除吸头,然后使龙门架回原点。在拾取吸头的状态下归位可能导致移液器吸入液体并损坏。", + "remove_tips": "移除吸头", + "select_blowout_slot": "您可以将液体吹入实验容器中。在右侧的甲板图上选择您想要吹出液体的板位。确认后龙门架将移动到选定的板位。", + "select_blowout_slot_odd": "您可以将液体吹入耗材中。
龙门架移动到选定的板位后,使用位置控制按键将移液器移动到吹出液体的确切位置。", + "select_drop_tip_slot": "您可以将吸头返回吸头架或丢弃它们。在右侧的甲板图上选择您想丢弃吸头的板位。确认后龙门架将移动到选定的板位。", + "select_drop_tip_slot_odd": "您可以将吸头放回吸头架或丢弃它们。
龙门架移动到选定的板位后,使用位置控制按键将移液器移动到丢弃吸头的确切位置。", + "skip": "跳过", + "stand_back_blowing_out": "请远离,工作站正在吹出液体", + "stand_back_dropping_tips": "请远离,工作站正在丢弃吸头", + "stand_back_robot_in_motion": "请远离,工作站正在移动", + "tips_are_attached": "吸头已拾取", + "tips_may_be_attached": "可能已拾取吸头。", + "yes_blow_out_liquid": "是的,将液体吹入耗材中" +} diff --git a/app/src/assets/localization/zh/error_recovery.json b/app/src/assets/localization/zh/error_recovery.json new file mode 100644 index 00000000000..2383ca8f850 --- /dev/null +++ b/app/src/assets/localization/zh/error_recovery.json @@ -0,0 +1,73 @@ +{ + "are_you_sure_you_want_to_cancel": "您确定要取消吗?", + "at_step": "在步骤", + "back_to_menu": "返回菜单", + "before_you_begin": "开始前", + "begin_removal": "开始移除", + "blowout_failed": "吹出液体失败", + "overpressure_is_usually_caused": "探测器感应到压力过大通常是由吸头碰撞到实验用品、吸头堵塞或吸取/排出粘稠液体速度过快引起。如果问题持续存在,请取消运行并对协议进行必要的修改。", + "cancel_run": "取消运行", + "canceling_run": "正在取消运行", + "change_location": "更改位置", + "change_tip_pickup_location": "更换拾取吸头的位置", + "choose_a_recovery_action": "选择恢复操作", + "confirm": "确认", + "continue": "继续", + "continue_run_now": "现在继续运行", + "continue_to_drop_tip": "继续丢弃吸头", + "error": "错误", + "failed_dispense_step_not_completed": "中断运行的最后一步液体排出失败,恢复程序将不会继续运行这一步骤,请手动完成这一步的移液操作。运行将继续从下一步开始。继续之前,请关闭工作站门。", + "failed_step": "失败步骤", + "go_back": "返回", + "if_tips_are_attached": "如果吸头还在移液器上,您可以在运行终止前选择吹出已吸取的液体并丢弃吸头。", + "ignore_all_errors_of_this_type": "忽略所有此类错误", + "ignore_error_and_skip": "忽略错误并跳到下一步", + "skipping_to_step_succeeded": "跳转到步骤{{step}}成功", + "retrying_step_succeeded": "重试步骤{{step}}成功", + "ignore_only_this_error": "仅忽略此错误", + "ignore_similar_errors_later_in_run": "要在后续的运行中忽略类似错误吗?", + "launch_recovery_mode": "启动恢复模式", + "manually_fill_liquid_in_well": "手动填充孔位{{well}}中的液体", + "manually_fill_well_and_skip": "手动填充孔位并跳到下一步", + "next_step": "下一步", + "no_liquid_detected": "未检测到液体", + "pick_up_tips": "取吸头", + "pipette_overpressure": "移液器超压", + "preserve_aspirated_liquid": "首先,您需要保留已吸取的液体吗?", + "proceed_to_cancel": "继续取消", + "proceed_to_tip_selection": "继续选择吸头", + "recovery_action_failed": "{{action}}失败", + "recovery_mode": "恢复模式", + "recovery_mode_explanation": "恢复模式为您提供运行错误后的手动处理引导。
您可以进行调整以确保发生错误时正在进行的步骤可以完成,或者选择取消协议。当做出调整且未检测到后续错误时,该模式操作完成。根据导致错误的条件,系统将提供相应的调整选项。", + "replace_tips_and_select_location": "建议更换吸头并选择最后一次取吸头的位置。", + "replace_used_tips_in_rack_location": "在吸头板位{{location}}更换已使用的吸头", + "replace_with_new_tip_rack": "更换新的吸头盒", + "first_take_any_necessary_actions": "首先,采取必要的准备操作,工作站将从失败的步骤开始继续运行。然后,在工作站继续运行之前关闭前门。", + "retry_now": "现在重试", + "retry_step": "重试步骤", + "retry_with_new_tips": "使用新吸头重试", + "retry_with_same_tips": "使用相同吸头重试", + "return_to_menu": "返回菜单", + "return_to_the_menu": "返回菜单以选择如何继续。", + "robot_will_not_check_for_liquid": "工作站将不再检查液体。运行将从下一步继续。继续前请关闭工作站前门。", + "robot_will_retry_with_new_tips": "工作站将使用新吸头重试失败的步骤。继续前请关闭工作站前门。", + "robot_will_retry_with_same_tips": "工作站将使用相同的吸头重试失败的步骤。继续前请关闭工作站前门。", + "robot_will_retry_with_tips": "工作站将使用新吸头重试失败的步骤。", + "run_paused": "运行暂停", + "select_tip_pickup_location": "选择取吸头位置", + "skip": "跳过", + "skip_to_next_step": "跳到下一步", + "skip_to_next_step_new_tips": "使用新吸头跳到下一步", + "skip_to_next_step_same_tips": "使用相同吸头跳到下一步", + "stand_back": "请远离,工作站正在运行", + "stand_back_picking_up_tips": "请远离,正在拾取吸头", + "stand_back_resuming": "请远离,正在恢复当前步骤", + "stand_back_retrying": "请远离,正在重试失败步骤", + "stand_back_skipping_to_next_step": "请远离,正在跳到下一步骤", + "tip_drop_failed": "丢弃吸头失败", + "tip_not_detected": "未检测到吸头", + "view_error_details": "查看错误详情", + "view_recovery_options": "查看恢复选项", + "you_can_still_drop_tips": "在继续选择吸头之前,您仍然可以丢弃移液器上现存的吸头。", + "you_may_want_to_remove": "在协议中再次使用之前,您可能需要从{{mount}}移液器上移除吸头。" +} diff --git a/app/src/assets/localization/zh/firmware_update.json b/app/src/assets/localization/zh/firmware_update.json new file mode 100644 index 00000000000..efed676a952 --- /dev/null +++ b/app/src/assets/localization/zh/firmware_update.json @@ -0,0 +1,17 @@ +{ + "firmware_out_of_date": "用于{{mount}}{{instrument}}的固件已过期。在运行使用此设备的协议之前,请更新该固件。", + "gantry_x": "龙门架X轴", + "gantry_y": "龙门架Y轴", + "gripper": "转板抓手", + "head": "头部组件", + "hepa_uv": "HEPA/UV模块", + "pipette_left": "左侧移液器", + "pipette_right": "右侧移液器", + "ready_to_use": "您的{{instrument}}已经准备就绪!", + "rear_panel": "后置面板", + "successful_update": "更新成功!", + "update_failed": "更新失败", + "update_firmware": "更新固件", + "update_needed": "需要更新设备固件", + "updating_firmware": "正在更新{{subsystem}}固件..." +} diff --git a/app/src/assets/localization/zh/gripper_wizard_flows.json b/app/src/assets/localization/zh/gripper_wizard_flows.json new file mode 100644 index 00000000000..6617e15d83a --- /dev/null +++ b/app/src/assets/localization/zh/gripper_wizard_flows.json @@ -0,0 +1,39 @@ +{ + "are_you_sure_exit": "在完成{{flow}}之前,您确定要退出吗?", + "attach_gripper": "安装转板抓手", + "attached_gripper_and_screw_in": "将转板抓手对准接口并压紧固定抓手,以确保安全连接。首先拧紧上方螺丝,接着拧紧下方螺丝。然后轻轻拉动,测试抓手是否稳固安装。", + "before_you_begin": "开始之前", + "begin_calibration": "开始校准", + "calibrate_gripper": "校准转板抓手", + "calibration_pin": "校准钉", + "calibration_pin_touching": "校准钉将触碰甲板{{slot}}中的校准块,以确定其精确位置。", + "complete_calibration": "完成校准", + "continue": "继续", + "continue_calibration": "继续校准", + "detach_gripper": "卸下转板抓手", + "firmware_updating": "需要固件更新,设备正在更新中...", + "firmware_up_to_date": "固件已为最新版本。", + "get_started": "开始操作", + "gripper_calibration": "转板抓手校准", + "gripper_recalibration": "转板抓手重新校准", + "gripper_successfully_attached": "转板抓手已成功安装", + "hex_screwdriver": "2.5mm 六角螺丝刀", + "hold_gripper_and_loosen_screws": "用手扶住转板抓手,首先松开上方螺丝,再松开下方螺丝。(螺丝固定于抓手上,不会脱落。)之后小心卸下抓手。", + "insert_pin_into_front_jaw": "将校准钉插入前夹爪", + "insert_pin_into_rear_jaw": "将校准钉插入后夹爪", + "move_gantry_to_front": "将龙门架移至前端", + "move_pin_from_front_to_rear_jaw": "从前夹爪上取下校准钉并装到后夹爪上。", + "move_pin_from_rear_jaw_to_storage": "从后夹爪上取下校准钉并放回其存放位置。", + "move_pin_from_storage_to_front_jaw": "从存放位置取下校准钉,利用磁性将其放到前夹爪下方的孔洞中。", + "progress_will_be_lost": "{{flow}}的进度将丢失", + "provided_with_robot_use_right_size": "随工作站提供。使用非标准尺寸可能导致仪器螺丝损坏。", + "remove_calibration_pin": "卸下校准钉", + "remove_labware_to_get_started_attaching": "开始前,请清空甲板,移除所有实验器材,以便于安装和校准。同时根据屏幕提示,准备所需工具。校准钉随转板抓手附带,应存放于转板抓手右侧上方。", + "remove_labware_to_get_started_detaching": "开始前,请移除甲板上的所有耗材,并清理工作区,以便于拆卸操作。同时根据屏幕提示,准备相关工具。", + "remove_labware_to_get_started_recalibrating": "开始前,请移除甲板上的所有耗材,并清理工作区,以便于校准。同时根据屏幕提示,准备相关工具。校准钉随转板抓手附带,应存放在转板抓手右侧上方。", + "remove_probe": "解锁校准探头,从移液器喷嘴卸下,并归位存放。", + "return_pin_error": "退出前,请务必将校准钉放回存放位置。 {{error}}", + "stand_back_gripper_is_calibrating": "请远离,转板抓手正在进行校准", + "try_again": "重试", + "unable_to_detect_gripper": "未能检测到转板抓手" +} diff --git a/app/src/assets/localization/zh/heater_shaker.json b/app/src/assets/localization/zh/heater_shaker.json new file mode 100644 index 00000000000..249f1cc6138 --- /dev/null +++ b/app/src/assets/localization/zh/heater_shaker.json @@ -0,0 +1,48 @@ +{ + "back": "返回", + "cannot_open_latch": "模块震荡混匀期间闩锁不能打开", + "cannot_shake": "模块闩锁打开时无法执行震荡混匀命令", + "close_labware_latch": "关闭耗材闩锁", + "close_latch": "关闭闩锁", + "closed_and_locked": "关闭并锁定", + "closed": "已关闭", + "closing": "正在关闭", + "complete": "完成", + "confirm_attachment": "确认已连接", + "confirm_heater_shaker_modal_attachment": "确认热震荡模块已连接", + "continue_shaking_protocol_start_prompt": "协议启动时是否继续执行震荡混匀命令?", + "deactivate_heater": "停止加热", + "deactivate_shaker": "停止震荡混匀", + "deactivate": "停用", + "heater_shaker_in_slot": "在继续前,请在板位{{slotName}}中安装{{moduleName}}", + "heater_shaker_is_shaking": "热震荡模块当前正在震荡混匀", + "keep_shaking_start_run": "继续震荡混匀并开始运行", + "labware_latch": "耗材闩锁", + "labware": "耗材", + "min_max_rpm": "{{min}}-{{max}}rpm", + "module_anchors_extended": "运行开始前,应将模块下方的固定位的漏丝拧紧,确保模块稳固跟甲板结合", + "module_in_slot": "{{moduleName}}位于板位{{slotName}}槽中", + "module_should_have_anchors": "模块应将两个固定锚完全伸出,以确保稳固地连接到甲板上", + "open_labware_latch": "打开耗材闩锁", + "open_latch": "打开闩锁", + "open": "打开", + "opening": "正在打开", + "proceed_to_run": "继续运行", + "set_shake_speed": "设置震荡混匀速度", + "set_temperature": "设置模块温度", + "shake_speed": "震荡混匀速度", + "show_attachment_instructions": "显示固定操作安装说明", + "stop_shaking_start_run": "停止震荡混匀并开始运行", + "stop_shaking": "停止震荡混匀", + "t10_torx_screwdriver": "{{name}}型螺丝刀", + "t10_torx_screwdriver_subtitle": "热震荡模块附带。使用其他尺寸可能会损坏模块螺丝", + "test_shake_banner_information": "测试震荡混匀功能前,如果想往热震荡模块转移耗材,需要在控制页面控制模块开启闩锁", + "test_shake_banner_labware_information": "测试震荡混匀功能前,如果想往热震荡模块转移{{labware}},需要控制模块闩锁", + "test_shake_slideout_banner_info": "测试震荡混匀功能前,如果想往热震荡模块转移耗材,需要在控制页面控制模块开启闩锁", + "test_shake_troubleshooting_slideout_description": "请重新查看模块固定安装及其适配器安装相关说明", + "test_shake": "测试震荡混匀", + "thermal_adapter_attached_to_module": "适配器应已连接到模块上", + "troubleshoot_step_1": "返回步骤1查看模块固定安装相关说明", + "troubleshoot_step_3": "返回步骤3查看模块适配器安装相关说明", + "troubleshooting": "故障排除" +} diff --git a/app/src/assets/localization/zh/incompatible_modules.json b/app/src/assets/localization/zh/incompatible_modules.json new file mode 100644 index 00000000000..7e6da2f253e --- /dev/null +++ b/app/src/assets/localization/zh/incompatible_modules.json @@ -0,0 +1,7 @@ +{ + "incompatible_modules_attached": "检测到不适用模块,", + "remove_before_running_protocol": "运行协议前请移除以下硬件:", + "needs_your_assistance": "{{robot_name}}需要您的协助", + "remove_before_using": "使用此工作站前,请移除不适用模块.", + "is_not_compatible": "{{module_name}}不适用于{{robot_type}}," +} diff --git a/app/src/assets/localization/zh/index.ts b/app/src/assets/localization/zh/index.ts new file mode 100644 index 00000000000..5cb1ab2d10b --- /dev/null +++ b/app/src/assets/localization/zh/index.ts @@ -0,0 +1,63 @@ +import shared from './shared.json' +import anonymous from './anonymous.json' +import app_settings from './app_settings.json' +import branded from './branded.json' +import change_pipette from './change_pipette.json' +import protocol_command_text from './protocol_command_text.json' +import device_details from './device_details.json' +import device_settings from './device_settings.json' +import devices_landing from './devices_landing.json' +import drop_tip_wizard from './drop_tip_wizard.json' +import firmware_update from './firmware_update.json' +import gripper_wizard_flows from './gripper_wizard_flows.json' +import heater_shaker from './heater_shaker.json' +import instruments_dashboard from './instruments_dashboard.json' +import labware_details from './labware_details.json' +import labware_landing from './labware_landing.json' +import labware_position_check from './labware_position_check.json' +import module_wizard_flows from './module_wizard_flows.json' +import pipette_wizard_flows from './pipette_wizard_flows.json' +import protocol_details from './protocol_details.json' +import protocol_info from './protocol_info.json' +import protocol_list from './protocol_list.json' +import protocol_setup from './protocol_setup.json' +import quick_transfer from './quick_transfer.json' +import robot_calibration from './robot_calibration.json' +import robot_controls from './robot_controls.json' +import run_details from './run_details.json' +import top_navigation from './top_navigation.json' +import error_recovery from './error_recovery.json' +import incompatible_modules from './incompatible_modules.json' + +export const zh = { + shared, + anonymous, + app_settings, + branded, + change_pipette, + protocol_command_text, + device_details, + device_settings, + devices_landing, + drop_tip_wizard, + firmware_update, + gripper_wizard_flows, + heater_shaker, + instruments_dashboard, + labware_details, + labware_landing, + labware_position_check, + module_wizard_flows, + pipette_wizard_flows, + protocol_details, + protocol_info, + protocol_list, + protocol_setup, + quick_transfer, + robot_calibration, + robot_controls, + run_details, + top_navigation, + error_recovery, + incompatible_modules, +} diff --git a/app/src/assets/localization/zh/instruments_dashboard.json b/app/src/assets/localization/zh/instruments_dashboard.json new file mode 100644 index 00000000000..f8b6c4f7c29 --- /dev/null +++ b/app/src/assets/localization/zh/instruments_dashboard.json @@ -0,0 +1,10 @@ +{ + "calibrate": "校准", + "detach": "卸载", + "firmware_version": "固件版本", + "last_calibrated": "上次校准", + "no_cal_data": "无校准数据", + "pipette_calibrations_differ": "建议重新校准移液器 已连接的移液器校准数据差异很大。正确校准时,这些数据应该近似。", + "recalibrate": "重新校准", + "serial_number": "序列号" +} diff --git a/app/src/assets/localization/zh/labware_details.json b/app/src/assets/localization/zh/labware_details.json new file mode 100644 index 00000000000..ba1183c2ea4 --- /dev/null +++ b/app/src/assets/localization/zh/labware_details.json @@ -0,0 +1,33 @@ +{ + "all": "全部", + "count": "数量", + "depth": "深度", + "diameter": "直径", + "flat": "平底", + "footprint": "占用空间 (mm)", + "generic": "通用型", + "height": "高度", + "length": "长度", + "manufacturer_number": "制造商/目录编号", + "manufacturer": "制造商", + "max_volume": "最大容量", + "measurements": "尺寸 (mm)", + "na": "不适用", + "shape": "形状", + "spacing": "间距 (mm)", + "tip": "吸头", + "total_length": "总长度", + "tube": "离心管", + "u": "U型底", + "v": "V型底", + "various": "多种", + "well_count": "孔数", + "well": "孔", + "width": "宽度", + "x_offset": "X-初始位置", + "x_size": "X-尺寸", + "x_spacing": "X-间距", + "y_offset": "Y-初始位置", + "y_size": "Y-尺寸", + "y_spacing": "Y-间距" +} diff --git a/app/src/assets/localization/zh/labware_landing.json b/app/src/assets/localization/zh/labware_landing.json new file mode 100644 index 00000000000..386114541f3 --- /dev/null +++ b/app/src/assets/localization/zh/labware_landing.json @@ -0,0 +1,28 @@ +{ + "api_name": "API 名称", + "cancel": "取消", + "cannot-run-python-missing-labware": "工作站缺少耗材定义,无法运行Python协议。", + "category": "类别", + "choose_file_to_upload": "或从您的计算机中选择文件上传。", + "choose_file": "选择文件", + "copied": "已复制!", + "create_new_def": "创建新的自定义耗材", + "custom_def": "自定义耗材", + "date_added": "添加日期", + "def_moved_to_trash": "该耗材将被转移到这台电脑的回收站,可能无法恢复。", + "delete_this_labware": "删除此耗材?", + "delete": "删除", + "duplicate_labware_def": "复制耗材", + "error_importing_file": "{{filename}}导入错误。", + "go_to_def": "前往耗材页面", + "import_custom_def": "导入自定义耗材", + "import": "导入", + "imported": "{{filename}}已导入。", + "invalid_labware_def": "无效耗材", + "labware": "耗材", + "last_updated": "最近更新", + "open_labware_creator": "打开耗材创建工具", + "show_in_folder": "在文件夹中显示", + "unable_to_upload": "无法上传文件", + "yes_delete_def": "是的,删除耗材" +} diff --git a/app/src/assets/localization/zh/labware_position_check.json b/app/src/assets/localization/zh/labware_position_check.json new file mode 100644 index 00000000000..fb92623de2e --- /dev/null +++ b/app/src/assets/localization/zh/labware_position_check.json @@ -0,0 +1,116 @@ +{ + "adapter_in_mod_in_slot": "{{slot}}中{{module}}上的{{adapter}}", + "adapter_in_slot": "{{slot}}上的{{adapter}}", + "adapter_in_tc": "{{module}}上的{{adapter}}", + "all_modules_and_labware_from_protocol": "{{protocol_name}}协议中使用的所有模块与耗材 ", + "applied_offset_data": "已应用的耗材校准数据", + "apply_offset_data": "应用耗材校准数据", + "apply_offsets": "应用校准数据", + "attach_probe": "安装校准探头", + "backmost": "最靠后的", + "calibration_probe": "校准探头", + "check_item_in_location": "检查{{location}}上的{{item}}", + "check_labware_in_slot_title": "检查板位{{slot}}中的耗材{{labware_display_name}}", + "check_remaining_labware_with_primary_pipette_section": "使用{{primary_mount}}移液器和吸头检查剩余耗材", + "check_tip_location": "A1的吸头尖端", + "check_well_location": "耗材上的A1孔", + "clear_all_slots": "清空甲板上所有的耗材,模块原位保留", + "clear_all_slots_odd": "清空甲板上所有的耗材及模块", + "cli_ssh": "命令行界面 (SSH)", + "close_and_apply_offset_data": "关闭并保存耗材校准数据", + "confirm_detached": "确认移除", + "confirm_pick_up_tip_modal_title": "移液器是否成功拾取了吸头?", + "confirm_pick_up_tip_modal_try_again_text": "否,重试", + "confirm_position_and_move": "确认位置,移动到板位{{next_slot}}", + "confirm_position_and_pick_up_tip": "确认位置,取吸头", + "confirm_position_and_return_tip": "确认位置,将吸头返回至板位{{next_slot}}并复位", + "detach_probe": "移除校准探头", + "ensure_nozzle_position_odd": "请检查并确认{{tip_type}}位于{{item_location}}正上方并水平对齐。如果位置不正确,请点击移动移液器,然后微调移液器直至完全对齐。", + "ensure_nozzle_position_desktop": "请检查并确认{{tip_type}}位于{{item_location}}正上方并水平对齐。如果位置不正确,请使用下方的控制按键或键盘微调移液器直至完全对齐。", + "exit_screen_confirm_exit": "不保存耗材校准数据并退出", + "exit_screen_go_back": "返回耗材位置校准", + "exit_screen_subtitle": "如果您现在退出,所有耗材校准数据都将不保留,且无法恢复。", + "exit_screen_title": "确定要在完成耗材位置校准前退出?", + "get_labware_offset_data": "获取耗材校准数据", + "install_probe": "从存储位置取出校准探头,将探头的锁套旋钮按顺时针方向拧松。对准图示位置,将校准探头向上轻推并压到顶部,使探头在{{location}}移液器吸嘴上压紧。随后将锁套旋钮按逆时针方向拧紧,并轻拉确认是否固定稳妥。", + "jog_controls_adjustment": "需要进行调整吗?", + "jupyter_notebook": "Jupyter Notebook", + "labware_display_location_text": "甲板板位{{slot}}", + "labware_offset_data": "耗材校准数据", + "labware_offset": "耗材校准数据", + "labware_offsets_deleted_warning": "一旦开始耗材位置校准,之前创建的耗材校准数据将会丢失。", + "labware_offsets_summary_labware": "耗材", + "labware_offsets_summary_location": "位置", + "labware_offsets_summary_offset": "耗材校准数据", + "labware_offsets_summary_title": "将应用于本次运行的耗材校准数据", + "labware_position_check_description": "耗材位置校准是一个引导式工作流程,为了提高实验中移液器的位置精确度,它会检查甲板上的每一个耗材位置。首先检查吸头盒,然后检查协议中使用到的其它所有耗材。", + "labware_position_check_overview": "耗材位置校准概览", + "labware_position_check_title": "耗材位置校准", + "labware_step_detail_labware_plural": "吸头应位于 {{labware_name}} 第一列正上方,居中对齐,并且与耗材顶部水平对齐。", + "labware_step_detail_labware": "吸头应位于 {{labware_name}} 的A1孔正上方,居中对齐,并且与耗材顶部水平对齐。", + "labware_step_detail_link": "查看如何判断移液器是否居中", + "labware_step_detail_modal_heading": "如何判断移液器是否居中且水平对齐", + "labware_step_detail_modal_nozzle_image_1_text": "从正前方看,似乎已经居中...", + "labware_step_detail_modal_nozzle_image_2_nozzle_text": "移液器吸嘴未居中", + "labware_step_detail_modal_nozzle_image_2_text": "...但从侧面看,需要调整", + "labware_step_detail_modal_nozzle_or_tip_image_1_text": "从俯视角度看,似乎是水平的...", + "labware_step_detail_modal_nozzle_or_tip_image_2_nozzle_text": "移液器吸嘴不水平", + "labware_step_detail_modal_nozzle_or_tip_image_2_text": "...但从水平高度看,需要调整", + "labware_step_detail_modal_nozzle_or_tip_image_3_text": "如遇觉得难以判断,请在吸嘴与吸头之间放入一张常规纸张。当这张纸能刚好卡在两者之间时,可确认高度位置。", + "labware_step_detail_modal_nozzle_or_tip": "为确保吸嘴或吸头与耗材顶部水平对齐,请水平直视进行判断,或在吸嘴与吸头间插入一张纸片辅助判断。", + "labware_step_detail_modal_nozzle": "为确保移液器吸嘴完全居中,请额外从OT-2的另一侧进行检查。", + "labware_step_detail_tiprack_plural": "移液器吸嘴应位于{{tiprack_name}}第一列正上方并居中对齐,并且与吸头顶部水平对齐。", + "labware_step_detail_tiprack": "移液器吸嘴应居中于{{tiprack_name}}的A1位置上方,并且与吸头顶部水平对齐。", + "labware": "耗材", + "learn_more": "了解更多", + "location": "位置", + "lpc_complete_summary_screen_heading": "耗材位置校准完成", + "module_display_location_text": "{{moduleName}}位于甲板板位{{slot}}", + "module_in_slot": "{{module}}位于板位{{slot}}", + "move_pipette": "移动移液器", + "move_to_a1_position": "将移液器移到A1位置并对齐", + "moving_to_slot_title": "正在移动到板位{{slot}}", + "new_labware_offset_data": "新的耗材校准数据", + "ninety_six_probe_location": "A1(左上角)", + "no_labware_offsets": "无耗材校准数据", + "no_offset_data_available": "没有可用的耗材校准数据", + "no_offset_data_on_robot": "这轮运行中此工作站没有可用的耗材校准数据。", + "no_offset_data": "没有可用的校准数据", + "offsets": "校准数据", + "pick_up_tip_from_rack_in_location": "从位于{{location}}的吸头盒上拾取吸头", + "picking_up_tip_title": "在板位{{slot}}拾取吸头", + "pipette_nozzle": "离您最远的移液器吸嘴", + "place_a_full_tip_rack_in_location": "将装满吸头的{{tip_rack}}放入{{location}}", + "place_labware_in_adapter_in_location": "在{{location}}先放置{{adapter}},再放置{{labware}}", + "place_labware_in_location": "将{{labware}}放入{{location}}", + "place_modules": "在甲板上放置模块", + "place_previous_tip_rack_in_location": "将之前使用的{{tip_rack}}放回{{location}}。移液器将把吸头放回原来的位置。", + "position_check_description": "耗材位置校准是一种工作引导流程,旨在对协议中用到的每个耗材在甲板上的具体位置做进一步确认。当检查耗材时,OT-2的移液器吸嘴或连接的吸头将停在A1孔的正中心。如果吸嘴或吸头未居中,您可以用OT-2的调整面板进行调整。此耗材校准数据将全面应用。校准精确度为0.1mm,可调方向包括X、Y和/或Z。", + "prepare_item_in_location": "在{{location}}准备{{item}}", + "primary_pipette_tipracks_section": "使用{{primary_mount}}移液器检查吸头盒并拾取吸头", + "remove_calibration_probe": "移除校准探头", + "remove_probe": "将校准探头解锁,将其从吸嘴上拆下,并放回存储位置。", + "remove_probe_before_exit": "退出前请移除校准探头", + "return_tip_rack_to_location": "将吸头盒放回{{location}}", + "return_tip_section": "放回吸头", + "returning_tip_title": "正在板位{{slot}}放回吸头", + "reveal_jog_controls": "显示调整面板", + "robot_has_no_offsets_from_previous_runs": "耗材校准数据引用自之前运行的协议,以节省您的时间。如果本协议中的所有耗材已在之前的运行中检查过,这些数据将应用于本次运行。 您可以使用耗材位置校准程序的后续步骤来添加耗材校准数据。", + "robot_has_offsets_from_previous_runs": "此工作站具有本协议中所用耗材的校准数据。如果您应用了这些校准数据,仍可通过耗材位置校准程序进行调整。", + "robot_in_motion": "工作站正在运行,请远离。", + "run_labware_position_check": "运行耗材位置校准程序", + "run": "运行", + "secondary_pipette_tipracks_section": "使用{{secondary_mount}}移液器检查吸头盒", + "see_how_offsets_work": "了解耗材校准的工作原理", + "slot_location": "板位位置", + "slot_name": "板位{{slotName}}", + "slot": "板位{{slotName}}", + "start_position_check": "开始耗材位置校准程序,移至板位{{initial_labware_slot}}", + "stored_offset_data": "应用已存储的耗材校准数据?", + "stored_offsets_for_this_protocol": "适用于本协议的已存储耗材校准数据", + "table_view": "表格视图", + "tip_rack": "吸头盒", + "view_current_offsets": "查看当前校准数据", + "view_data": "查看数据", + "what_is_labware_offset_data": "什么是耗材校准数据?" +} diff --git a/app/src/assets/localization/zh/module_wizard_flows.json b/app/src/assets/localization/zh/module_wizard_flows.json new file mode 100644 index 00000000000..b1cd0b086d6 --- /dev/null +++ b/app/src/assets/localization/zh/module_wizard_flows.json @@ -0,0 +1,47 @@ +{ + "attach_probe": "将校准探头安装到移液器", + "begin_calibration": "开始校准", + "calibrate_pipette": "在进行模块校准之前,请先校准移液器", + "calibrate": "校准", + "calibration_adapter_heatershaker": "校准适配器", + "calibration_adapter_temperature": "校准适配器", + "calibration_adapter_thermocycler": "校准适配器", + "calibration_probe_touching_thermocycler": "校准探头将接触探测热循环仪的校准方块,以确定其确切位置", + "calibration_probe_touching": "校准探头将接触探测{{slotNumber}}板位中{{module}}的校准方块,以确定其确切位置", + "calibration_probe": "从存储位置取出校准探头,将探头的锁套旋钮按顺时针方向拧松。对准图示位置,将校准探头向上轻推并压到顶部。随后将锁套旋钮按逆时针方向拧紧,并轻拉确认是否固定稳妥。", + "calibration": "{{module}}校准", + "checking_firmware": "检查{{module}}固件", + "complete_calibration": "完成校准", + "confirm_location": "确认位置", + "confirm_placement": "确认已放置", + "detach_probe_description": "解锁校准探头,将其从吸嘴上卸下并放回原储存位置。", + "detach_probe": "卸下移液器校准探头", + "error_during_calibration": "校准过程中出现错误", + "error_prepping_module": "模块校准出错", + "exit": "退出", + "firmware_up_to_date": "{{module}}固件已是最新版本。", + "firmware_updated": "{{module}}固件已更新!", + "install_adapter": "将校准适配器放置在{{module}}中", + "install_calibration_adapter": "安装校准适配器", + "location_occupied": "当前甲板配置中,在此处的硬件为{{fixture}}", + "module_calibrating": "{{moduleName}}正在校准中,请远离", + "module_calibration": "模块校准", + "module_heating_or_cooling": "模块正在升降温时无法进行模块校准", + "module_secured": "模块必须完全固定在其托架中,然后再安装到甲板对应板位。", + "module_too_hot": "模块温度过高,无法进行模块校准", + "move_gantry_to_front": "将龙门架移至前端", + "next": "下一步", + "pipette_probe": "移液器校准探头", + "place_flush_heater_shaker": "将适配器水平放到模块上。使用热震荡模块专用螺丝和 T10 Torx 螺丝刀将适配器固定到模块上。", + "place_flush_thermocycler": "确保热循环仪盖子已打开,并将适配器水平放置到模块上,即通常放置pcr板的位置。", + "place_flush": "将适配器水平放到模块上。", + "prepping_module": "正在准备{{module}}进行模块校准", + "recalibrate": "重新校准", + "select_location": "选择模块放置位置", + "select_the_slot": "请在右侧的甲板图中选择放置了{{module}}的板位。请确认所选择位置的正确性以确保顺利完成校准。", + "slot_unavailable": "板位不可用", + "stand_back_robot_in_motion": "工作站正在运行,请远离", + "stand_back": "正在进行校准,请远离", + "start_setup": "开始设置", + "successfully_calibrated": "{{module}}已成功校准" +} diff --git a/app/src/assets/localization/zh/pipette_wizard_flows.json b/app/src/assets/localization/zh/pipette_wizard_flows.json new file mode 100644 index 00000000000..1e75fe6223d --- /dev/null +++ b/app/src/assets/localization/zh/pipette_wizard_flows.json @@ -0,0 +1,90 @@ +{ + "align_the_connector": "对准对接孔,将移液器安装到工作站上。使用六角螺丝刀拧紧螺丝以固定移液器。然后手动检查其是否已完全固定。", + "all_pipette_detached": "所有移液器已成功卸下", + "are_you_sure_exit": "您确定要在完成{{flow}}之前退出吗?", + "attach_96_channel_plus_detach": "卸下{{pipetteName}}并安装96通道移液器", + "attach_96_channel": "安装96通道移液器", + "attach_mounting_plate_instructions": "对准对接孔,将移液器安装到工作站上。为了准确对齐,您可能需要调整右侧移液器支架的位置。", + "attach_mounting_plate": "安装固定板", + "attach_pip": "安装移液器", + "attach_pipette": "安装{{mount}}移液器", + "attach_probe": "安装校准探头", + "attach": "正在安装移液器", + "backmost": "最后面的", + "before_you_begin": "开始之前", + "begin_calibration": "开始校准", + "cal_pipette": "校准移液器", + "calibrate_96_channel": "校准96通道移液器", + "calibrate_pipette": "校准{{mount}}移液器", + "calibration_probe_touching": "校准探头将在甲板位{{slotNumber}}中的校准方框侧面进行接触,以确定其精确位置。", + "cancel_attachment": "取消安装", + "cancel_detachment": "取消卸下", + "choose_pipette": "选择要安装的移液器", + "complete_cal": "完成校准", + "connect_96_channel": "连接并安装96通道移液器", + "connect_and_secure_pipette": "连接并固定移液器", + "continue": "继续", + "critical_unskippable_step": "这是关键步骤,不应跳过", + "detach_96_attach_mount": "卸下96通道移液器并安装{{mount}}移液器", + "detach_96_channel": "卸下96通道移液器", + "detach_and_reattach": "卸下并重新安装移液器", + "detach_and_retry": "卸下并重试", + "detach_mount_attach_96": "卸下{{mount}}移液器并安装96通道移液器", + "detach_mounting_plate_instructions": "抓住板子,防止其掉落。拧开移液器固定板的销钉。", + "detach_next_pipette": "卸下下一个移液器", + "detach_pipette_to_attach_96": "卸下{{pipetteName}}并安装96通道移液器", + "detach_pipette": "卸下{{mount}}移液器", + "detach_pipettes_attach_96": "卸下移液器并安装96通道移液器", + "detach_z_axis_screw_again": "在安装96通道移液器前,先拧开Z轴螺丝。", + "detach": "正在卸下移液器", + "exit_cal": "退出校准", + "firmware_updating": "需要固件更新,仪器正在更新中...", + "firmware_up_to_date": "已是最新版本。", + "gantry_empty_for_96_channel_success": "现在两个移液器支架都为空,您可以开始进行96通道移液器的安装。", + "get_started_detach": "开始前,请移除甲板上的实验耗材,清理工作区以便卸载。同时准备好屏幕所示的所需设备。", + "grab_screwdriver": "保持原位不动,用2.5毫米螺丝刀,按照引导动画所示拧紧螺丝。在继续操作前,手动测试移液器安装和固定情况。", + "hold_and_loosen": "用手扶住移液器并拧松移液器螺丝。(螺丝是固定的,不会与移液器分离。)然后小心地卸下移液器。", + "hold_pipette_carefully": "用手扶住移液器防止掉落。对准对接孔,安装移液器。使用螺丝刀拧紧前面的四个螺丝,确保稳固连接。", + "how_to_reattach": "将右侧移液器支架推到Z轴的顶部。然后拧紧移液器支架右上方的固定螺丝。拧紧固定螺丝后,右侧支架应不能再自由上下移动。", + "install_probe": "从存放位置取出校准探头。确保其锁套旋钮已拧松。将校准探头对准移液器{{location}}位置,然后向上轻推并压到顶部。拧紧锁套旋钮。用手测试校准探头是否已固定。", + "loose_detach": "拧松螺丝并卸下", + "move_gantry_to_front": "将龙门架移至前方", + "must_detach_mounting_plate": "在使用其他移液器之前,您必须卸下安装板并重新连接移液器支架z轴板。我们不建议在完成前退出此过程。", + "name_and_volume_detected": "检测到{{name}}移液器", + "next": "下一步", + "ninety_six_channel": "{{ninetySix}}通道移液器", + "ninety_six_detached_success": "{{pipetteName}}移液器成功卸下", + "ninety_six_probe_location": "A1(左后方)", + "pip_cal_failed": "移液器校准失败", + "pip_cal_success": "{{pipetteName}}校准成功", + "pip_recal_success": "{{pipetteName}}重新校准成功", + "pipette_attached": "{{pipetteName}}成功安装", + "pipette_calibrating": "请远离,{{pipetteName}}正在校准", + "pipette_calibration": "移液器校准", + "pipette_detached": "移液器成功卸下", + "pipette_failed_to_attach": "无法检测到移液器", + "pipette_failed_to_detach": "{{pipetteName}}仍未卸下", + "pipette_heavy": "96通道移液器较重({{weight}})。如有需要,可以请其他人员帮忙。", + "please_install_correct_pip": "请改用{{pipetteName}}", + "progress_will_be_lost": "{{flow}}的进度将会丢失", + "reattach_carriage": "重新连接Z轴板", + "recalibrate_pipette": "重新校准{{mount}}移液器", + "remove_cal_probe": "移除校准探头", + "remove_labware_to_get_started": "开始前,请清除甲板上的实验耗材,清理工作区,以便校准。同时收集屏幕显示的所需设备。校准探头随工作站提供,应存放在工作站的右前方支柱上。", + "remove_labware": "开始前,请清除甲板上的实验耗材,清理工作区,以便校准。同时收集屏幕显示的所需设备。校准探头随工作站提供,应存放在工作站的右前方支柱上。", + "remove_probe": "拧松校准探头,将其从喷嘴上拆下,并放回存储位置。", + "replace_pipette": "更换{{mount}}移液器", + "return_probe_error": "退出前,请将校准探头放回其存放位置。 {{error}}", + "single_mount_attached_error": "当此为96通道流程时,请选择单支架移液器", + "single_or_8_channel": "{{single}}或{{eight}}通道移液器", + "stand_back": "请远离,工作站正在移动", + "try_again": "再试一次", + "unable_to_detect_probe": "无法检测到校准探头", + "unscrew_and_detach": "拧松螺丝并卸下安装板", + "unscrew_at_top": "拧松z轴板右上角的固定螺丝。这将解除右侧移液器支架的锁定,使其能够自由上下移动。", + "unscrew_carriage": "拧松Z轴板螺丝", + "waste_chute_error": "在继续之前,请卸下外置垃圾槽。", + "waste_chute_warning": "如果安装了外置垃圾槽,请在继续之前将其卸下。", + "wrong_pip": "安装了错误的设备", + "z_axis_still_attached": "Z轴板螺丝仍然处于锁定状态" +} diff --git a/app/src/assets/localization/zh/protocol_command_text.json b/app/src/assets/localization/zh/protocol_command_text.json new file mode 100644 index 00000000000..81fff4fd220 --- /dev/null +++ b/app/src/assets/localization/zh/protocol_command_text.json @@ -0,0 +1,71 @@ +{ + "adapter_in_mod_in_slot": "{{adapter}}在{{slot}}的{{module}}上", + "adapter_in_slot": "{{adapter}}在{{slot}}上", + "aspirate": "从{{labware_location}}的{{labware}}的{{well_name}}孔中以{{flow_rate}}µL/秒的速度吸液{{volume}}µL", + "aspirate_in_place": "在原位以{{flow_rate}}µL/秒的速度吸液{{volume}}µL", + "blowout": "在{{labware_location}}的{{labware}}的{{well_name}}孔中以{{flow_rate}}µL/秒的速度排空", + "blowout_in_place": "在原位以{{flow_rate}}µL/秒的速度排空", + "closing_tc_lid": "关闭热循环仪热盖", + "comment": "解释", + "configure_for_volume": "配置{{pipette}}以吸液{{volume}}µL", + "configure_nozzle_layout": "配置{{pipette}}以使用{{amount}}个通道", + "confirm_and_resume": "确认并继续", + "deactivate_hs_shake": "停用震荡功能", + "deactivate_temperature_module": "停用温控模块", + "deactivating_hs_heater": "停用加热功能", + "deactivating_tc_block": "停用热循环仪温控功能", + "deactivating_tc_lid": "停用热循环仪热盖功能", + "degrees_c": "{{temp}}°C", + "disengaging_magnetic_module": "下降磁力架模块", + "dispense_push_out": "以{{flow_rate}}µL/秒的速度将{{volume}}µL 排液至{{labware_location}}的{{labware}}的{{well_name}}孔中,并推出{{push_out_volume}}µL", + "dispense": "以{{flow_rate}}µL/秒的速度将{{volume}}µL 排液至{{labware_location}}的{{labware}}的{{well_name}}孔中", + "dispense_in_place": "在原位以{{flow_rate}}µL/秒的速度排液{{volume}}µL", + "drop_tip": "将吸头丢入{{labware}}的{{well_name}}孔中", + "drop_tip_in_place": "在原位丢弃吸头", + "engaging_magnetic_module": "抬升磁力架模块", + "fixed_trash": "垃圾桶", + "home_gantry": "复位所有龙门架、移液器和柱塞轴", + "latching_hs_latch": "在热震荡模块上锁定实验耗材", + "module_in_slot_plural": "{{module}}", + "module_in_slot": "{{module}}在{{slot_name}}号板位", + "move_labware_manually": "手动将{{labware}}从{{old_location}}移动到{{new_location}}", + "move_labware_on": "在{{robot_name}}上移动实验耗材", + "move_labware_using_gripper": "使用转板抓手将{{labware}}从{{old_location}}移动到{{new_location}}", + "move_labware": "移动实验耗材", + "move_relative": "沿{{axis}}轴移动{{distance}}毫米", + "move_to_coordinates": "移动到 (X:{{x}}, Y:{{y}}, Z:{{z}})", + "move_to_slot": "移动到{{slot_name}}号板位", + "move_to_well": "移动到{{labware_location}}的{{labware}}的{{well_name}}孔", + "move_to_addressable_area": "移动到{{addressable_area}}", + "move_to_addressable_area_drop_tip": "移动到{{addressable_area}}", + "notes": "备注", + "off_deck": "甲板外", + "offdeck": "甲板外", + "opening_tc_lid": "打开热循环仪热盖", + "pause_on": "在{{robot_name}}上暂停", + "pause": "暂停", + "pickup_tip": "从{{labware_location}}的{{labware}}的{{well_range}}孔中拾取吸头", + "prepare_to_aspirate": "准备使用{{pipette}}吸液", + "return_tip": "将吸头返回到{{labware_location}}的{{labware}}的{{well_name}}孔中", + "save_position": "保存位置", + "set_and_await_hs_shake": "设置热震荡模块以{{rpm}}rpm 震动并等待达到该转速", + "setting_hs_temp": "将热震荡模块的目标温度设置为{{temp}}", + "setting_temperature_module_temp": "将温控模块设置为{{temp}}(四舍五入到最接近的整数)", + "setting_thermocycler_block_temp": "将热循环仪加热块温度设置为{{temp}},并在达到目标后保持{{hold_time_seconds}}秒", + "setting_thermocycler_lid_temp": "将热循环仪热盖温度设置为{{temp}}", + "slot": "板位{{slot_name}}", + "target_temperature": "目标温度", + "tc_awaiting_for_duration": "等待热循环仪程序完成", + "tc_run_profile_steps": "温度:{{celsius}}°C,时间:{{seconds}}秒", + "tc_starting_profile": "热循环仪开始进行由以下步骤组成的{{repetitions}}次循环:", + "trash_bin_in_slot": "垃圾桶在{{slot_name}}", + "touch_tip": "吸头接触内壁", + "unlatching_hs_latch": "解锁热震荡模块上的实验耗材", + "wait_for_duration": "暂停{{seconds}}秒。{{message}}", + "wait_for_resume": "暂停协议", + "waiting_for_hs_to_reach": "等待热震荡模块达到目标温度", + "waiting_for_tc_block_to_reach": "等待热循环仪加热块达到目标温度并保持指定时间", + "waiting_for_tc_lid_to_reach": "等待热循环仪热盖达到目标温度", + "waiting_to_reach_temp_module": "等待温控模块达到{{temp}}", + "waste_chute": "外置垃圾槽" +} diff --git a/app/src/assets/localization/zh/protocol_details.json b/app/src/assets/localization/zh/protocol_details.json new file mode 100644 index 00000000000..b62bc2bb89a --- /dev/null +++ b/app/src/assets/localization/zh/protocol_details.json @@ -0,0 +1,95 @@ +{ + "add_required_csv_file": "添加所需的CSV文件以继续。", + "author": "作者", + "both_mounts": "两个移液器支架", + "choices": "{{count}}个选择", + "choose_file": "选择文件", + "choose_robot_to_run": "选择要运行的工作站\n{{protocol_name}}", + "clear_and_proceed_to_setup": "清除并继续设置", + "connect_modules_to_see_controls": "连接模块以查看控制", + "connected": "已连接", + "connection_status": "连接状态", + "creation_method": "创建方法", + "csv_file_type_required": "需要CSV文件类型", + "csv_file": "CSV文件", + "csv_required": "该协议需要CSV文件才能继续。", + "deck_view": "甲板视图", + "default_value": "默认值", + "delete_protocol_perm": "{{name}}及其运行历史将被永久删除。", + "delete_protocol": "删除协议", + "delete_this_protocol": "删除此协议?", + "description": "描述", + "extension_mount": "扩展安装支架", + "file_required": "需要文件", + "gripper_pick_up_count_description": "使用转板抓手移动单个耗材的指令。", + "gripper_pick_up_count": "转板次数", + "hardware": "硬件", + "labware_name": "耗材名称", + "labware": "耗材", + "last_analyzed": "上一次分析", + "last_updated": "上一次更新", + "left_mount": "左移液器安装位", + "left_right": "左,右", + "liquid_name": "液体名称", + "liquids_not_in_protocol": "此协议未指定任何液体", + "liquids": "液体", + "listed_values_are_view_only": "列出的值仅供查看", + "location": "位置", + "modules": "模块", + "n_a": "—", + "name": "名称", + "no_available_robots_found": "未找到可用的工作站", + "no_custom_values": "未指定任何自定义值", + "no_parameters": "该协议未指定任何参数", + "no_summary": "没有为此协议指定摘要。", + "not_connected": "未连接", + "not_in_protocol": "该协议未指定{{section}}", + "num_choices": "{{num}}个选择", + "num_options": "{{num}}个选项", + "off": "关闭", + "on_off": "开,关", + "on": "开启", + "org_or_author": "组织/作者", + "parameters": "参数", + "pipette_aspirate_count_description": "每个移液器的单个吸液指令。", + "pipette_aspirate_count": "{{pipette}}吸液次数", + "pipette_dispense_count_description": "每个移液器的单个排液指令。", + "pipette_dispense_count": "{{pipette}}分液次数", + "pipette_pick_up_count_description": "每个移液器的单个拾取吸头指令。", + "pipette_pick_up_count": "{{pipette}}拾取吸头次数", + "proceed_to_setup": "继续进行设置", + "protocol_designer_version": "在线协议编辑器{{version}}", + "protocol_failed_app_analysis": "该协议在应用程序内分析失败。它可能在没有自定义软件配置的工作站上无法使用。", + "protocol_outdated_app_analysis": "该协议的分析已过期。如果您现在运行它,可能会产生不同的结果。", + "python_api_version": "Python API {{version}}", + "quantity": "数量", + "range": "范围", + "read_less": "读取更少", + "read_more": "读取更多", + "requires_csv": "需要CSV", + "requires_upload": "需要上传", + "restore_defaults": "恢复默认值", + "right_mount": "右移液器安装位", + "robot_configuration": "工作站配置", + "robot_is_busy_with_protocol": "{{robotName}}正在运行{{protocolName}},状态为{{runStatus}}。是否要清除并继续?", + "robot_is_busy": "{{robotName}}正在工作", + "robot": "工作站", + "run_protocol": "运行协议", + "select_parameters_for_robot": "选择{{robot_name}}的参数", + "send": "发送", + "sending": "发送中", + "show_in_folder": "在文件夹中显示", + "slot": "{{slotName}}号板位", + "start_setup_customize_values": "开始设置以自定义值", + "start_setup": "开始设置", + "successfully_sent": "发送成功", + "total_volume": "总体积", + "unavailable_or_busy_robot_not_listed_plural": "{{count}}台不可用或工作中的工作站未列出。", + "unavailable_or_busy_robot_not_listed": "{{count}}台不可用或工作中的工作站未列出。", + "unavailable_robot_not_listed_plural": "{{count}}台不可用的工作站未列出。", + "unavailable_robot_not_listed": "{{count}}台不可用的工作站未列出。.", + "unsuccessfully_sent": "发送失败", + "value_out_of_range": "值必须在{{min}}-{{max}}之间", + "view_run_details": "查看运行详情", + "view_unavailable_robots": "在设备页面查看不可用的工作站" +} diff --git a/app/src/assets/localization/zh/protocol_info.json b/app/src/assets/localization/zh/protocol_info.json new file mode 100644 index 00000000000..e279383c495 --- /dev/null +++ b/app/src/assets/localization/zh/protocol_info.json @@ -0,0 +1,86 @@ +{ + "all_protocols": "所有协议", + "browse_protocol_library": "打开在线协议库", + "cancel_run": "取消运行", + "choose_file": "选择文件...", + "choose_snippet_type": "根据目标执行环境选择耗材校准数据的Python代码片段。", + "continue_proceed_to_calibrate": "继续校准", + "continue_verify_calibrations": "验证移液器和耗材的校准", + "create_or_download": "创建或下载新协议", + "creation_method": "创建方法", + "custom_labware_not_supported": "工作站不支持自定义耗材", + "date_added": "添加日期", + "delete_protocol": "删除协议", + "description": "描述", + "drag_file_here": "将协议文件拖放到此处", + "error_analyzing": "尝试分析时出错:{{protocolName}}", + "error_message_no_steps": "此协议没有任何步骤——您的工作站无法执行任何操作!您的协议至少需要一个吸液/排液步骤才能正确导入", + "estimated_run_time": "预计运行时间", + "exit_modal_body": "您确定要关闭此协议吗?", + "exit_modal_exit": "是,现在关闭", + "exit_modal_go_back": "不,返回", + "exit_modal_heading": "确认关闭协议", + "failed_analysis": "分析失败", + "get_labware_offset_data": "获取耗材校准数据", + "import_a_file": "导入协议以开始", + "import_new_protocol": "导入协议", + "import": "导入", + "instrument_cal_data_title": "校准数据", + "instrument_not_attached": "未连接", + "instruments_title": "所需移液器", + "intervention_modal_learn_more": "了解更多关于用户干预的信息", + "invalid_file_type": "无效的文件类型。协议文件必须是“.py”或“.json”格式。", + "invalid_json_file": "无效的JSON文件。", + "labware_cal_description": "以耗材原点的校准数据", + "labware_legacy_definition": "不适用", + "labware_offset_data_title": "耗材校准数据", + "labware_offsets_info": "{{number}}组耗材校准数据", + "labware_position_check_complete_toast_no_offsets": "耗材位置校准完成。无新建的耗材校准数据。", + "labware_position_check_complete_toast_with_offsets_plural": "耗材位置校准完成。新建了{{count}}组耗材校准数据。", + "labware_position_check_complete_toast_with_offsets": "耗材位置校准完成。创建了{{count}}组耗材校准数据。", + "labware_title": "所需耗材", + "last_run": "上次运行", + "last_updated": "最近更新", + "launch_protocol_designer": "打开在线协议编辑器", + "manual_steps_learn_more": "了解更多关于手动步骤的信息", + "modules_title": "所需模块", + "most_recent_updates": "最新更新", + "no_history": "无运行历史", + "no_labware_offset_data": "无耗材校准数据", + "no_protocol_yet": "还没有协议?", + "nothing_here_yet": "没有可显示的协议!", + "oldest_updates": "最早的更新", + "open_a_protocol": "打开一个协议以开始", + "open_api_docs": "打开Python API文档", + "organization_and_author": "组织/作者", + "pin_protocol": "固定协议", + "pinned_protocol": "固定的协议", + "pinned_protocols": "固定的协议", + "protocol_added": "已成功接收{{protocol_name}}", + "protocol_analysis_failed": "协议分析失败", + "protocol_finishing": "在{{robot_name}}上完成协议", + "protocol_loading": "在{{robot_name}}上打开协议", + "protocol_name_title": "协议名称", + "protocol_title": "协议 -{{protocol_name}}", + "protocol_upload_failed": "协议上传失败。请修复错误后重试", + "protocols": "协议", + "quick_transfer": "快速移液", + "required_cal_data_title": "校准数据", + "required_quantity_title": "数量", + "required_type_title": "类型", + "robot_name_last_run": "{{robot_name}}的上次运行", + "robot_type_first": "{{robotType}}协议优先", + "run_again": "再次运行", + "run_protocol": "运行协议", + "run_timestamp_title": "运行时间戳", + "simulation_in_progress": "正在进行模拟", + "timestamp": "+{{index}}", + "too_many_pins_body": "要添加更多协议到您的固定列表,请先移除一个协议。", + "too_many_pins_header": "您已达到最大限额!", + "unpin_protocol": "取消固定协议", + "unpinned_protocol": "取消固定的协议", + "update_robot_for_custom_labware": "您已将自定义耗材保存到您的应用程序中,但需要更新此工作站才能将这些自定义耗材与Python协议一起使用", + "upload": "上传", + "upload_and_simulate": "打开要在{{robot_name}}上运行的协议", + "valid_file_types": "有效的文件类型:Python文件(.py)或在线协议编辑器文件(.json)" +} diff --git a/app/src/assets/localization/zh/protocol_list.json b/app/src/assets/localization/zh/protocol_list.json new file mode 100644 index 00000000000..9c2b3be0f59 --- /dev/null +++ b/app/src/assets/localization/zh/protocol_list.json @@ -0,0 +1,26 @@ +{ + "csv_file_required": "需要CSV文件进行分析。请在运行设置时添加CSV文件。", + "delete_protocol_message": " 并且其运行历史记录将被永久删除。", + "delete_this_protocol": "删除此协议?", + "edit": "编辑", + "go_to_timeline": "转到时间轴", + "last_updated_at": "更新于{{date}}", + "left_mount": "左移液器安装位", + "loading_data": "正在加载数据...", + "modules": "模块", + "no_data": "无数据", + "protocol_analysis_failure": "协议分析失败。", + "protocol_analysis_outdated": "协议分析已过期。", + "protocol_deleted": "协议已删除", + "reanalyze_or_view_error": " 重新分析 协议或查看 错误详情 ", + "reanalyze_to_view": " 重新分析 协议", + "right_mount": "右移液器安装位", + "robot": "工作站", + "send_to_robot_overflow": "发送到{{robot_display_name}}", + "send_to_robot": "将协议发送到{{robot_display_name}}", + "show_in_folder": "在文件夹中显示", + "start_setup": "开始设置", + "this_protocol_will_be_trashed": "该协议将被移至此计算机的回收站,可能无法恢复。", + "updated": "已更新", + "yes_delete_this_protocol": "是的,删除协议" +} diff --git a/app/src/assets/localization/zh/protocol_setup.json b/app/src/assets/localization/zh/protocol_setup.json new file mode 100644 index 00000000000..7e5007e8a2c --- /dev/null +++ b/app/src/assets/localization/zh/protocol_setup.json @@ -0,0 +1,279 @@ +{ + "96_mount": "左+右移液器安装位", + "action_needed": "需要操作", + "adapter_slot_location_module": "{{slotName}}号板位,{{adapterName}}在{{moduleName}}上", + "adapter_slot_location": "{{slotName}}号板位,{{adapterName}}", + "add_fixture": "将{{fixtureName}}添加到{{locationName}}", + "add_this_deck_hardware": "将此硬件添加到您的甲板配置中。它将在协议分析期间被引用。", + "add_to_slot": "添加到{{slotName}}号板位", + "additional_labware": "{{count}}个额外的耗材", + "additional_off_deck_labware": "额外的甲板外耗材", + "attach_gripper_failure_reason": "连接所需的转板抓手以继续", + "attach_gripper": "连接转板抓手", + "attach_module": "校准前连接模块", + "attach_pipette_before_module_calibration": "在进行模块校准前连接移液器", + "attach_pipette_calibration": "连接移液器以查看校准信息", + "attach_pipette_cta": "连接移液器", + "attach_pipette_failure_reason": "连接所需的移液器以继续", + "attach_pipette_tip_length_calibration": "连接移液器以查看吸头长度校准信息", + "attach": "连接", + "back_to_top": "回到顶部", + "cal_all_pip": "首先校准移液器", + "calibrate_deck_failure_reason": "校准甲板以继续", + "calibrate_deck_to_proceed_to_pipette_calibration": "校准甲板以继续进行移液器校准", + "calibrate_deck_to_proceed_to_tip_length_calibration": "校准甲板以继续进行吸头长度校准", + "calibrate_gripper_failure_reason": "校准所需的转板抓手以继续", + "calibrate_module_failure_reason": "校准所需的模块以继续", + "calibrate_now": "现在校准", + "calibrate_pipette_before_module_calibration": "在进行模块校准前校准移液器", + "calibrate_pipette_failure_reason": "校准所需的移液器以继续", + "calibrate_tiprack_failure_reason": "校准所需的吸头长度以继续", + "calibrate": "校准", + "calibrated": "已校准", + "calibration_data_not_available": "一旦运行开始,校准数据不可用", + "calibration_needed": "需要校准", + "calibration_ready": "校准就绪", + "calibration_required_attach_pipette_first": "需要校准,请先连接移液器", + "calibration_required_calibrate_pipette_first": "需要校准,请先校准移液器", + "calibration_required": "需要校准", + "calibration_status": "校准状态", + "calibration": "校准", + "cancel_and_restart_to_edit": "取消运行并重新启动设置以进行编辑", + "choose_enum": "选择{{displayName}}", + "closing": "关闭中...", + "complete_setup_before_proceeding": "完成设置后继续运行", + "configure": "配置", + "configured": "已配置", + "confirm_heater_shaker_module_modal_description": "在开始运行之前,应使模块的两个锚固件完全伸出,以确保牢固连接。导热适配器应连接到模块上。", + "confirm_heater_shaker_module_modal_title": "确认已连接热震荡模块", + "confirm_values": "确认这些值", + "connect_all_hardware": "首先连接并校准所有硬件", + "connect_all_mod": "首先连接所有模块", + "connect_modules_for_controls": "连接模块以查看控制", + "connection_info_not_available": "一旦运行开始,连接信息不可用", + "connection_status": "连接状态", + "csv_file": "CSV 文件", + "currently_configured": "当前已配置", + "currently_unavailable": "当前不可用", + "custom_values": "自定义值", + "deck_cal_description_bullet_1": "在新工作站设置期间执行甲板校准。", + "deck_cal_description_bullet_2": "如果您搬迁了工作站,请重新进行甲板校准。", + "deck_cal_description": "这测量了甲板的 X 和 Y 值相对于门架的值。甲板校准是吸头长度校准和移液器偏移校准的基础。", + "deck_calibration_title": "甲板校准(Deck Calibration)", + "deck_conflict_info_thermocycler": "通过移除位置 A1 和 B1 中的固定装置来更新甲板配置。从甲板配置中移除对应装置或更新协议。", + "deck_conflict_info": "通过移除位置 {{cutout}} 中的 {{currentFixture}} 来更新甲板配置。从甲板配置中移除对应装置或更新协议。", + "deck_conflict": "甲板位置冲突", + "deck_hardware": "甲板硬件", + "deck_map": "甲板布局图", + "default_values": "默认值", + "example": "示例", + "exit_to_deck_configuration": "退出到甲板配置", + "extension_mount": "扩展安装支架", + "extra_attention_warning_title": "在继续运行前固定耗材和模块", + "extra_module_attached": "附加额外模块", + "feedback_form_link": "请告诉我们", + "fixture_name": "装置", + "fixture": "装置", + "fixtures_connected_plural": "已连接{{count}}个装置", + "fixtures_connected": "已连接{{count}}个装置", + "get_labware_offset_data": "获取耗材校准数据", + "hardware_missing": "缺少硬件", + "heater_shaker_extra_attention": "使用闩锁控制,便于放置耗材。", + "heater_shaker_labware_list_view": "要添加耗材,请使用切换键来控制闩锁", + "how_offset_data_works": "耗材校准数据如何工作", + "initial_liquids_num_plural": "{{count}}种初始液体", + "initial_liquids_num": "{{count}}种初始液体", + "initial_location": "初始位置", + "install_modules_and_fixtures": "安装并校准所需的模块。安装所需的装置。", + "install_modules_plural": "安装所需的模块。", + "install_modules": "安装所需的模块。", + "instrument_calibrations_missing_plural": "缺少{{count}}个校准", + "instrument_calibrations_missing": "缺少{{count}}个校准", + "instruments_connected_plural": "已连接{{count}}个硬件", + "instruments_connected": "已连接{{count}}个硬件", + "instruments": "硬件", + "labware_latch_instructions": "使用闩锁控制,便于放置耗材。", + "labware_latch": "耗材闩锁", + "labware_location": "耗材位置", + "labware_name": "耗材名称", + "labware_position_check_not_available_analyzing_on_robot": "在工作站上分析协议时,耗材位置校准不可用", + "labware_position_check_not_available_empty_protocol": "耗材位置校准需要协议加载耗材和移液器", + "labware_position_check_not_available": "运行开始后,耗材位置校准不可用", + "labware_position_check_step_description": "建议的工作流程可帮助您验证每个耗材在甲板上的位置。", + "labware_position_check_step_title": "耗材位置校准", + "labware_position_check_text": "耗材位置校准流程可帮助您验证甲板上每个耗材的位置。在此位置校准过程中,您可以创建耗材校准数据,以调整工作站在 X、Y 和 Z 方向上的移动。", + "labware_position_check": "耗材位置校准", + "labware_setup_step_description": "准备好以下耗材和完整的吸头盒。若不进行耗材位置校准直接运行协议,请将耗材放置在其初始位置并固定。", + "labware_setup_step_title": "耗材", + "labware": "耗材", + "last_calibrated": "最后校准:{{date}}", + "learn_how_it_works": "了解它的工作原理", + "learn_more_about_offset_data": "了解更多关于耗材校准数据的信息", + "learn_more_about_robot_cal_link": "了解更多关于工作站校准的信息", + "learn_more": "了解更多", + "liquid_setup_step_description": "查看液体的起始位置和体积", + "liquid_setup_step_title": "液体", + "liquids_not_in_setup": "此协议未使用液体", + "liquids_not_in_the_protocol": "此协议未指定液体。", + "liquids": "液体", + "list_view": "列表视图", + "loading_data": "加载数据...", + "loading_labware_offsets": "加载耗材校准数据", + "loading_protocol_details": "加载详情...", + "location_conflict": "位置冲突", + "location": "位置", + "lpc_and_offset_data_title": "耗材位置校准和耗材校准数据", + "lpc_disabled_calibration_not_complete": "确保工作站校准完成后再运行耗材位置校准", + "lpc_disabled_modules_and_calibration_not_complete": "确保工作站校准完成并且所有模块已连接后再运行耗材位置校准", + "lpc_disabled_modules_not_connected": "确保所有模块已连接后再运行耗材位置校准", + "lpc_disabled_no_tipracks_loaded": "耗材位置校准需要在协议中加载一个吸头盒", + "lpc_disabled_no_tipracks_used": "耗材位置校准要求协议中至少有一个吸头可供使用", + "map_view": "布局视图", + "missing_gripper": "缺少转板抓手", + "missing_instruments": "缺少{{count}}个", + "missing_pipettes_plural": "缺少{{count}}个移液器", + "missing_pipettes": "缺少{{count}}个移液器", + "missing": "缺少", + "modal_instructions_title": "{{moduleName}}设置说明", + "module_connected": "已连接", + "module_disconnected": "未连接", + "module_instructions_link": "{{moduleName}}设置说明", + "module_mismatch_body": "检查连接到该工作站的模块型号是否正确", + "module_name": "模块", + "module_not_connected": "未连接", + "module_setup_step_title": "甲板硬件", + "module_slot_location": "{{slotName}}号板位,{{moduleName}}", + "module": "模块", + "modules_connected_plural": "连接了{{count}}个模块", + "modules_connected": "连接了{{count}}个模块", + "modules_setup_step_title": "模块设置", + "modules": "模块", + "mount_title": "{{mount}}安装支架:", + "mount": "{{mount}}安装支架", + "multiple_fixtures_missing": "缺少{{count}}个装置", + "multiple_modules_example": "您的协议包含两个温控模块。连接到左侧第一个端口的温控模块对应协议中的第一个温控模块,连接到下一个端口的温控模块对应协议中的第二个温控模块。如果使用集线器,遵循相同的端口排序逻辑。", + "multiple_modules_explanation": "在协议中使用多个相同类型的模块时,首先需要将协议中第一个模块连接到工作站编号最小的USB端口,然后以相同方式连接其他模块。", + "multiple_modules_help_link_title": "查看如何设置相同类型的多个模块", + "multiple_modules_learn_more": "了解更多关于使用相同类型的多个模块的信息", + "multiple_modules_missing_plural": "缺少{{count}}个模块", + "multiple_modules_modal": "设置相同类型的多个模块", + "multiple_modules": "相同类型的多个模块", + "multiple_of_most_modules": "通过以特定顺序连接和加载模块,可以在单个Python协议中使用多种模块类型。无论模块占用哪个甲板板位,工作站都将首先初始化连接到最小编号端口的匹配模块,。", + "must_have_labware_and_pip": "协议中必须加载耗材和移液器", + "n_a": "不可用", + "name": "名称", + "no_custom_values": "未指定自定义值", + "no_data": "无数据", + "no_deck_hardware_specified": "该协议中未指定任何甲板硬件。", + "no_files_found": "未找到文件", + "no_labware_offset_data": "尚无耗材校准数据", + "no_modules_or_fixtures": "该协议中未指定任何模块或装置。", + "no_modules_specified": "该协议中未指定任何模块。", + "no_modules_used_in_this_protocol": "该协议中未使用硬件", + "no_parameters_specified_in_protocol": "协议中未指定任何参数", + "no_parameters_specified": "未指定参数", + "no_tiprack_loaded": "协议中必须加载一个吸头盒", + "no_tiprack_used": "协议中必须拾取一个吸头", + "no_usb_connection_required": "无需USB连接", + "no_usb_port_yet": "尚无USB端口", + "no_usb_required": "无需USB", + "not_calibrated": "尚未校准", + "not_configured": "未配置", + "off_deck": "甲板外", + "off": "关闭", + "offset_data": "偏移校准数据", + "offsets_applied_plural": "应用了{{count}}个偏移校准数据", + "offsets_applied": "应用了{{count}}个偏移校准数据", + "on_adapter_in_mod": "在{{moduleName}}中的{{adapterName}}上", + "on_adapter": "在{{adapterName}}上", + "on_deck": "在甲板上", + "on-deck_labware": "{{count}}个在甲板上的耗材", + "on": "开启", + "opening": "打开中...", + "parameters": "参数", + "pipette_mismatch": "移液器型号不匹配。", + "pipette_missing": "移液器缺失", + "pipette_offset_cal_description_bullet_1": "首次将移液器连接到新安装支架时执行移液器偏移校准。", + "pipette_offset_cal_description_bullet_2": "在执行甲板校准后重新进行移液器偏移校准。", + "pipette_offset_cal_description_bullet_3": "对用于校准移液器的吸头执行吸头长度校准后,重新进行移液器偏移校准。", + "pipette_offset_cal_description": "这会测量移液器相对于移液器安装支架和甲板的X、Y和Z值。移液器偏移校准依赖于甲板校准和吸头长度校准。 ", + "pipette_offset_cal": "移液器偏移校准", + "placement": "放置", + "plug_in_module_to_configure": "插入{{module}}以将其添加到板位", + "plug_in_required_module_plural": "插入并启动所需模块以继续", + "plug_in_required_module": "插入并启动所需模块以继续", + "prepare_to_run": "准备运行", + "proceed_to_labware_position_check": "继续进行耗材位置校准", + "proceed_to_labware_setup_step": "继续进行耗材设置", + "proceed_to_liquid_setup_step": "继续进行液体设置", + "proceed_to_module_setup_step": "继续进行模块设置", + "proceed_to_run": "继续运行", + "protocol_analysis_failed": "协议分析失败", + "protocol_can_be_closed": "该协议现在可以关闭。", + "protocol_run_canceled": "协议运行已取消。", + "protocol_run_complete": "协议运行完成。", + "protocol_run_failed": "协议运行失败。", + "protocol_run_started": "协议运行已开始。", + "protocol_specifies": "协议指定", + "protocol_upload_revamp_feedback": "对此体验有反馈吗?", + "quantity": "数量", + "recalibrate": "重新校准", + "recalibrating_not_available": "无法重新进行吸头长度校准和耗材位置校准。", + "recalibrating_tip_length_not_available": "运行开始后无法重新校准吸头长度", + "recommended": "推荐", + "required_instrument_calibrations": "所需的硬件校准", + "required": "必需", + "required_tip_racks_title": "所需的吸头长度校准", + "reset_parameter_values_body": "这将丢弃您所做的任何更改。所有参数将恢复默认值。", + "reset_parameter_values": "重置参数值?", + "reset_setup": "重新开始设置以进行编辑", + "reset_values": "重置值", + "resolve": "解决", + "restart_setup_and_try": "重新开始设置并尝试使用不同的参数值。", + "restart_setup": "重新开始设置", + "restore_default": "恢复默认值", + "restore_defaults": "恢复默认值", + "robot_cal_description": "工作站校准用于确定其相对于甲板的位置。良好的工作站校准对于成功运行协议至关重要。工作站校准包括3个部分:甲板校准、吸头长度校准和移液器偏移校准。", + "robot_cal_help_title": "工作站校准的工作原理", + "robot_calibration_step_description_pipettes_only": "查看该协议所需的硬件和校准。", + "robot_calibration_step_description": "查看该协议所需的移液器和吸头长度校准。", + "robot_calibration_step_title": "硬件", + "run_disabled_calibration_not_complete": "确保工作站校准完成后再继续运行", + "run_disabled_modules_and_calibration_not_complete": "确保工作站校准完成并且所有模块已连接后再继续运行", + "run_disabled_modules_not_connected": "确保所有模块已连接后再继续运行", + "run_labware_position_check": "运行耗材位置校准", + "run_never_started": "运行未开始", + "run": "运行", + "secure_labware_instructions": "固定耗材说明", + "secure_labware_modal": "将耗材固定到{{name}}", + "secure": "固定", + "setup_for_run": "运行设置", + "setup_instructions": "设置说明", + "setup_is_view_only": "运行开始后设置仅供查看", + "slot_location": "{{slotName}}号板位", + "slot_number": "板位编号", + "status": "状态", + "step": "步骤{{index}}", + "there_are_no_unconfigured_modules": "没有连接{{module}}。请连接一个模块并放置在{{slot}}号板位中。", + "there_are_other_configured_modules": "已有一个{{module}}配置在不同的板位中。退出运行设置,并更新甲板配置以转到已连接的模块。或连接另一个{{module}}继续设置。", + "tip_length_cal_description_bullet": "对移液器上将会用到的每种类型的吸头执行吸头长度校准。", + "tip_length_cal_description": "这将测量吸头底部与移液器喷嘴之间的Z轴距离。如果对用于校准移液器的吸头重新进行吸头长度校准,也需要重新进行移液器偏移校准。", + "tip_length_cal_title": "吸头长度校准", + "tip_length_calibration": "吸头长度校准", + "update_deck_config": "更新甲板配置", + "update_deck": "更新甲板", + "updated": "已更新", + "usb_connected_no_port_info": "USB端口已连接", + "usb_port_connected": "USB端口{{port}}", + "usb_port_number": "USB-{{port}}", + "value_out_of_range_generic": "值必须在范围内", + "value_out_of_range": "值必须在{{min}}-{{max}}之间", + "value": "值", + "values_are_view_only": "值仅供查看", + "view_current_offsets": "查看当前偏移量", + "view_moam": "查看工作站中放置同类型模块的设置说明。", + "view_setup_instructions": "查看设置说明", + "volume": "体积", + "what_labware_offset_is": "耗材偏移校准是一种位置调整类型,用于补偿甲板上耗材整体位置的微小实际差异。耗材偏移校准数据是耗材、甲板位和工作站的特定组合。", + "with_the_chosen_value": "使用选定的值时,发生以下错误:" +} diff --git a/app/src/assets/localization/zh/quick_transfer.json b/app/src/assets/localization/zh/quick_transfer.json new file mode 100644 index 00000000000..651ace8ef4b --- /dev/null +++ b/app/src/assets/localization/zh/quick_transfer.json @@ -0,0 +1,76 @@ +{ + "add_or_remove_columns": "添加或移除列", + "add_or_remove": "添加或移除", + "advanced_settings": "高级设置", + "all": "所有实验耗材", + "always": "每次吸液前", + "aspirate_volume": "每孔吸液体积", + "aspirate_volume_µL": "每孔吸液体积(µL)", + "both_mounts": "左侧+右侧支架", + "change_tip": "更换吸头", + "character_limit_error": "字数超出限制", + "column": "列", + "columns": "列", + "create_new_transfer": "创建新的快速移液命令", + "create_transfer": "创建移液命令", + "destination": "目标", + "destination_labware": "目标实验耗材", + "dispense_volume": "每孔排液体积", + "dispense_volume_µL": "每孔排液体积(µL)", + "enter_characters": "输入最多60个字符", + "exit_quick_transfer": "退出快速移液?", + "grid": "网格", + "grids": "网格", + "learn_more": "了解更多", + "left_mount": "左侧支架", + "lose_all_progress": "您将失去所有此快速移液流程进度.", + "name_your_transfer": "为您的快速移液流程命名", + "number_wells_selected_error_learn_more": "具有多个源孔{{selectionUnits}}的快速移液是可以进行一对一或者多对多移液的(为此移液流程同样选择{{wellCount}}个目标孔位{{selectionUnits}})或进行多对一移液,即合并为单个孔位(选择1个目标孔{{selectionUnit}})。", + "number_wells_selected_error_message": "选择1个或{{wellCount}}个{{selectionUnits}}来进行此移液操作.", + "once": "在移液开始时", + "overview": "概览", + "perDest": "每个目标孔位", + "perSource": "每个源孔位", + "pipette": "移液器", + "quick_transfer_volume": "快速移液{{volume}}µL", + "right_mount": "右侧支架", + "reservoir": "储液槽", + "run_now": "立即运行", + "run_quick_transfer_now": "您想立即运行快速移液流程吗?", + "save": "保存", + "save_to_run_later": "保存您的快速移液流程以备后续运行.", + "save_for_later": "保存备用", + "source": "源", + "select_attached_pipette": "选择已连接的移液器", + "select_by": "按...选择", + "select_dest_labware": "选择目标实验耗材", + "select_dest_wells": "选择目标孔位", + "select_source_labware": "选择源实验耗材", + "select_source_wells": "选择源孔位", + "select_tip_rack": "选择吸头盒", + "set_aspirate_volume": "设置吸液体积", + "set_dispense_volume": "设置排液体积", + "set_transfer_volume": "设置移液体积", + "source_labware": "源实验耗材", + "source_labware_d2": "D2位置的源实验耗材", + "starting_well": "起始孔", + "use_deck_slots": "快速移液将使用板位B2-D2。这些板位将用于放置吸头盒、源实验耗材和目标实验耗材。请确保使用最新的甲板配置,避免碰撞。", + "tip_drop_location": "吸头丢弃位置", + "tip_management": "吸头管理", + "tip_rack": "吸头盒", + "trashBin": "垃圾桶", + "trashBin_location": "位于{{slotName}}的垃圾桶", + "tubeRack": "试管架", + "volume_per_well": "每孔体积", + "volume_per_well_µL": "每孔体积(µL)", + "value_out_of_range": "值必须在{{min}}-{{max}}之间", + "labware": "实验耗材", + "pipette_currently_attached": "快速移液移液器选项取决于当前您工作站上安装的移液器.", + "wasteChute": "外置垃圾槽", + "wasteChute_location": "位于{{slotName}}的外置垃圾槽", + "wellPlate": "孔板", + "well_selection": "孔位选择", + "well_ratio": "快速移液可以一对一或者多对多进行移液的(为此移液操作选择同样数量的{{wells}})或可以多对一,也就是合并为单孔(选择1个目标孔位)。", + "well": "孔", + "wells": "孔" +} diff --git a/app/src/assets/localization/zh/robot_calibration.json b/app/src/assets/localization/zh/robot_calibration.json new file mode 100644 index 00000000000..8f83fb649f8 --- /dev/null +++ b/app/src/assets/localization/zh/robot_calibration.json @@ -0,0 +1,131 @@ +{ + "attached_pipettes": "已连接的移液器校准", + "before_you_begin": "开始之前", + "calibrate": "校准", + "calibrate_deck": "校准甲板", + "calibrate_pipette": "校准移液器", + "calibrate_tip_length": "校准移液器的吸头长度。", + "calibrate_tip_on_block": "在校准块上校准吸头", + "calibrate_tip_on_trash": "在垃圾桶上校准吸头", + "calibrate_xy_axes": "在{{slotName}}号板位中校准x轴和y轴", + "calibrate_z_axis_on_block": "在校准块上校准z轴", + "calibrate_z_axis_on_slot": "在5号板位中校准z轴", + "calibrate_z_axis_on_trash": "在垃圾桶上校准z轴", + "calibration_complete": "校准完成", + "calibration_dashboard": "校准面板", + "calibration_health_check": "校准健康检查", + "calibration_health_check_intro_body": "校准健康检查诊断甲板、吸头长度和移液器偏移校准的问题。您将移液器移动到不同位置,这将与您现有的校准数据进行比较。如果差异很大,系统会提示您重做部分或全部校准。", + "calibration_health_check_results": "校准健康检查结果", + "calibration_recommended": "建议校准", + "calibration_status": "校准状态", + "calibration_status_description": "为了准确和精确的运动,请校准工作站的甲板、移液器偏移数据和吸头长度。", + "calibrations_complete": "校准完成!", + "change_tip_rack": "更换吸头架", + "check_tip_on_block": "在校准块上检查吸头", + "check_tip_on_trash": "在垃圾桶上检查吸头", + "check_xy_axes": "在{{slotName}}号板位中检查x轴和y轴", + "check_z_axis_on_block": "在校准块上检查z轴", + "check_z_axis_on_slot": "在5号板位上检查z轴", + "check_z_axis_on_trash": "在垃圾桶上检查z轴", + "choose_a_tip_rack": "选择一个吸头盒", + "choose_tip_rack": "选择您想要用来校准吸头长度的吸头盒。想要使用这里没有列出的吸头盒吗?请转到实验耗材>导入以添加实验耗材。", + "clear_other_slots": "清除所有其他甲板位", + "confirm_exit_before_completion": "您确定要在完成{{sessionType}}之前退出吗?", + "confirm_placement": "确认放置位置", + "confirm_tip_rack": "确认吸头盒", + "custom": "自定义", + "deck_calibration": "甲板校准", + "deck_calibration_description": "校准工作站甲板的位置。建议用于所有新工作站和搬迁后的工作站。", + "deck_calibration_error_occurred": "尝试启动甲板校准时发生错误", + "deck_calibration_failure": "无法启动甲板校准", + "deck_calibration_intro_body": "甲板校准确保位置准确性,以便您的工作站按预期移动。它将准确建立OT-2的甲板相对于龙门架的方向。", + "deck_calibration_missing": "您还没有校准甲板", + "deck_calibration_redo": "重新校准甲板", + "deck_calibration_spinner": "甲板校准正在进行{{ongoing_action}}", + "deck_invalidates_pipette_offset": "重新校准甲板将清除移液器校准数据", + "definition": "您的OT-2将根据其校准的数据使移液器在内部空间进行移动。了解更多关于OT-2上校准是如何工作的。", + "delete_calibration_data": "删除校准数据", + "did_pipette_pick_up_tip": "移液器是否成功吸取吸头?", + "direction_controls": "方向控制", + "do_you_have_a_cal_block": "您有校准块吗?", + "download_calibration": "下载您的校准数据", + "download_calibration_data_available": "将所有三种类型的校准数据保存为JSON文件。", + "download_calibration_data_unavailable": "无校准数据可用。", + "download_calibration_title": "下载校准数据", + "download_details": "下载详情JSON校准文件查看摘要", + "finish": "完成", + "get_started": "开始", + "good_calibration": "良好校准", + "health_check_button": "检查健康", + "health_check_description": "检查当前校准设置的健康状况。", + "health_check_title": "校准健康检查", + "if_tip_bent_replace_it": "如果吸头发生了弯折,在继续校准前,请确保用未损坏的吸头替换A1位置的吸头。", + "important_to_use_listed_equipment": "使用上述指定的设备进行校准非常重要,因为工作站将根据这些物品的已知数据来确保准确性。", + "jog_controls": "微调控制", + "jog_nozzle_to_block": "微调移液器,直到喷嘴几乎接触(小于0.1毫米){{slotName}}板位中的校准块。", + "jog_nozzle_to_trash": "微调移液器,直到喷嘴几乎接触(小于0.1毫米)垃圾桶的平坦表面。", + "jog_pipette_to_touch_block": "微调移液器,直到吸头几乎接触(小于0.1毫米)6号板位的校准块。", + "jog_pipette_to_touch_cross": "微调移液器,直到吸头精确地位于{{slotName}}板位的十字中心。", + "jog_pipette_to_touch_slot": "微调移液器,直到吸头几乎接触(小于0.1毫米)5号板位的甲板表面。如果移液器在5号板位的编号或边缘处,或较难看清的位置,请切换到x轴和y轴控制,将移液器移过甲板。", + "jog_pipette_to_touch_trash": "微调移液器,直到吸头几乎接触(小于0.1毫米)垃圾桶的平坦表面。", + "jog_too_far_or_bend_tip": "微调过多或吸头发生了弯折?", + "jump_size": "跳跃尺寸", + "large": "大", + "last_calibrated": "上次校准", + "last_completed_on": "上次完成时间{{timestamp}}", + "last_migrated": "上次已知校准迁移", + "launch_calibration": "启动校准", + "launch_calibration_link_text": "前往校准", + "manage_pipettes": "管理移液器", + "missing_calibration_data": "缺少校准数据", + "missing_calibration_data_long": "工作站缺少校准数据", + "need_help": "需要帮助?", + "no_pipette": "没有连接移液器", + "no_tip_length": "校准您的移液器以查看保存的吸头长度", + "pick_up_tip": "拾取吸头", + "pipette_name_and_serial": "{{name}},{{serial}}", + "pipette_offset_calibration": "移液器偏移校准", + "pipette_offset_calibration_intro_body": "校准移液器偏移数据将测量移液器与移液器支架和甲板的相对位置。", + "pipette_offset_calibration_on_mount": "当移液器连接到工作站的{{mount}}支架上时,校准此移液器的偏移数据。", + "pipette_offset_description": "校准移液器拾取默认吸头后的位置。", + "pipette_offset_recalibrate_both_mounts": "两个支架的移液器偏移数据都需要重新校准。", + "pipette_offset_requires_tip_length": "您还没有为此移液器保存吸头长度数据。在校准移液器偏移数据之前,您需要校准吸头长度。", + "pipette_offset_title": "移液器偏移校准", + "place_cal_block": "将校准块放入指定板位", + "place_full_tip_rack": "在8号板位中放置一盒完整的{{tip_rack}}", + "position_pipette_over_tip": "将移液器定位在A1上方", + "prepare_the_space": "预留足够空间", + "progress_will_be_lost": "{{sessionType}}进度将丢失", + "recalibrate": "重新校准", + "recalibrate_pipette": "重新校准移液器", + "recalibrate_warning_body": "执行甲板校准将清除所有移液器偏移数据和吸头长度数据。在完成甲板校准后,您需要重新校准移液器偏移数据和吸头长度。", + "recalibrate_warning_heading": "您确定要重新校准甲板吗?", + "recalibration_recommended": "建议重新校准", + "return_tip": "回收吸头", + "return_tip_and_continue": "回收吸头并继续下一把移液器", + "return_tip_and_exit": "回收吸头并查看校准健康检查结果", + "see_how_robot_calibration_works": "了解工作站校准是如何工作的", + "select_tip_rack": "选择吸头盒", + "serial_number": "序列号", + "small": "小", + "start_over": "重新开始", + "start_over_question": "重新开始?", + "start_with_deck_calibration": "从甲板校准开始,这是其他校准的基础。", + "starting_over_loses_progress": "重新开始将取消您的校准进度。", + "this_is_the_tip_used_in_pipette_offset_cal": "请注意:您必须使用与上面列出的移液器偏移校准中使用的相同吸头。", + "tiny": "微小", + "tip_length": "吸头长度校准", + "tip_length_and_pipette_offset_calibration": "吸头长度和移液器偏移校准", + "tip_length_calibration": "吸头长度校准", + "tip_length_calibration_intro_body": "吸头长度校准将测量吸头底部和移液器喷嘴之间的距离。", + "tip_length_invalidates_pipette_offset": "重新校准吸头长度将清除移液器偏移数据。", + "tip_pick_up_instructions": "使用下方的控制键或键盘,微调移液器,直到最近的喷嘴位于A1位置的正上方,并与吸头顶部平齐。
当移液器正确对齐时,吸取吸头。", + "title": "工作站校准", + "to_check": "检查{{mount}}移液器:", + "unknown_custom_tiprack": "未知的自定义吸头盒", + "use_calibration_block": "使用校准块", + "use_trash_bin": "使用垃圾桶", + "using_current_calibrations": "使用当前校准。", + "you_can_remove_cal_block": "您现在可以从甲板上移除校准块。", + "you_will_need": "您将需要:" +} diff --git a/app/src/assets/localization/zh/robot_controls.json b/app/src/assets/localization/zh/robot_controls.json new file mode 100644 index 00000000000..ecb31d2adf6 --- /dev/null +++ b/app/src/assets/localization/zh/robot_controls.json @@ -0,0 +1,14 @@ +{ + "confirm_location": "确认位置", + "drop_tips": "丢弃吸头", + "home_button": "归位", + "home_description": "将工作站返回起始位置。", + "home_label": "归位所有轴", + "lights_description": "控制灯光", + "lights_label": "灯光", + "recalibrate": "重新校准", + "restart_button": "重新启动", + "restart_description": "重新启动工作站。", + "restart_label": "重新启动工作站", + "title": "工作站控制" +} diff --git a/app/src/assets/localization/zh/run_details.json b/app/src/assets/localization/zh/run_details.json new file mode 100644 index 00000000000..648df8a66e2 --- /dev/null +++ b/app/src/assets/localization/zh/run_details.json @@ -0,0 +1,154 @@ +{ + "analysis_failure_on_robot": "尝试在{{robotName}}上分析{{protocolName}}时发生错误。请修复以下错误,然后再次尝试运行此协议。", + "analyzing_on_robot": "移液工作站分析中", + "anticipated_step": "预期步骤", + "anticipated": "预期步骤", + "apply_stored_data": "应用存储的数据", + "apply_stored_labware_offset_data": "应用已储存的耗材校准数据?", + "cancel_run_alert_info_flex": "该动作将终止本次运行并使移液器归位。", + "cancel_run_alert_info_ot2": "该动作将终止本次运行,已拾取的吸头将被丢弃,移液器将归位。", + "cancel_run_and_restart": "取消运行,重新进行设置以进行编辑", + "cancel_run_modal_back": "否,返回", + "cancel_run_modal_confirm": "是,取消运行", + "cancel_run_modal_heading": "确定要取消吗?", + "cancel_run_module_info": "此外,协议中使用的模块将保持激活状态,直到被禁用。", + "cancel_run": "取消运行", + "canceling_run_dot": "正在取消运行...", + "canceling_run": "正在取消运行", + "clear_protocol_to_make_available": "清除工作站的协议以使其可用", + "clear_protocol": "清除协议", + "close_door_to_resume": "关闭移液工作站的前门以继续运行", + "close_door": "关闭移液工作站前门", + "closing_protocol": "正在关闭协议", + "comment_step": "注释", + "comment": "注释", + "complete_protocol_to_download": "完成协议以下载运行日志", + "current_step_pause_timer": "计时器", + "current_step_pause": "当前步骤 - 用户暂停", + "current_step": "当前步骤", + "current_temperature": "当前:{{temperature}}°C", + "custom_values": "自定义值", + "data_out_of_date": "此数据可能已过期", + "date": "日期", + "door_is_open": "工作站前门已打开", + "door_open_pause": "当前步骤 - 暂停 - 前门已打开", + "download": "下载", + "download_run_log": "下载运行日志", + "downloading_run_log": "正在下载运行日志", + "drop_tip": "在{{labware_location}}内的{{labware}}中的{{well_name}}中丢弃吸头", + "duration": "持续时间", + "end_of_protocol": "协议结束", + "end_step_time": "结束", + "end": "结束", + "error_info": "错误{{errorCode}}:{{errorType}}", + "error_type": "错误:{{errorType}}", + "failed_step": "步骤失败", + "final_step": "最后一步", + "ignore_stored_data": "忽略已存储的数据", + "labware_offset_data": "耗材校准数据", + "labware": "耗材", + "left": "左", + "listed_values": "列出的值仅供查看", + "load_labware_info_protocol_setup_adapter_module": "在{{slot_name}}号板位中的{{module_name}}内加载{{labware}}的{{adapter_name}}", + "load_labware_info_protocol_setup_adapter_off_deck": "在甲板外的{{adapter_name}}上加载{{labware}}", + "load_labware_info_protocol_setup_adapter": "在{{slot_name}}号板位中的{{adapter_name}}中加载{{labware}}", + "load_labware_info_protocol_setup_no_module": "在{{slot_name}}号板位中加载{{labware}}", + "load_labware_info_protocol_setup_off_deck": "在甲板外加载{{labware}}", + "load_labware_info_protocol_setup_plural": "在{{module_name}}中加载{{labware}}", + "load_labware_info_protocol_setup": "在{{slot_name}}号板位中的{{module_name}}中加载{{labware}}", + "load_liquids_info_protocol_setup": "将{{liquid}}加载到{{labware}}中", + "load_module_protocol_setup_plural": "加载{{module}}", + "load_module_protocol_setup": "在{{slot_name}}号板位中加载{{module}}", + "load_pipette_protocol_setup": "在{{mount_name}}安装位上加载{{pipette_name}}", + "loading_protocol": "正在加载协议", + "loading_data": "正在加载数据...", + "location": "位置", + "module_controls": "模块控制", + "module_slot_number": "板位{{slot_number}}", + "move_labware": "移动耗材", + "name": "名称", + "no_files_included": "未包含协议文件", + "no_offsets_available": "无耗材校准数据可用", + "not_available_for_a_completed_run": "不适用于已完成的运行", + "not_available_for_a_run_in_progress": "不适用于正在进行的运行", + "not_started_yet": "未开始", + "off_deck": "甲板外", + "parameters": "参数", + "pause_protocol": "暂停协议", + "pause_run": "暂停运行", + "pause": "暂停", + "paused_for": "暂停原因", + "pickup_tip": "从{{labware_location}}内的{{labware}}中的{{well_name}}孔位拾取吸头", + "plus_more": "+{{count}}更多", + "preview_of_protocol_steps": "这是您的协议步骤预览", + "protocol_analysis_failed": "协议分析失败。", + "protocol_analysis_failure": "协议分析失败", + "protocol_completed": "协议已完成", + "protocol_end": "协议结束", + "protocol_files": "协议文件", + "protocol_paused_for": "协议暂停原因", + "protocol_run_canceled": "协议运行已取消", + "protocol_run_complete": "协议运行已完成", + "protocol_run_failed": "协议运行失败", + "protocol_setup": "协议设置", + "protocol_start": "协议开始", + "protocol_steps": "协议步骤", + "protocol_title": "协议 -{{protocol_name}}", + "resume_run": "恢复运行", + "return_to_dashboard": "返回控制面板", + "right": "右", + "robot_has_previous_offsets": "该移液工作站已存储了之前运行协议的耗材校准数据。您想将这些数据应用于此协议的运行吗?您仍然可以通过实验器具位置检查调整校准数据。", + "robot_was_recalibrated": "在储存此耗材校准数据后,移液工作站已重新校准", + "run_again": "再次运行", + "run_canceled_splash": "运行已取消", + "run_canceled": "运行已取消。", + "run_complete_splash": "运行已完成", + "run_complete": "运行已完成", + "run_completed": "运行已完成。", + "run_cta_disabled": "在开始运行之前,请完成协议选项卡上的所有必要步骤。", + "run_failed_modal_body": "在协议执行{{command}}时发生错误。", + "run_failed_modal_header": "{{errorName}}:{{errorCode}}协议步骤{{count}}", + "run_failed_modal_title": "运行失败", + "run_failed_splash": "运行失败", + "run_failed": "运行失败。", + "run_has_diverged_from_predicted": "运行已偏离预期状态。无法执行新的预期步骤。", + "run_preview": "运行预览", + "run_protocol": "运行协议", + "run_status": "状态:{{status}}", + "run_time": "运行时间", + "run": "运行", + "setup_incomplete": "完成“设置”选项卡中所需的步骤", + "setup": "设置", + "slot": "板位{{slotName}}", + "start_run": "开始运行", + "start_step_time": "开始", + "start_time": "开始时间", + "start": "开始", + "status_awaiting-recovery": "等待恢复", + "status_blocked-by-open-door": "暂停 - 前门打开", + "status_failed": "失败", + "status_finishing": "结束中", + "status_idle": "未开始", + "status_paused": "暂停", + "status_running": "运行中", + "status_stop-requested": "请求停止", + "status_stopped": "已取消", + "status_succeeded": "已完成", + "status": "状态", + "step": "步骤", + "step_failed": "步骤失败", + "step_number": "步骤{{step_number}}:", + "steps_total": "总计{{count}}步", + "stored_labware_offset_data": "已储存适用于此协议的耗材校准数据", + "target_temperature": "目标温度:{{temperature}}°C", + "temperature_not_available": "{{temperature_type}}: n/a", + "thermocycler_error_tooltip": "模块遇到异常,请联系技术支持。", + "total_elapsed_time": "总耗时", + "total_step_count_plural": "总计{{count}}步", + "total_step_count": "总计{{count}}步", + "unable_to_determine_steps": "无法确定步骤", + "view_analysis_error_details": "查看 错误详情", + "view_current_step": "查看当前步骤", + "view_error_details": "查看错误详情", + "view_error": "查看错误" +} diff --git a/app/src/assets/localization/zh/shared.json b/app/src/assets/localization/zh/shared.json new file mode 100644 index 00000000000..f9b0aa47cca --- /dev/null +++ b/app/src/assets/localization/zh/shared.json @@ -0,0 +1,84 @@ +{ + "a_software_update_is_available": "此工作站有可用的软件更新。更新以运行协议。", + "add": "添加", + "alphabetical": "按字母排序", + "back": "返回", + "before_you_begin": "在您开始之前", + "browse": "浏览", + "cancel": "取消", + "change_protocol": "更改协议", + "change_robot": "更换工作站", + "clear_data": "清除数据", + "close_robot_door": "开始运行前请关闭工作站前门。", + "close": "关闭", + "confirm_placement": "确认放置", + "confirm_position": "确认位置", + "confirm_values": "确认这些值", + "confirm": "确认", + "continue_activity": "继续活动", + "continue_to_param": "继续设置参数", + "continue": "继续", + "delete": "删除", + "did_pipette_pick_up_tip": "移液器是否成功拾取吸头?", + "disabled_cannot_connect": "无法连接到工作站", + "disabled_connect_to_robot": "连接到工作站以进行控制", + "disabled_no_pipette_attached": "安装移液器以继续", + "disabled_protocol_is_running": "协议正在运行", + "dont_show_me_again": "不再显示", + "drag_and_drop": "拖放或 浏览 您的文件", + "empty": "清空", + "ending": "结束中", + "error_encountered": "遇到错误", + "error": "错误", + "exit": "退出", + "extension_mount": "扩展安装支架", + "flow_complete": "{{flowName}}完成!", + "get_started": "开始", + "github": "GitHub", + "go_back": "返回", + "instruments": "硬件", + "loading": "加载中...", + "next": "下一步", + "no_data": "无数据", + "no": "否", + "none": "无", + "not_used": "未使用", + "off": "关闭", + "ok": "好的", + "on": "开启", + "open": "打开", + "proceed_to_setup": "继续设置", + "protocol_run_general_error_msg": "无法在工作站上创建协议运行。", + "reanalyze": "重新分析", + "refresh_list": "刷新列表", + "refresh": "刷新", + "remember_my_selection_and_do_not_ask_again": "记住我的选择,不再询问", + "reset_all": "全部重置", + "reset": "重置", + "restart": "重新启动", + "resume": "继续", + "return": "返回", + "reverse": "按字母倒序排序", + "robot_is_analyzing": "工作站正在分析", + "robot_is_busy_no_protocol_run_allowed": "此工作站正忙,无法运行此协议。转到工作站", + "robot_is_busy": "工作站正忙", + "robot_is_reachable_but_not_responding": "此工作站的API服务器未能正确响应IP地址{{hostname}}处的请求", + "robot_was_seen_but_is_unreachable": "最近看到此工作站,但当前无法访问IP地址{{hostname}}", + "save": "保存", + "something_went_wrong": "出现问题", + "sort_by": "排序方式", + "stand_back_robot_is_in_motion": "请离开,工作站在运动", + "start": "开始", + "starting": "启动中", + "step": "步骤{{current}}/{{max}}", + "stop": "停止", + "terminate_activity": "终止活动", + "terminate": "终止远程活动", + "try_again": "重试", + "unknown_error": "发生未知错误", + "unknown": "未知", + "update": "更新", + "view_latest_release_notes": "查看最新发布说明:", + "yes": "是", + "you_will_need": "您将需要:" +} diff --git a/app/src/assets/localization/zh/top_navigation.json b/app/src/assets/localization/zh/top_navigation.json new file mode 100644 index 00000000000..c3906955266 --- /dev/null +++ b/app/src/assets/localization/zh/top_navigation.json @@ -0,0 +1,19 @@ +{ + "all_protocols": "全部协议", + "attached_pipettes_do_not_match": "安装的移液器与加载的协议中指定的移液器不匹配", + "calibrate_deck_to_proceed": "校准甲板以继续", + "deck_setup": "甲板设置", + "devices": "设备", + "instruments": "硬件", + "labware": "耗材", + "modules": "模块", + "pipettes_not_calibrated": "请校准加载的协议中指定的所有移液器以继续", + "pipettes": "移液器", + "please_connect_to_a_robot": "请连接到工作站以继续", + "please_load_a_protocol": "请加载协议以继续", + "protocol_runs": "协议运行", + "protocols": "协议", + "robot_settings": "工作站设置", + "run": "运行", + "settings": "设置" +} diff --git a/app/src/atoms/InlineNotification/InlineNotification.stories.tsx b/app/src/atoms/InlineNotification/InlineNotification.stories.tsx index b993fd13205..ff4e4de6999 100644 --- a/app/src/atoms/InlineNotification/InlineNotification.stories.tsx +++ b/app/src/atoms/InlineNotification/InlineNotification.stories.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { VIEWPORT } from '@opentrons/components' import { InlineNotification } from '.' import type { Story, Meta } from '@storybook/react' diff --git a/app/src/atoms/InlineNotification/__tests__/InlineNotification.test.tsx b/app/src/atoms/InlineNotification/__tests__/InlineNotification.test.tsx index a1bdf9b33c2..0e91433e7b2 100644 --- a/app/src/atoms/InlineNotification/__tests__/InlineNotification.test.tsx +++ b/app/src/atoms/InlineNotification/__tests__/InlineNotification.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, vi, beforeEach, expect } from 'vitest' import { screen, fireEvent } from '@testing-library/react' import { renderWithProviders } from '/app/__testing-utils__' diff --git a/app/src/atoms/InlineNotification/index.tsx b/app/src/atoms/InlineNotification/index.tsx index 1605abd990d..5b5bf21aafa 100644 --- a/app/src/atoms/InlineNotification/index.tsx +++ b/app/src/atoms/InlineNotification/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { css } from 'styled-components' import { ALIGN_CENTER, diff --git a/app/src/atoms/InstrumentContainer/InstrumentContainer.stories.tsx b/app/src/atoms/InstrumentContainer/InstrumentContainer.stories.tsx index 680b104c6b8..d5daeb2d6d7 100644 --- a/app/src/atoms/InstrumentContainer/InstrumentContainer.stories.tsx +++ b/app/src/atoms/InstrumentContainer/InstrumentContainer.stories.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { InstrumentContainer as InstrumentContainerComponent } from './index' diff --git a/app/src/atoms/InstrumentContainer/__tests__/InstrumentContainer.test.tsx b/app/src/atoms/InstrumentContainer/__tests__/InstrumentContainer.test.tsx index d7a6a7d41fd..e5fa872ab54 100644 --- a/app/src/atoms/InstrumentContainer/__tests__/InstrumentContainer.test.tsx +++ b/app/src/atoms/InstrumentContainer/__tests__/InstrumentContainer.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it } from 'vitest' import { screen } from '@testing-library/react' import { renderWithProviders } from '/app/__testing-utils__' diff --git a/app/src/atoms/InstrumentContainer/index.tsx b/app/src/atoms/InstrumentContainer/index.tsx index 3efb742fa76..475dfed3b23 100644 --- a/app/src/atoms/InstrumentContainer/index.tsx +++ b/app/src/atoms/InstrumentContainer/index.tsx @@ -1,5 +1,3 @@ -import * as React from 'react' - import { BORDERS, COLORS, diff --git a/app/src/atoms/Link/ExternalLink.stories.tsx b/app/src/atoms/Link/ExternalLink.stories.tsx index 8f664d257f5..d5d2dccaee9 100644 --- a/app/src/atoms/Link/ExternalLink.stories.tsx +++ b/app/src/atoms/Link/ExternalLink.stories.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { COLORS, Flex, SPACING } from '@opentrons/components' import { ExternalLink as ExternalLinkComponent } from './ExternalLink' diff --git a/app/src/atoms/Link/ExternalLink.tsx b/app/src/atoms/Link/ExternalLink.tsx index e35e3515277..5d24a06fdb4 100644 --- a/app/src/atoms/Link/ExternalLink.tsx +++ b/app/src/atoms/Link/ExternalLink.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { Link, Icon, TYPOGRAPHY, SPACING } from '@opentrons/components' import type { LinkProps } from '@opentrons/components' diff --git a/app/src/atoms/Link/__tests__/ExternalLink.test.tsx b/app/src/atoms/Link/__tests__/ExternalLink.test.tsx index 81c9e8cc6c2..e245541c514 100644 --- a/app/src/atoms/Link/__tests__/ExternalLink.test.tsx +++ b/app/src/atoms/Link/__tests__/ExternalLink.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, expect, beforeEach } from 'vitest' import { screen } from '@testing-library/react' import '@testing-library/jest-dom/vitest' diff --git a/app/src/atoms/ProgressBar/__tests__/ProgressBar.test.tsx b/app/src/atoms/ProgressBar/__tests__/ProgressBar.test.tsx index daaf7c70417..6d5b3d3fa40 100644 --- a/app/src/atoms/ProgressBar/__tests__/ProgressBar.test.tsx +++ b/app/src/atoms/ProgressBar/__tests__/ProgressBar.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, expect, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' import { screen } from '@testing-library/react' diff --git a/app/src/atoms/ProgressBar/index.tsx b/app/src/atoms/ProgressBar/index.tsx index 01054384094..5852dadf2b5 100644 --- a/app/src/atoms/ProgressBar/index.tsx +++ b/app/src/atoms/ProgressBar/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { css } from 'styled-components' import { COLORS, Box } from '@opentrons/components' diff --git a/app/src/atoms/SelectField/Select.stories.tsx b/app/src/atoms/SelectField/Select.stories.tsx index 2df1ac462fa..461bab59b22 100644 --- a/app/src/atoms/SelectField/Select.stories.tsx +++ b/app/src/atoms/SelectField/Select.stories.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { Select } from './Select' diff --git a/app/src/atoms/SelectField/Select.tsx b/app/src/atoms/SelectField/Select.tsx index 2f1a6ef8879..110fbbbf857 100644 --- a/app/src/atoms/SelectField/Select.tsx +++ b/app/src/atoms/SelectField/Select.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import ReactSelect, { components } from 'react-select' import { diff --git a/app/src/atoms/SelectField/index.tsx b/app/src/atoms/SelectField/index.tsx index 36c425cbeae..50deed28266 100644 --- a/app/src/atoms/SelectField/index.tsx +++ b/app/src/atoms/SelectField/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import find from 'lodash/find' import { Select } from './Select' import { diff --git a/app/src/atoms/Skeleton/Skeleton.stories.tsx b/app/src/atoms/Skeleton/Skeleton.stories.tsx index f3c4ab231c4..c91679c1a3a 100644 --- a/app/src/atoms/Skeleton/Skeleton.stories.tsx +++ b/app/src/atoms/Skeleton/Skeleton.stories.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { Flex, DIRECTION_COLUMN, diff --git a/app/src/atoms/Skeleton/__tests__/Skeleton.test.tsx b/app/src/atoms/Skeleton/__tests__/Skeleton.test.tsx index 9e37a85622c..b03bd72e98d 100644 --- a/app/src/atoms/Skeleton/__tests__/Skeleton.test.tsx +++ b/app/src/atoms/Skeleton/__tests__/Skeleton.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, expect } from 'vitest' import '@testing-library/jest-dom/vitest' import { screen } from '@testing-library/react' diff --git a/app/src/atoms/Skeleton/index.tsx b/app/src/atoms/Skeleton/index.tsx index 556a5653a77..3c9ccb09a7b 100644 --- a/app/src/atoms/Skeleton/index.tsx +++ b/app/src/atoms/Skeleton/index.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { css } from 'styled-components' import { BORDERS, Box, COLORS } from '@opentrons/components' diff --git a/app/src/atoms/SleepScreen/__tests__/SleepScreen.test.tsx b/app/src/atoms/SleepScreen/__tests__/SleepScreen.test.tsx index a1862f37db0..79356e879e0 100644 --- a/app/src/atoms/SleepScreen/__tests__/SleepScreen.test.tsx +++ b/app/src/atoms/SleepScreen/__tests__/SleepScreen.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { describe, it, expect } from 'vitest' import '@testing-library/jest-dom/vitest' import { screen } from '@testing-library/react' diff --git a/app/src/atoms/SleepScreen/index.tsx b/app/src/atoms/SleepScreen/index.tsx index 2600f9d2de9..64ff2ff7cbe 100644 --- a/app/src/atoms/SleepScreen/index.tsx +++ b/app/src/atoms/SleepScreen/index.tsx @@ -1,5 +1,3 @@ -import * as React from 'react' - import { Flex, COLORS } from '@opentrons/components' export function SleepScreen(): JSX.Element { diff --git a/app/src/atoms/Slideout/MultiSlideout.tsx b/app/src/atoms/Slideout/MultiSlideout.tsx index 73054a10a45..65865edec53 100644 --- a/app/src/atoms/Slideout/MultiSlideout.tsx +++ b/app/src/atoms/Slideout/MultiSlideout.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { Slideout } from './index' import type { MultiSlideoutSpecs, SlideoutProps } from './index' diff --git a/app/src/atoms/Slideout/Slideout.stories.tsx b/app/src/atoms/Slideout/Slideout.stories.tsx index 6d1b828573c..9cee5939d15 100644 --- a/app/src/atoms/Slideout/Slideout.stories.tsx +++ b/app/src/atoms/Slideout/Slideout.stories.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { Fragment } from 'react' import { action } from '@storybook/addon-actions' import { COLORS, @@ -24,7 +24,7 @@ export default meta type Story = StoryObj const Children = ( - + - + ) export const Slideout: Story = { diff --git a/app/src/atoms/Slideout/__tests__/Slideout.test.tsx b/app/src/atoms/Slideout/__tests__/Slideout.test.tsx index bd30ce3f578..8e3301ad374 100644 --- a/app/src/atoms/Slideout/__tests__/Slideout.test.tsx +++ b/app/src/atoms/Slideout/__tests__/Slideout.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, expect, vi, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' import { screen, fireEvent } from '@testing-library/react' diff --git a/app/src/atoms/SoftwareKeyboard/AlphanumericKeyboard/AlphanumericKeyboard.stories.tsx b/app/src/atoms/SoftwareKeyboard/AlphanumericKeyboard/AlphanumericKeyboard.stories.tsx index dac73384226..5d00c0ac298 100644 --- a/app/src/atoms/SoftwareKeyboard/AlphanumericKeyboard/AlphanumericKeyboard.stories.tsx +++ b/app/src/atoms/SoftwareKeyboard/AlphanumericKeyboard/AlphanumericKeyboard.stories.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, useRef } from 'react' import { DIRECTION_COLUMN, Flex, @@ -22,9 +22,9 @@ export default meta type Story = StoryObj const Keyboard = (): JSX.Element => { - const [showKeyboard, setShowKeyboard] = React.useState(false) - const [value, setValue] = React.useState('') - const keyboardRef = React.useRef(null) + const [showKeyboard, setShowKeyboard] = useState(false) + const [value, setValue] = useState('') + const keyboardRef = useRef(null) return (
diff --git a/app/src/atoms/SoftwareKeyboard/FullKeyboard/FullKeyboard.stories.tsx b/app/src/atoms/SoftwareKeyboard/FullKeyboard/FullKeyboard.stories.tsx index 3734a895231..27d79e602f8 100644 --- a/app/src/atoms/SoftwareKeyboard/FullKeyboard/FullKeyboard.stories.tsx +++ b/app/src/atoms/SoftwareKeyboard/FullKeyboard/FullKeyboard.stories.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, useRef } from 'react' import { DIRECTION_COLUMN, Flex, @@ -21,9 +21,9 @@ export default meta type Story = StoryObj const Keyboard = (): JSX.Element => { - const [showKeyboard, setShowKeyboard] = React.useState(false) - const [value, setValue] = React.useState('') - const keyboardRef = React.useRef(null) + const [showKeyboard, setShowKeyboard] = useState(false) + const [value, setValue] = useState('') + const keyboardRef = useRef(null) return ( diff --git a/app/src/atoms/SoftwareKeyboard/IndividualKey/IndividualKey.stories.tsx b/app/src/atoms/SoftwareKeyboard/IndividualKey/IndividualKey.stories.tsx index 18978b2318f..e19ee9ecc57 100644 --- a/app/src/atoms/SoftwareKeyboard/IndividualKey/IndividualKey.stories.tsx +++ b/app/src/atoms/SoftwareKeyboard/IndividualKey/IndividualKey.stories.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, useRef } from 'react' import { DIRECTION_COLUMN, Flex, @@ -22,9 +22,9 @@ export default meta type Story = StoryObj const Keyboard = ({ ...args }): JSX.Element => { - const [showKeyboard, setShowKeyboard] = React.useState(false) - const [value, setValue] = React.useState('') - const keyboardRef = React.useRef(null) + const [showKeyboard, setShowKeyboard] = useState(false) + const [value, setValue] = useState('') + const keyboardRef = useRef(null) return ( diff --git a/app/src/atoms/SoftwareKeyboard/IndividualKey/index.tsx b/app/src/atoms/SoftwareKeyboard/IndividualKey/index.tsx index 310008cddc8..1ba1ec5e150 100644 --- a/app/src/atoms/SoftwareKeyboard/IndividualKey/index.tsx +++ b/app/src/atoms/SoftwareKeyboard/IndividualKey/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { KeyboardReact as Keyboard } from 'react-simple-keyboard' import type { KeyboardReactInterface } from 'react-simple-keyboard' import '../index.css' diff --git a/app/src/atoms/SoftwareKeyboard/NumericalKeyboard/NumericalKeyboard.stories.tsx b/app/src/atoms/SoftwareKeyboard/NumericalKeyboard/NumericalKeyboard.stories.tsx index 22bca18ca66..216aaac86c5 100644 --- a/app/src/atoms/SoftwareKeyboard/NumericalKeyboard/NumericalKeyboard.stories.tsx +++ b/app/src/atoms/SoftwareKeyboard/NumericalKeyboard/NumericalKeyboard.stories.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, useRef } from 'react' import { DIRECTION_COLUMN, Flex, @@ -37,9 +37,9 @@ type Story = StoryObj const Keyboard = (args): JSX.Element => { const { isDecimal, hasHyphen } = args - const [showKeyboard, setShowKeyboard] = React.useState(false) - const [value, setValue] = React.useState('') - const keyboardRef = React.useRef(null) + const [showKeyboard, setShowKeyboard] = useState(false) + const [value, setValue] = useState('') + const keyboardRef = useRef(null) return ( diff --git a/app/src/atoms/SoftwareKeyboard/NumericalKeyboard/index.tsx b/app/src/atoms/SoftwareKeyboard/NumericalKeyboard/index.tsx index 7bb9a73e105..f0025b6c972 100644 --- a/app/src/atoms/SoftwareKeyboard/NumericalKeyboard/index.tsx +++ b/app/src/atoms/SoftwareKeyboard/NumericalKeyboard/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { KeyboardReact as Keyboard } from 'react-simple-keyboard' import { numericalKeyboardLayout, numericalCustom } from '../constants' diff --git a/app/src/atoms/StatusLabel/StatusLabel.stories.tsx b/app/src/atoms/StatusLabel/StatusLabel.stories.tsx index 0be5f54b519..e4ef9485fbf 100644 --- a/app/src/atoms/StatusLabel/StatusLabel.stories.tsx +++ b/app/src/atoms/StatusLabel/StatusLabel.stories.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { COLORS } from '@opentrons/components' import { StatusLabel } from './index' import type { Story, Meta } from '@storybook/react' diff --git a/app/src/atoms/StatusLabel/__tests__/StatusLabel.test.tsx b/app/src/atoms/StatusLabel/__tests__/StatusLabel.test.tsx index 8c7f200d90d..568326f0065 100644 --- a/app/src/atoms/StatusLabel/__tests__/StatusLabel.test.tsx +++ b/app/src/atoms/StatusLabel/__tests__/StatusLabel.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, expect } from 'vitest' import '@testing-library/jest-dom/vitest' import { screen } from '@testing-library/react' diff --git a/app/src/atoms/StatusLabel/index.tsx b/app/src/atoms/StatusLabel/index.tsx index a1561e5e75d..0cf2af6e384 100644 --- a/app/src/atoms/StatusLabel/index.tsx +++ b/app/src/atoms/StatusLabel/index.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import capitalize from 'lodash/capitalize' import { diff --git a/app/src/atoms/StepMeter/StepMeter.stories.tsx b/app/src/atoms/StepMeter/StepMeter.stories.tsx index 44fdf79c43f..1491451794b 100644 --- a/app/src/atoms/StepMeter/StepMeter.stories.tsx +++ b/app/src/atoms/StepMeter/StepMeter.stories.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { StepMeter } from './index' diff --git a/app/src/atoms/StepMeter/__tests__/StepMeter.test.tsx b/app/src/atoms/StepMeter/__tests__/StepMeter.test.tsx index 6e8225f738e..90f027b0f7a 100644 --- a/app/src/atoms/StepMeter/__tests__/StepMeter.test.tsx +++ b/app/src/atoms/StepMeter/__tests__/StepMeter.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, expect, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' import { screen } from '@testing-library/react' diff --git a/app/src/atoms/StepMeter/index.tsx b/app/src/atoms/StepMeter/index.tsx index 2c2854dc4d6..371e92b9393 100644 --- a/app/src/atoms/StepMeter/index.tsx +++ b/app/src/atoms/StepMeter/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useRef } from 'react' import { css } from 'styled-components' import { Box, @@ -16,7 +16,7 @@ interface StepMeterProps { export const StepMeter = (props: StepMeterProps): JSX.Element => { const { totalSteps, currentStep } = props - const prevPercentComplete = React.useRef(0) + const prevPercentComplete = useRef(0) const progress = currentStep != null ? currentStep : 0 const percentComplete = // this logic puts a cap at 100% percentComplete which we should never run into diff --git a/app/src/atoms/buttons/BackButton.tsx b/app/src/atoms/buttons/BackButton.tsx index 05df2fd800b..29657e1f1b2 100644 --- a/app/src/atoms/buttons/BackButton.tsx +++ b/app/src/atoms/buttons/BackButton.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useTranslation } from 'react-i18next' import { useNavigate } from 'react-router-dom' diff --git a/app/src/atoms/buttons/FloatingActionButton.stories.tsx b/app/src/atoms/buttons/FloatingActionButton.stories.tsx index a7526805a20..31e5402c13f 100644 --- a/app/src/atoms/buttons/FloatingActionButton.stories.tsx +++ b/app/src/atoms/buttons/FloatingActionButton.stories.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { ICON_DATA_BY_NAME, VIEWPORT } from '@opentrons/components' import { FloatingActionButton } from './' diff --git a/app/src/atoms/buttons/FloatingActionButton.tsx b/app/src/atoms/buttons/FloatingActionButton.tsx index 76a72cd076b..b7e870eab16 100644 --- a/app/src/atoms/buttons/FloatingActionButton.tsx +++ b/app/src/atoms/buttons/FloatingActionButton.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { css } from 'styled-components' import { diff --git a/app/src/atoms/buttons/IconButton.tsx b/app/src/atoms/buttons/IconButton.tsx index d86324ed843..ee754472ff1 100644 --- a/app/src/atoms/buttons/IconButton.tsx +++ b/app/src/atoms/buttons/IconButton.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { css } from 'styled-components' import { BORDERS, diff --git a/app/src/atoms/buttons/MediumButton.tsx b/app/src/atoms/buttons/MediumButton.tsx index b25ac0432b9..d784029696a 100644 --- a/app/src/atoms/buttons/MediumButton.tsx +++ b/app/src/atoms/buttons/MediumButton.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { css } from 'styled-components' import { ALIGN_CENTER, diff --git a/app/src/atoms/buttons/SmallButton.tsx b/app/src/atoms/buttons/SmallButton.tsx index a177be5a3e0..e659d52fd58 100644 --- a/app/src/atoms/buttons/SmallButton.tsx +++ b/app/src/atoms/buttons/SmallButton.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { css } from 'styled-components' import { ALIGN_CENTER, diff --git a/app/src/atoms/buttons/SubmitPrimaryButton.tsx b/app/src/atoms/buttons/SubmitPrimaryButton.tsx index 246ec6f9051..cdbf3442a65 100644 --- a/app/src/atoms/buttons/SubmitPrimaryButton.tsx +++ b/app/src/atoms/buttons/SubmitPrimaryButton.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { css } from 'styled-components' import { SPACING, diff --git a/app/src/atoms/buttons/TextOnlyButton.tsx b/app/src/atoms/buttons/TextOnlyButton.tsx index 45174218cd9..de3bbc969ab 100644 --- a/app/src/atoms/buttons/TextOnlyButton.tsx +++ b/app/src/atoms/buttons/TextOnlyButton.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { Btn, StyledText, COLORS, RESPONSIVENESS } from '@opentrons/components' import type { StyleProps } from '@opentrons/components' import { css } from 'styled-components' diff --git a/app/src/atoms/buttons/ToggleButton.tsx b/app/src/atoms/buttons/ToggleButton.tsx index 5299e332845..b814f45da1d 100644 --- a/app/src/atoms/buttons/ToggleButton.tsx +++ b/app/src/atoms/buttons/ToggleButton.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { css } from 'styled-components' import { Btn, Icon, COLORS, SIZE_1, SIZE_2 } from '@opentrons/components' diff --git a/app/src/atoms/buttons/__tests__/BackButton.test.tsx b/app/src/atoms/buttons/__tests__/BackButton.test.tsx index 6dbe655194a..510abd0ee7d 100644 --- a/app/src/atoms/buttons/__tests__/BackButton.test.tsx +++ b/app/src/atoms/buttons/__tests__/BackButton.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, vi } from 'vitest' import '@testing-library/jest-dom/vitest' diff --git a/app/src/atoms/buttons/__tests__/FloatingActionButton.test.tsx b/app/src/atoms/buttons/__tests__/FloatingActionButton.test.tsx index 61e147e2542..de2bcd49e24 100644 --- a/app/src/atoms/buttons/__tests__/FloatingActionButton.test.tsx +++ b/app/src/atoms/buttons/__tests__/FloatingActionButton.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, expect, vi, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' import { screen } from '@testing-library/react' diff --git a/app/src/atoms/buttons/__tests__/MediumButton.test.tsx b/app/src/atoms/buttons/__tests__/MediumButton.test.tsx index 182c0d80a9c..988248413d9 100644 --- a/app/src/atoms/buttons/__tests__/MediumButton.test.tsx +++ b/app/src/atoms/buttons/__tests__/MediumButton.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import '@testing-library/jest-dom/vitest' import { describe, it, expect, vi, beforeEach } from 'vitest' import { fireEvent, screen } from '@testing-library/react' diff --git a/app/src/atoms/buttons/__tests__/QuaternaryButton.test.tsx b/app/src/atoms/buttons/__tests__/QuaternaryButton.test.tsx index be8759b1a98..4e10831c73c 100644 --- a/app/src/atoms/buttons/__tests__/QuaternaryButton.test.tsx +++ b/app/src/atoms/buttons/__tests__/QuaternaryButton.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import '@testing-library/jest-dom/vitest' import { describe, it, expect, beforeEach, vi } from 'vitest' import { screen } from '@testing-library/react' diff --git a/app/src/atoms/buttons/__tests__/SmallButton.test.tsx b/app/src/atoms/buttons/__tests__/SmallButton.test.tsx index e39d6f1e850..283f21daf4e 100644 --- a/app/src/atoms/buttons/__tests__/SmallButton.test.tsx +++ b/app/src/atoms/buttons/__tests__/SmallButton.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, expect, vi, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' import { fireEvent, screen } from '@testing-library/react' diff --git a/app/src/atoms/buttons/__tests__/SubmitPrimaryButton.test.tsx b/app/src/atoms/buttons/__tests__/SubmitPrimaryButton.test.tsx index 455e0026cb3..a62ba9c4a95 100644 --- a/app/src/atoms/buttons/__tests__/SubmitPrimaryButton.test.tsx +++ b/app/src/atoms/buttons/__tests__/SubmitPrimaryButton.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, expect, vi, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' import { fireEvent, screen } from '@testing-library/react' diff --git a/app/src/atoms/buttons/__tests__/TertiaryButton.test.tsx b/app/src/atoms/buttons/__tests__/TertiaryButton.test.tsx index 7d653b37881..4a3f95369c8 100644 --- a/app/src/atoms/buttons/__tests__/TertiaryButton.test.tsx +++ b/app/src/atoms/buttons/__tests__/TertiaryButton.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, expect, beforeEach } from 'vitest' import { screen } from '@testing-library/react' import { renderWithProviders } from '/app/__testing-utils__' diff --git a/app/src/atoms/buttons/__tests__/ToggleButton.test.tsx b/app/src/atoms/buttons/__tests__/ToggleButton.test.tsx index 23f75531d74..3f61d43c5d0 100644 --- a/app/src/atoms/buttons/__tests__/ToggleButton.test.tsx +++ b/app/src/atoms/buttons/__tests__/ToggleButton.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, expect, vi, beforeEach } from 'vitest' import { screen, fireEvent } from '@testing-library/react' import { COLORS, SIZE_2 } from '@opentrons/components' diff --git a/app/src/atoms/structure/Divider.stories.tsx b/app/src/atoms/structure/Divider.stories.tsx index b38372a575c..747c21bec09 100644 --- a/app/src/atoms/structure/Divider.stories.tsx +++ b/app/src/atoms/structure/Divider.stories.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { ALIGN_CENTER, Box, diff --git a/app/src/atoms/structure/Divider.tsx b/app/src/atoms/structure/Divider.tsx index 2f8eef69cfc..db55ad84f44 100644 --- a/app/src/atoms/structure/Divider.tsx +++ b/app/src/atoms/structure/Divider.tsx @@ -1,13 +1,14 @@ -import * as React from 'react' +import type * as React from 'react' import { Box, COLORS, SPACING } from '@opentrons/components' type Props = React.ComponentProps export function Divider(props: Props): JSX.Element { + const { marginY } = props return ( diff --git a/app/src/atoms/structure/Line.stories.tsx b/app/src/atoms/structure/Line.stories.tsx index 4a37a6ee4f5..0383e5e64a2 100644 --- a/app/src/atoms/structure/Line.stories.tsx +++ b/app/src/atoms/structure/Line.stories.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { ALIGN_CENTER, Box, diff --git a/app/src/atoms/structure/Line.tsx b/app/src/atoms/structure/Line.tsx index 59f0de712bf..ecbbecc24cd 100644 --- a/app/src/atoms/structure/Line.tsx +++ b/app/src/atoms/structure/Line.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { Box, BORDERS } from '@opentrons/components' type Props = React.ComponentProps diff --git a/app/src/atoms/structure/__tests__/Divider.test.tsx b/app/src/atoms/structure/__tests__/Divider.test.tsx index 4ee70071ccd..27460be938d 100644 --- a/app/src/atoms/structure/__tests__/Divider.test.tsx +++ b/app/src/atoms/structure/__tests__/Divider.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, expect, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' import { screen } from '@testing-library/react' diff --git a/app/src/atoms/structure/__tests__/Line.test.tsx b/app/src/atoms/structure/__tests__/Line.test.tsx index 66f995b768f..d9a9caefba2 100644 --- a/app/src/atoms/structure/__tests__/Line.test.tsx +++ b/app/src/atoms/structure/__tests__/Line.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, expect, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' import { screen } from '@testing-library/react' diff --git a/app/src/index.tsx b/app/src/index.tsx index cf4fcbfc44c..a668270ac17 100644 --- a/app/src/index.tsx +++ b/app/src/index.tsx @@ -1,5 +1,5 @@ +/* eslint-disable opentrons/no-imports-across-applications */ // client entry point and application manifest -import React from 'react' import ReactDom from 'react-dom/client' import { Provider } from 'react-redux' import { HashRouter } from 'react-router-dom' diff --git a/app/src/local-resources/config/constants.ts b/app/src/local-resources/config/constants.ts new file mode 100644 index 00000000000..1c7b0e2727d --- /dev/null +++ b/app/src/local-resources/config/constants.ts @@ -0,0 +1 @@ +export const SLEEP_NEVER_MS = 604800000 diff --git a/app/src/local-resources/config/index.ts b/app/src/local-resources/config/index.ts new file mode 100644 index 00000000000..f87cf0102a1 --- /dev/null +++ b/app/src/local-resources/config/index.ts @@ -0,0 +1 @@ +export * from './constants' diff --git a/app/src/organisms/Devices/ProtocolRun/utils/getStandardDeckViewLayerBlockList.ts b/app/src/local-resources/deck_configuration/getStandardDeckViewLayerBlockList.ts similarity index 100% rename from app/src/organisms/Devices/ProtocolRun/utils/getStandardDeckViewLayerBlockList.ts rename to app/src/local-resources/deck_configuration/getStandardDeckViewLayerBlockList.ts diff --git a/app/src/local-resources/deck_configuration/index.ts b/app/src/local-resources/deck_configuration/index.ts new file mode 100644 index 00000000000..9028755b545 --- /dev/null +++ b/app/src/local-resources/deck_configuration/index.ts @@ -0,0 +1 @@ +export * from './getStandardDeckViewLayerBlockList' diff --git a/app/src/resources/instruments/__tests__/hooks.test.ts b/app/src/local-resources/instruments/__tests__/hooks.test.ts similarity index 97% rename from app/src/resources/instruments/__tests__/hooks.test.ts rename to app/src/local-resources/instruments/__tests__/hooks.test.ts index ab21c81525d..94b6043a125 100644 --- a/app/src/resources/instruments/__tests__/hooks.test.ts +++ b/app/src/local-resources/instruments/__tests__/hooks.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import { useIsOEMMode } from '../../robot-settings/hooks' +import { useIsOEMMode } from '/app/resources/robot-settings/hooks' import { useGripperDisplayName, @@ -11,7 +11,7 @@ import { import type { PipetteV2Specs } from '@opentrons/shared-data' -vi.mock('../../robot-settings/hooks') +vi.mock('/app/resources/robot-settings/hooks') const BRANDED_P1000_FLEX_DISPLAY_NAME = 'Flex 1-Channel 1000 μL' const ANONYMOUS_P1000_FLEX_DISPLAY_NAME = '1-Channel 1000 μL' diff --git a/app/src/resources/instruments/hooks.ts b/app/src/local-resources/instruments/hooks.ts similarity index 96% rename from app/src/resources/instruments/hooks.ts rename to app/src/local-resources/instruments/hooks.ts index 32135d716a4..713dd6f1c83 100644 --- a/app/src/resources/instruments/hooks.ts +++ b/app/src/local-resources/instruments/hooks.ts @@ -5,7 +5,7 @@ import { getPipetteSpecsV2, GRIPPER_MODELS, } from '@opentrons/shared-data' -import { useIsOEMMode } from '../robot-settings/hooks' +import { useIsOEMMode } from '/app/resources/robot-settings/hooks' import type { GripperModel, diff --git a/app/src/local-resources/instruments/index.ts b/app/src/local-resources/instruments/index.ts new file mode 100644 index 00000000000..fc78d35129c --- /dev/null +++ b/app/src/local-resources/instruments/index.ts @@ -0,0 +1 @@ +export * from './hooks' diff --git a/app/src/local-resources/labware/utils/index.ts b/app/src/local-resources/labware/utils/index.ts index f1368b03c6f..310ed3f065a 100644 --- a/app/src/local-resources/labware/utils/index.ts +++ b/app/src/local-resources/labware/utils/index.ts @@ -1 +1,2 @@ export * from './getAllDefinitions' +export * from './labwareImages' diff --git a/app/src/organisms/CalibrationPanels/labwareImages.ts b/app/src/local-resources/labware/utils/labwareImages.ts similarity index 100% rename from app/src/organisms/CalibrationPanels/labwareImages.ts rename to app/src/local-resources/labware/utils/labwareImages.ts diff --git a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/utils.test.ts b/app/src/local-resources/modules/__tests__/getModuleImage.test.ts similarity index 77% rename from app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/utils.test.ts rename to app/src/local-resources/modules/__tests__/getModuleImage.test.ts index 2e4639a3c98..4fc7b870253 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/utils.test.ts +++ b/app/src/local-resources/modules/__tests__/getModuleImage.test.ts @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest' -import { getFixtureImage, getModuleImage } from '../utils' +import { getModuleImage } from '../getModuleImage' describe('getModuleImage', () => { it('should render the magnetic module image when the model is a magnetic module gen 1', () => { @@ -82,26 +82,3 @@ describe('getModuleImage', () => { expect(result).toEqual('/app/src/assets/images/magnetic_block_gen_1.png') }) }) - -describe('getFixtureImage', () => { - it('should render the staging area image', () => { - const result = getFixtureImage('stagingAreaRightSlot') - expect(result).toEqual('/app/src/assets/images/staging_area_slot.png') - }) - it('should render the waste chute image', () => { - const result = getFixtureImage('wasteChuteRightAdapterNoCover') - expect(result).toEqual('/app/src/assets/images/waste_chute.png') - }) - it('should render the waste chute staging area image', () => { - const result = getFixtureImage( - 'stagingAreaSlotWithWasteChuteRightAdapterCovered' - ) - expect(result).toEqual( - '/app/src/assets/images/waste_chute_with_staging_area.png' - ) - }) - it('should render the trash bin image', () => { - const result = getFixtureImage('trashBinAdapter') - expect(result).toEqual('/app/src/assets/images/flex_trash_bin.png') - }) -}) diff --git a/app/src/local-resources/modules/getModuleImage.ts b/app/src/local-resources/modules/getModuleImage.ts new file mode 100644 index 00000000000..3e8e6a92682 --- /dev/null +++ b/app/src/local-resources/modules/getModuleImage.ts @@ -0,0 +1,36 @@ +import magneticModule from '/app/assets/images/magnetic_module_gen_2_transparent.png' +import temperatureModule from '/app/assets/images/temp_deck_gen_2_transparent.png' +import thermoModuleGen1 from '/app/assets/images/thermocycler_closed.png' +import heaterShakerModule from '/app/assets/images/heater_shaker_module_transparent.png' +import magneticModuleHighRes from '/app/assets/images/modules/magneticModuleV2@3x.png' +import temperatureModuleHighRes from '/app/assets/images/modules/temperatureModuleV2@3x.png' +import thermoModuleGen1HighRes from '/app/assets/images/modules/thermocyclerModuleV1@3x.png' +import heaterShakerModuleHighRes from '/app/assets/images/modules/heaterShakerModuleV1@3x.png' +import thermoModuleGen2 from '/app/assets/images/thermocycler_gen_2_closed.png' +import magneticBlockGen1 from '/app/assets/images/magnetic_block_gen_1.png' + +import type { ModuleModel } from '@opentrons/shared-data' + +export function getModuleImage( + model: ModuleModel, + highRes: boolean = false +): string { + switch (model) { + case 'magneticModuleV1': + case 'magneticModuleV2': + return highRes ? magneticModuleHighRes : magneticModule + case 'temperatureModuleV1': + case 'temperatureModuleV2': + return highRes ? temperatureModuleHighRes : temperatureModule + case 'heaterShakerModuleV1': + return highRes ? heaterShakerModuleHighRes : heaterShakerModule + case 'thermocyclerModuleV1': + return highRes ? thermoModuleGen1HighRes : thermoModuleGen1 + case 'thermocyclerModuleV2': + return thermoModuleGen2 + case 'magneticBlockV1': + return magneticBlockGen1 + default: + return 'Error: unknown module model' + } +} diff --git a/app/src/organisms/Devices/getModulePrepCommands.ts b/app/src/local-resources/modules/getModulePrepCommands.ts similarity index 100% rename from app/src/organisms/Devices/getModulePrepCommands.ts rename to app/src/local-resources/modules/getModulePrepCommands.ts diff --git a/app/src/local-resources/modules/index.ts b/app/src/local-resources/modules/index.ts new file mode 100644 index 00000000000..e508be48e92 --- /dev/null +++ b/app/src/local-resources/modules/index.ts @@ -0,0 +1,2 @@ +export * from './getModulePrepCommands' +export * from './getModuleImage' diff --git a/app/src/molecules/BackgroundOverlay/__tests__/BackgroundOverlay.test.tsx b/app/src/molecules/BackgroundOverlay/__tests__/BackgroundOverlay.test.tsx index 73648cd15b8..e09b3c11765 100644 --- a/app/src/molecules/BackgroundOverlay/__tests__/BackgroundOverlay.test.tsx +++ b/app/src/molecules/BackgroundOverlay/__tests__/BackgroundOverlay.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, expect, vi } from 'vitest' import { fireEvent, screen } from '@testing-library/react' import { renderWithProviders } from '/app/__testing-utils__' diff --git a/app/src/molecules/BackgroundOverlay/index.tsx b/app/src/molecules/BackgroundOverlay/index.tsx index ccfdb273fc4..3d6c6d976c6 100644 --- a/app/src/molecules/BackgroundOverlay/index.tsx +++ b/app/src/molecules/BackgroundOverlay/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { css } from 'styled-components' import { COLORS, Flex, POSITION_FIXED } from '@opentrons/components' diff --git a/app/src/molecules/CardButton/CardButton.stories.tsx b/app/src/molecules/CardButton/CardButton.stories.tsx index 67256590b4b..3d80e18a3bb 100644 --- a/app/src/molecules/CardButton/CardButton.stories.tsx +++ b/app/src/molecules/CardButton/CardButton.stories.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { Flex, ICON_DATA_BY_NAME, diff --git a/app/src/molecules/CardButton/__tests__/CardButton.test.tsx b/app/src/molecules/CardButton/__tests__/CardButton.test.tsx index ceff9582c21..820dfbdc4e9 100644 --- a/app/src/molecules/CardButton/__tests__/CardButton.test.tsx +++ b/app/src/molecules/CardButton/__tests__/CardButton.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import '@testing-library/jest-dom/vitest' import { describe, it, expect, vi, beforeEach } from 'vitest' diff --git a/app/src/molecules/CardButton/index.tsx b/app/src/molecules/CardButton/index.tsx index 2b8a6293198..86ed6e3731a 100644 --- a/app/src/molecules/CardButton/index.tsx +++ b/app/src/molecules/CardButton/index.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useNavigate } from 'react-router-dom' import { css } from 'styled-components' import { diff --git a/app/src/molecules/CollapsibleSection/__tests__/CollapsibleSection.test.tsx b/app/src/molecules/CollapsibleSection/__tests__/CollapsibleSection.test.tsx index 2a444b25a65..3acef8b4a29 100644 --- a/app/src/molecules/CollapsibleSection/__tests__/CollapsibleSection.test.tsx +++ b/app/src/molecules/CollapsibleSection/__tests__/CollapsibleSection.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import '@testing-library/jest-dom/vitest' import { describe, it, expect } from 'vitest' import { fireEvent, render, screen } from '@testing-library/react' diff --git a/app/src/molecules/Command/Command.stories.tsx b/app/src/molecules/Command/Command.stories.tsx index 6cba996f21a..43e81fa5541 100644 --- a/app/src/molecules/Command/Command.stories.tsx +++ b/app/src/molecules/Command/Command.stories.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { Command as CommandComponent } from '.' import type { CommandState } from './Command' import * as Fixtures from './__fixtures__' @@ -19,7 +18,7 @@ interface StorybookArgs { } const availableCommandTypes = uniq( - Fixtures.mockQIASeqTextData.commands.map(command => command.commandType) + Fixtures.mockDoItAllTextData.commands.map(command => command.commandType) ) const commandsByType: Partial> = {} @@ -27,7 +26,7 @@ function commandsOfType(type: CommandType): RunTimeCommand[] { if (type in commandsByType) { return commandsByType[type] } - commandsByType[type] = Fixtures.mockQIASeqTextData.commands.filter( + commandsByType[type] = Fixtures.mockDoItAllTextData.commands.filter( command => command.commandType === type ) return commandsByType[type] @@ -44,8 +43,8 @@ function safeCommandOfType(type: CommandType, index: number): RunTimeCommand { function Wrapper(props: StorybookArgs): JSX.Element { const command = props.selectCommandBy === 'protocol index' - ? Fixtures.mockQIASeqTextData.commands[ - props.commandIndex < Fixtures.mockQIASeqTextData.commands.length + ? Fixtures.mockDoItAllTextData.commands[ + props.commandIndex < Fixtures.mockDoItAllTextData.commands.length ? props.commandIndex : -1 ] @@ -53,7 +52,7 @@ function Wrapper(props: StorybookArgs): JSX.Element { return command == null ? null : ( = { control: { type: 'range', min: 0, - max: Fixtures.mockQIASeqTextData.commands.length - 1, + max: Fixtures.mockDoItAllTextData.commands.length - 1, }, defaultValue: 0, if: { arg: 'selectCommandBy', eq: 'protocol index' }, @@ -162,6 +161,16 @@ export const ThermocyclerProfile: Story = { }, } +export const ThermocyclerExtendedProfile: Story = { + args: { + selectCommandBy: 'command type', + commandType: 'thermocycler/runExtendedProfile', + commandTypeIndex: 0, + aligned: 'left', + state: 'current', + }, +} + export const VeryLongCommand: Story = { args: { selectCommandBy: 'command type', diff --git a/app/src/molecules/Command/Command.tsx b/app/src/molecules/Command/Command.tsx index cf7e5ce0d92..32d95a33371 100644 --- a/app/src/molecules/Command/Command.tsx +++ b/app/src/molecules/Command/Command.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { Flex, JUSTIFY_CENTER, diff --git a/app/src/molecules/Command/CommandIcon.stories.tsx b/app/src/molecules/Command/CommandIcon.stories.tsx index 4312d585554..4452a67cefb 100644 --- a/app/src/molecules/Command/CommandIcon.stories.tsx +++ b/app/src/molecules/Command/CommandIcon.stories.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { CommandIcon as CommandIconComponent } from './CommandIcon' import type { ICON_BY_COMMAND_TYPE } from './CommandIcon' diff --git a/app/src/molecules/Command/CommandIcon.tsx b/app/src/molecules/Command/CommandIcon.tsx index 77eb4ef3914..4002de50973 100644 --- a/app/src/molecules/Command/CommandIcon.tsx +++ b/app/src/molecules/Command/CommandIcon.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { Icon } from '@opentrons/components' import type { IconName, StyleProps } from '@opentrons/components' import type { RunTimeCommand } from '@opentrons/shared-data' diff --git a/app/src/molecules/Command/CommandIndex.tsx b/app/src/molecules/Command/CommandIndex.tsx index bcabae9ef90..6357d372486 100644 --- a/app/src/molecules/Command/CommandIndex.tsx +++ b/app/src/molecules/Command/CommandIndex.tsx @@ -1,5 +1,3 @@ -import * as React from 'react' - import { StyledText, RESPONSIVENESS, diff --git a/app/src/molecules/Command/CommandText.stories.tsx b/app/src/molecules/Command/CommandText.stories.tsx index fa361be59dc..f6b40e0a4e4 100644 --- a/app/src/molecules/Command/CommandText.stories.tsx +++ b/app/src/molecules/Command/CommandText.stories.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { Box } from '@opentrons/components' import { CommandText as CommandTextComponent } from '.' import type { RobotType } from '@opentrons/shared-data' diff --git a/app/src/molecules/Command/CommandText.tsx b/app/src/molecules/Command/CommandText.tsx index 75b12733eca..00c7337104b 100644 --- a/app/src/molecules/Command/CommandText.tsx +++ b/app/src/molecules/Command/CommandText.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { pick } from 'lodash' import { @@ -16,6 +16,10 @@ import { useCommandTextString } from './hooks' import type { RobotType, RunTimeCommand } from '@opentrons/shared-data' import type { StyleProps } from '@opentrons/components' import type { CommandTextData } from './types' +import type { + GetTCRunExtendedProfileCommandTextResult, + GetTCRunProfileCommandTextResult, +} from './hooks' interface LegacySTProps { as?: React.ComponentProps['as'] @@ -39,22 +43,35 @@ interface BaseProps extends StyleProps { propagateTextLimit?: boolean } export function CommandText(props: BaseProps & STProps): JSX.Element | null { - const { commandText, stepTexts } = useCommandTextString({ + const commandText = useCommandTextString({ ...props, }) - switch (props.command.commandType) { + switch (commandText.kind) { case 'thermocycler/runProfile': { return ( + ) + } + case 'thermocycler/runExtendedProfile': { + return ( + ) } default: { - return {commandText} + return ( + + {commandText.commandText} + + ) } } } @@ -91,11 +108,18 @@ function CommandStyledText( } } +const shouldPropagateCenter = ( + propagateCenter: boolean, + isOnDevice?: boolean +): boolean => isOnDevice === true || propagateCenter +const shouldPropagateTextLimit = ( + propagateTextLimit: boolean, + isOnDevice?: boolean +): boolean => isOnDevice === true || propagateTextLimit + type ThermocyclerRunProfileProps = BaseProps & - STProps & { - commandText: string - stepTexts?: string[] - } + STProps & + Omit function ThermocyclerRunProfile( props: ThermocyclerRunProfileProps @@ -109,9 +133,6 @@ function ThermocyclerRunProfile( ...styleProps } = props - const shouldPropagateCenter = isOnDevice === true || propagateCenter - const shouldPropagateTextLimit = isOnDevice === true || propagateTextLimit - // TODO(sfoster): Command sometimes wraps this in a cascaded display: -webkit-box // to achieve multiline text clipping with an automatically inserted ellipsis, which works // everywhere except for here where it overrides this property in the flex since this is @@ -124,7 +145,11 @@ function ThermocyclerRunProfile(
    - {shouldPropagateTextLimit ? ( + {shouldPropagateTextLimit(propagateTextLimit, isOnDevice) ? (
  • - {stepTexts?.[0]} + {stepTexts[0]}
  • ) : ( - stepTexts?.map((step: string, index: number) => ( + stepTexts.map((step: string, index: number) => (
  • ) } + +type ThermocyclerRunExtendedProfileProps = BaseProps & + STProps & + Omit + +function ThermocyclerRunExtendedProfile( + props: ThermocyclerRunExtendedProfileProps +): JSX.Element { + const { + isOnDevice, + propagateCenter = false, + propagateTextLimit = false, + commandText, + profileElementTexts, + ...styleProps + } = props + + // TODO(sfoster): Command sometimes wraps this in a cascaded display: -webkit-box + // to achieve multiline text clipping with an automatically inserted ellipsis, which works + // everywhere except for here where it overrides this property in the flex since this is + // the only place where CommandText uses a flex. + // The right way to handle this is probably to take the css that's in Command and make it + // live here instead, but that should be done in a followup since it would touch everything. + // See also the margin-left on the
  • s, which is needed to prevent their bullets from + // clipping if a container set overflow: hidden. + return ( + + + {commandText} + + +
      + {shouldPropagateTextLimit(propagateTextLimit, isOnDevice) ? ( +
    • + {profileElementTexts[0].kind === 'step' + ? profileElementTexts[0].stepText + : profileElementTexts[0].cycleText} +
    • + ) : ( + profileElementTexts.map((element, index: number) => + element.kind === 'step' ? ( +
    • + {' '} + {element.stepText} +
    • + ) : ( +
    • + {element.cycleText} +
        + {element.stepTexts.map( + ({ stepText }, stepIndex: number) => ( +
      • + {' '} + {stepText} +
      • + ) + )} +
      +
    • + ) + ) + )} +
    +
    +
    + ) +} diff --git a/app/src/molecules/Command/__fixtures__/doItAllV10.json b/app/src/molecules/Command/__fixtures__/doItAllV10.json new file mode 100644 index 00000000000..83030179e79 --- /dev/null +++ b/app/src/molecules/Command/__fixtures__/doItAllV10.json @@ -0,0 +1,4863 @@ +{ + "id": "lasdlakjjflaksjdlkajsldkasd", + "result": "ok", + "status": "completed", + "createdAt": "2024-06-12T17:21:56.919263+00:00", + "files": [ + { "name": "doItAllV8.json", "role": "main" }, + { "name": "cpx_4_tuberack_100ul.json", "role": "labware" } + ], + "config": { "protocolType": "json", "schemaVersion": 8 }, + "metadata": { + "protocolName": "doItAllV10", + "author": "", + "description": "", + "created": 1701659107408, + "lastModified": 1714570438503, + "category": null, + "subcategory": null, + "tags": [] + }, + "robotType": "OT-3 Standard", + "runTimeParameters": [], + "commands": [ + { + "id": "70fbbc6c-d86a-4e66-9361-25de75552da6", + "createdAt": "2024-06-12T17:21:57.915484+00:00", + "commandType": "thermocycler/runProfile", + "key": "5ec88b6a-2c2c-4ffc-961f-c6e0dd300b49", + "status": "succeeded", + "params": { + "moduleId": "fd6da9f1-d63b-414b-929e-c646b64790e9:thermocyclerModuleType", + "profile": [ + { "holdSeconds": 1, "celsius": 9 }, + { "holdSeconds": 2, "celsius": 10 }, + { "holdSeconds": 3, "celsius": 11 }, + { "holdSeconds": 4, "celsius": 12 }, + { "holdSeconds": 5, "celsius": 13 }, + { "holdSeconds": 6, "celsius": 14 }, + { "holdSeconds": 7, "celsius": 15 }, + { "holdSeconds": 8, "celsius": 16 }, + { "holdSeconds": 9, "celsius": 17 }, + { "holdSeconds": 10, "celsius": 18 }, + { "holdSeconds": 11, "celsius": 19 }, + { "holdSeconds": 12, "celsius": 20 }, + { "holdSeconds": 1, "celsius": 9 }, + { "holdSeconds": 2, "celsius": 10 }, + { "holdSeconds": 3, "celsius": 11 }, + { "holdSeconds": 4, "celsius": 12 }, + { "holdSeconds": 5, "celsius": 13 }, + { "holdSeconds": 6, "celsius": 14 }, + { "holdSeconds": 7, "celsius": 15 }, + { "holdSeconds": 8, "celsius": 16 }, + { "holdSeconds": 9, "celsius": 17 }, + { "holdSeconds": 10, "celsius": 18 }, + { "holdSeconds": 11, "celsius": 19 }, + { "holdSeconds": 12, "celsius": 20 } + ], + "blockMaxVolumeUl": 10 + }, + "result": {}, + "startedAt": "2024-06-12T17:21:57.915517+00:00", + "completedAt": "2024-06-12T17:21:57.915543+00:00", + "notes": [] + }, + { + "id": "70fbbc6c-d86a-4e66-9361-25de75552da6", + "createdAt": "2024-06-12T17:21:57.915484+00:00", + "commandType": "thermocycler/runExtendedProfile", + "key": "5ec22b6a-2c2c-4bbc-961f-c6e0aa211b49", + "status": "succeeded", + "params": { + "moduleId": "f99da9f1-d63b-414b-929e-c646b23790fd:thermocyclerModuleType", + "profileElements": [ + { + "repetitions": 10, + "steps": [ + { "holdSeconds": 2, "celsius": 10 }, + { "holdSeconds": 3, "celsius": 11 }, + { "holdSeconds": 4, "celsius": 12 } + ] + }, + { "holdSeconds": 1, "celsius": 9 }, + { "holdSeconds": 5, "celsius": 13 }, + { + "repetitions": 20, + "steps": [ + { "holdSeconds": 6, "celsius": 14 }, + { "holdSeconds": 7, "celsius": 15 }, + { "holdSeconds": 8, "celsius": 16 } + ] + }, + { "holdSeconds": 9, "celsius": 17 }, + { + "repetitions": 30, + "steps": [ + { "holdSeconds": 10, "celsius": 18 }, + { "holdSeconds": 11, "celsius": 19 }, + { "holdSeconds": 12, "celsius": 20 } + ] + }, + { "holdSeconds": 1, "celsius": 9 }, + { + "repetitions": 40, + "steps": [ + { "holdSeconds": 2, "celsius": 10 }, + { "holdSeconds": 3, "celsius": 11 }, + { "holdSeconds": 4, "celsius": 12 } + ] + }, + { "holdSeconds": 5, "celsius": 13 }, + { + "repetitions": 50, + "steps": [ + { "holdSeconds": 6, "celsius": 14 }, + { "holdSeconds": 7, "celsius": 15 }, + { "holdSeconds": 8, "celsius": 16 } + ] + }, + { "holdSeconds": 9, "celsius": 17 }, + { + "repetitions": 60, + "steps": [ + { "holdSeconds": 10, "celsius": 18 }, + { "holdSeconds": 11, "celsius": 19 }, + { "holdSeconds": 12, "celsius": 20 } + ] + } + ], + "blockMaxVolumeUl": 10 + }, + "result": {}, + "startedAt": "2024-06-12T17:21:57.915517+00:00", + "completedAt": "2024-06-12T17:21:57.915543+00:00", + "notes": [] + }, + { + "id": "8f0be368-dc25-4f2a-92b9-a734ad622d4b", + "createdAt": "2024-06-12T17:21:56.894269+00:00", + "commandType": "home", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "status": "succeeded", + "params": {}, + "result": {}, + "startedAt": "2024-06-12T17:21:56.894479+00:00", + "completedAt": "2024-06-12T17:21:56.894522+00:00", + "notes": [] + }, + { + "id": "c744767e-f5a4-408d-bc28-d46a2bd17297", + "createdAt": "2024-06-12T17:21:56.894706+00:00", + "commandType": "loadPipette", + "key": "a1b95079-5b17-428d-b40c-a8236a9890c5", + "status": "succeeded", + "params": { + "pipetteName": "p1000_single_flex", + "mount": "left", + "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc" + }, + "result": { "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc" }, + "startedAt": "2024-06-12T17:21:56.894767+00:00", + "completedAt": "2024-06-12T17:21:56.898018+00:00", + "notes": [] + }, + { + "id": "684793b1-7401-4291-ac0f-e95d61e49e07", + "createdAt": "2024-06-12T17:21:56.898252+00:00", + "commandType": "loadModule", + "key": "6f1e3ad3-8f03-4583-8031-be6be2fcd903", + "status": "succeeded", + "params": { + "model": "heaterShakerModuleV1", + "location": { "slotName": "D1" }, + "moduleId": "23347241-80bb-4a7e-9c91-5d9727a9e483:heaterShakerModuleType" + }, + "result": { + "moduleId": "23347241-80bb-4a7e-9c91-5d9727a9e483:heaterShakerModuleType", + "definition": { + "otSharedSchema": "module/schemas/2", + "moduleType": "heaterShakerModuleType", + "model": "heaterShakerModuleV1", + "labwareOffset": { "x": -0.125, "y": 1.125, "z": 68.275 }, + "dimensions": { "bareOverallHeight": 82.0, "overLabwareHeight": 0.0 }, + "calibrationPoint": { "x": 12.0, "y": 8.75, "z": 68.275 }, + "displayName": "Heater-Shaker Module GEN1", + "quirks": [], + "slotTransforms": { + "ot2_standard": { + "3": { + "labwareOffset": [ + [-1, 0, 0, 0], + [0, -1, 0, 0], + [0, 0, 1, 0], + [0, 0, 0, 1] + ] + }, + "6": { + "labwareOffset": [ + [-1, 0, 0, 0], + [0, -1, 0, 0], + [0, 0, 1, 0], + [0, 0, 0, 1] + ] + }, + "9": { + "labwareOffset": [ + [-1, 0, 0, 0], + [0, -1, 0, 0], + [0, 0, 1, 0], + [0, 0, 0, 1] + ] + } + }, + "ot2_short_trash": { + "3": { + "labwareOffset": [ + [-1, 0, 0, 0], + [0, -1, 0, 0], + [0, 0, 1, 0], + [0, 0, 0, 1] + ] + }, + "6": { + "labwareOffset": [ + [-1, 0, 0, 0], + [0, -1, 0, 0], + [0, 0, 1, 0], + [0, 0, 0, 1] + ] + }, + "9": { + "labwareOffset": [ + [-1, 0, 0, 0], + [0, -1, 0, 0], + [0, 0, 1, 0], + [0, 0, 0, 1] + ] + } + }, + "ot3_standard": { + "D1": { + "labwareOffset": [ + [1, 0, 0, 0.125], + [0, 1, 0, -1.125], + [0, 0, 1, -49.325], + [0, 0, 0, 1] + ] + }, + "C1": { + "labwareOffset": [ + [1, 0, 0, 0.125], + [0, 1, 0, -1.125], + [0, 0, 1, -49.325], + [0, 0, 0, 1] + ] + }, + "B1": { + "labwareOffset": [ + [1, 0, 0, 0.125], + [0, 1, 0, -1.125], + [0, 0, 1, -49.325], + [0, 0, 0, 1] + ] + }, + "A1": { + "labwareOffset": [ + [1, 0, 0, 0.125], + [0, 1, 0, -1.125], + [0, 0, 1, -49.325], + [0, 0, 0, 1] + ] + }, + "D3": { + "labwareOffset": [ + [1, 0, 0, 0.125], + [0, 1, 0, -1.125], + [0, 0, 1, -49.325], + [0, 0, 0, 1] + ] + }, + "C3": { + "labwareOffset": [ + [1, 0, 0, 0.125], + [0, 1, 0, -1.125], + [0, 0, 1, -49.325], + [0, 0, 0, 1] + ] + }, + "B3": { + "labwareOffset": [ + [1, 0, 0, 0.125], + [0, 1, 0, -1.125], + [0, 0, 1, -49.325], + [0, 0, 0, 1] + ] + }, + "A3": { + "labwareOffset": [ + [1, 0, 0, 0.125], + [0, 1, 0, -1.125], + [0, 0, 1, -49.325], + [0, 0, 0, 1] + ] + } + } + }, + "compatibleWith": [], + "gripperOffsets": { + "default": { + "pickUpOffset": { "x": 0.0, "y": 0.0, "z": 0.0 }, + "dropOffset": { "x": 0.0, "y": 0.0, "z": 1.0 } + } + } + }, + "model": "heaterShakerModuleV1", + "serialNumber": "fake-serial-number-0d06c2c1-3ee4-467d-b1cb-31ce8a260ff5" + }, + "startedAt": "2024-06-12T17:21:56.898296+00:00", + "completedAt": "2024-06-12T17:21:56.898586+00:00", + "notes": [] + }, + { + "id": "a72762a6-d894-4a48-91a0-1e0e46ae41e4", + "createdAt": "2024-06-12T17:21:56.898811+00:00", + "commandType": "loadModule", + "key": "4997a543-7788-434f-8eae-1c4aa3a2a805", + "status": "succeeded", + "params": { + "model": "thermocyclerModuleV2", + "location": { "slotName": "B1" }, + "moduleId": "fd6da9f1-d63b-414b-929e-c646b64790e9:thermocyclerModuleType" + }, + "result": { + "moduleId": "fd6da9f1-d63b-414b-929e-c646b64790e9:thermocyclerModuleType", + "definition": { + "otSharedSchema": "module/schemas/2", + "moduleType": "thermocyclerModuleType", + "model": "thermocyclerModuleV2", + "labwareOffset": { "x": 0.0, "y": 68.8, "z": 108.96 }, + "dimensions": { + "bareOverallHeight": 108.96, + "overLabwareHeight": 0.0, + "lidHeight": 61.7 + }, + "calibrationPoint": { "x": 14.4, "y": 64.93, "z": 97.8 }, + "displayName": "Thermocycler Module GEN2", + "quirks": [], + "slotTransforms": { + "ot3_standard": { + "B1": { + "labwareOffset": [ + [1, 0, 0, -20.005], + [0, 1, 0, -0.84], + [0, 0, 1, -98], + [0, 0, 0, 1] + ], + "cornerOffsetFromSlot": [ + [1, 0, 0, -20.005], + [0, 1, 0, -0.84], + [0, 0, 1, -98], + [0, 0, 0, 1] + ] + } + } + }, + "compatibleWith": [], + "gripperOffsets": { + "default": { + "pickUpOffset": { "x": 0.0, "y": 0.0, "z": 4.6 }, + "dropOffset": { "x": 0.0, "y": 0.0, "z": 5.6 } + } + } + }, + "model": "thermocyclerModuleV2", + "serialNumber": "fake-serial-number-abe43d5b-1dd7-4fa9-bf8b-b089236d5adb" + }, + "startedAt": "2024-06-12T17:21:56.898850+00:00", + "completedAt": "2024-06-12T17:21:56.899485+00:00", + "notes": [] + }, + { + "id": "e141cd5f-7c92-4c89-aea6-79057400ee5d", + "createdAt": "2024-06-12T17:21:56.899614+00:00", + "commandType": "loadLabware", + "key": "8bfb6d48-4d08-4ea0-8ce7-f8efe90e202c", + "status": "succeeded", + "params": { + "location": { + "moduleId": "23347241-80bb-4a7e-9c91-5d9727a9e483:heaterShakerModuleType" + }, + "loadName": "opentrons_96_pcr_adapter", + "namespace": "opentrons", + "version": 1, + "labwareId": "7c4d59fa-0e50-442f-adce-9e4b0c7f0b88:opentrons/opentrons_96_pcr_adapter/1", + "displayName": "Opentrons 96 PCR Heater-Shaker Adapter" + }, + "result": { + "labwareId": "7c4d59fa-0e50-442f-adce-9e4b0c7f0b88:opentrons/opentrons_96_pcr_adapter/1", + "definition": { + "schemaVersion": 2, + "version": 1, + "namespace": "opentrons", + "metadata": { + "displayName": "Opentrons 96 PCR Heater-Shaker Adapter", + "displayCategory": "adapter", + "displayVolumeUnits": "\u00b5L", + "tags": [] + }, + "brand": { "brand": "Opentrons", "brandId": [] }, + "parameters": { + "format": "96Standard", + "quirks": [], + "isTiprack": false, + "loadName": "opentrons_96_pcr_adapter", + "isMagneticModuleCompatible": false + }, + "ordering": [ + ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"], + ["A2", "B2", "C2", "D2", "E2", "F2", "G2", "H2"], + ["A3", "B3", "C3", "D3", "E3", "F3", "G3", "H3"], + ["A4", "B4", "C4", "D4", "E4", "F4", "G4", "H4"], + ["A5", "B5", "C5", "D5", "E5", "F5", "G5", "H5"], + ["A6", "B6", "C6", "D6", "E6", "F6", "G6", "H6"], + ["A7", "B7", "C7", "D7", "E7", "F7", "G7", "H7"], + ["A8", "B8", "C8", "D8", "E8", "F8", "G8", "H8"], + ["A9", "B9", "C9", "D9", "E9", "F9", "G9", "H9"], + ["A10", "B10", "C10", "D10", "E10", "F10", "G10", "H10"], + ["A11", "B11", "C11", "D11", "E11", "F11", "G11", "H11"], + ["A12", "B12", "C12", "D12", "E12", "F12", "G12", "H12"] + ], + "cornerOffsetFromSlot": { "x": 8.5, "y": 5.5, "z": 0 }, + "dimensions": { + "yDimension": 75, + "zDimension": 13.85, + "xDimension": 111 + }, + "wells": { + "A1": { + "depth": 12, + "x": 6, + "y": 69, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "B1": { + "depth": 12, + "x": 6, + "y": 60, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "C1": { + "depth": 12, + "x": 6, + "y": 51, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "D1": { + "depth": 12, + "x": 6, + "y": 42, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "E1": { + "depth": 12, + "x": 6, + "y": 33, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "F1": { + "depth": 12, + "x": 6, + "y": 24, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "G1": { + "depth": 12, + "x": 6, + "y": 15, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "H1": { + "depth": 12, + "x": 6, + "y": 6, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "A2": { + "depth": 12, + "x": 15, + "y": 69, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "B2": { + "depth": 12, + "x": 15, + "y": 60, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "C2": { + "depth": 12, + "x": 15, + "y": 51, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "D2": { + "depth": 12, + "x": 15, + "y": 42, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "E2": { + "depth": 12, + "x": 15, + "y": 33, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "F2": { + "depth": 12, + "x": 15, + "y": 24, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "G2": { + "depth": 12, + "x": 15, + "y": 15, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "H2": { + "depth": 12, + "x": 15, + "y": 6, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "A3": { + "depth": 12, + "x": 24, + "y": 69, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "B3": { + "depth": 12, + "x": 24, + "y": 60, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "C3": { + "depth": 12, + "x": 24, + "y": 51, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "D3": { + "depth": 12, + "x": 24, + "y": 42, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "E3": { + "depth": 12, + "x": 24, + "y": 33, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "F3": { + "depth": 12, + "x": 24, + "y": 24, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "G3": { + "depth": 12, + "x": 24, + "y": 15, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "H3": { + "depth": 12, + "x": 24, + "y": 6, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "A4": { + "depth": 12, + "x": 33, + "y": 69, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "B4": { + "depth": 12, + "x": 33, + "y": 60, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "C4": { + "depth": 12, + "x": 33, + "y": 51, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "D4": { + "depth": 12, + "x": 33, + "y": 42, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "E4": { + "depth": 12, + "x": 33, + "y": 33, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "F4": { + "depth": 12, + "x": 33, + "y": 24, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "G4": { + "depth": 12, + "x": 33, + "y": 15, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "H4": { + "depth": 12, + "x": 33, + "y": 6, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "A5": { + "depth": 12, + "x": 42, + "y": 69, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "B5": { + "depth": 12, + "x": 42, + "y": 60, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "C5": { + "depth": 12, + "x": 42, + "y": 51, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "D5": { + "depth": 12, + "x": 42, + "y": 42, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "E5": { + "depth": 12, + "x": 42, + "y": 33, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "F5": { + "depth": 12, + "x": 42, + "y": 24, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "G5": { + "depth": 12, + "x": 42, + "y": 15, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "H5": { + "depth": 12, + "x": 42, + "y": 6, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "A6": { + "depth": 12, + "x": 51, + "y": 69, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "B6": { + "depth": 12, + "x": 51, + "y": 60, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "C6": { + "depth": 12, + "x": 51, + "y": 51, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "D6": { + "depth": 12, + "x": 51, + "y": 42, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "E6": { + "depth": 12, + "x": 51, + "y": 33, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "F6": { + "depth": 12, + "x": 51, + "y": 24, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "G6": { + "depth": 12, + "x": 51, + "y": 15, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "H6": { + "depth": 12, + "x": 51, + "y": 6, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "A7": { + "depth": 12, + "x": 60, + "y": 69, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "B7": { + "depth": 12, + "x": 60, + "y": 60, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "C7": { + "depth": 12, + "x": 60, + "y": 51, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "D7": { + "depth": 12, + "x": 60, + "y": 42, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "E7": { + "depth": 12, + "x": 60, + "y": 33, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "F7": { + "depth": 12, + "x": 60, + "y": 24, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "G7": { + "depth": 12, + "x": 60, + "y": 15, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "H7": { + "depth": 12, + "x": 60, + "y": 6, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "A8": { + "depth": 12, + "x": 69, + "y": 69, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "B8": { + "depth": 12, + "x": 69, + "y": 60, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "C8": { + "depth": 12, + "x": 69, + "y": 51, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "D8": { + "depth": 12, + "x": 69, + "y": 42, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "E8": { + "depth": 12, + "x": 69, + "y": 33, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "F8": { + "depth": 12, + "x": 69, + "y": 24, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "G8": { + "depth": 12, + "x": 69, + "y": 15, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "H8": { + "depth": 12, + "x": 69, + "y": 6, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "A9": { + "depth": 12, + "x": 78, + "y": 69, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "B9": { + "depth": 12, + "x": 78, + "y": 60, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "C9": { + "depth": 12, + "x": 78, + "y": 51, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "D9": { + "depth": 12, + "x": 78, + "y": 42, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "E9": { + "depth": 12, + "x": 78, + "y": 33, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "F9": { + "depth": 12, + "x": 78, + "y": 24, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "G9": { + "depth": 12, + "x": 78, + "y": 15, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "H9": { + "depth": 12, + "x": 78, + "y": 6, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "A10": { + "depth": 12, + "x": 87, + "y": 69, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "B10": { + "depth": 12, + "x": 87, + "y": 60, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "C10": { + "depth": 12, + "x": 87, + "y": 51, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "D10": { + "depth": 12, + "x": 87, + "y": 42, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "E10": { + "depth": 12, + "x": 87, + "y": 33, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "F10": { + "depth": 12, + "x": 87, + "y": 24, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "G10": { + "depth": 12, + "x": 87, + "y": 15, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "H10": { + "depth": 12, + "x": 87, + "y": 6, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "A11": { + "depth": 12, + "x": 96, + "y": 69, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "B11": { + "depth": 12, + "x": 96, + "y": 60, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "C11": { + "depth": 12, + "x": 96, + "y": 51, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "D11": { + "depth": 12, + "x": 96, + "y": 42, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "E11": { + "depth": 12, + "x": 96, + "y": 33, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "F11": { + "depth": 12, + "x": 96, + "y": 24, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "G11": { + "depth": 12, + "x": 96, + "y": 15, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "H11": { + "depth": 12, + "x": 96, + "y": 6, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "A12": { + "depth": 12, + "x": 105, + "y": 69, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "B12": { + "depth": 12, + "x": 105, + "y": 60, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "C12": { + "depth": 12, + "x": 105, + "y": 51, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "D12": { + "depth": 12, + "x": 105, + "y": 42, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "E12": { + "depth": 12, + "x": 105, + "y": 33, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "F12": { + "depth": 12, + "x": 105, + "y": 24, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "G12": { + "depth": 12, + "x": 105, + "y": 15, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + }, + "H12": { + "depth": 12, + "x": 105, + "y": 6, + "z": 1.85, + "totalLiquidVolume": 0, + "diameter": 5.64, + "shape": "circular" + } + }, + "groups": [ + { + "wells": [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1", + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2", + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3", + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4", + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5", + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6", + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7", + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8", + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9", + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10", + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11", + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + "metadata": { "wellBottomShape": "v" } + } + ], + "allowedRoles": ["adapter"], + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "gripperOffsets": { + "default": { + "pickUpOffset": { "x": 0, "y": 0, "z": 0 }, + "dropOffset": { "x": 0, "y": 0, "z": 1 } + } + } + } + }, + "startedAt": "2024-06-12T17:21:56.899718+00:00", + "completedAt": "2024-06-12T17:21:56.899792+00:00", + "notes": [] + }, + { + "id": "edd39a48-10ea-4cf1-848f-9484c136714f", + "createdAt": "2024-06-12T17:21:56.899904+00:00", + "commandType": "loadLabware", + "key": "988395e3-9b85-4bb0-89a4-3afc1d7330fd", + "status": "succeeded", + "params": { + "location": { "slotName": "C2" }, + "loadName": "opentrons_flex_96_tiprack_1000ul", + "namespace": "opentrons", + "version": 1, + "labwareId": "f2d371ea-5146-4c89-8200-9c056a7f321a:opentrons/opentrons_flex_96_tiprack_1000ul/1", + "displayName": "Opentrons Flex 96 Tip Rack 1000 \u00b5L" + }, + "result": { + "labwareId": "f2d371ea-5146-4c89-8200-9c056a7f321a:opentrons/opentrons_flex_96_tiprack_1000ul/1", + "definition": { + "schemaVersion": 2, + "version": 1, + "namespace": "opentrons", + "metadata": { + "displayName": "Opentrons Flex 96 Tip Rack 1000 \u00b5L", + "displayCategory": "tipRack", + "displayVolumeUnits": "\u00b5L", + "tags": [] + }, + "brand": { "brand": "Opentrons", "brandId": [] }, + "parameters": { + "format": "96Standard", + "quirks": [], + "isTiprack": true, + "tipLength": 95.6, + "tipOverlap": 10.5, + "loadName": "opentrons_flex_96_tiprack_1000ul", + "isMagneticModuleCompatible": false + }, + "ordering": [ + ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"], + ["A2", "B2", "C2", "D2", "E2", "F2", "G2", "H2"], + ["A3", "B3", "C3", "D3", "E3", "F3", "G3", "H3"], + ["A4", "B4", "C4", "D4", "E4", "F4", "G4", "H4"], + ["A5", "B5", "C5", "D5", "E5", "F5", "G5", "H5"], + ["A6", "B6", "C6", "D6", "E6", "F6", "G6", "H6"], + ["A7", "B7", "C7", "D7", "E7", "F7", "G7", "H7"], + ["A8", "B8", "C8", "D8", "E8", "F8", "G8", "H8"], + ["A9", "B9", "C9", "D9", "E9", "F9", "G9", "H9"], + ["A10", "B10", "C10", "D10", "E10", "F10", "G10", "H10"], + ["A11", "B11", "C11", "D11", "E11", "F11", "G11", "H11"], + ["A12", "B12", "C12", "D12", "E12", "F12", "G12", "H12"] + ], + "cornerOffsetFromSlot": { "x": 0, "y": 0, "z": 0 }, + "dimensions": { + "yDimension": 85.75, + "zDimension": 99, + "xDimension": 127.75 + }, + "wells": { + "A1": { + "depth": 97.5, + "x": 14.38, + "y": 74.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "B1": { + "depth": 97.5, + "x": 14.38, + "y": 65.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "C1": { + "depth": 97.5, + "x": 14.38, + "y": 56.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "D1": { + "depth": 97.5, + "x": 14.38, + "y": 47.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "E1": { + "depth": 97.5, + "x": 14.38, + "y": 38.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "F1": { + "depth": 97.5, + "x": 14.38, + "y": 29.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "G1": { + "depth": 97.5, + "x": 14.38, + "y": 20.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "H1": { + "depth": 97.5, + "x": 14.38, + "y": 11.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "A2": { + "depth": 97.5, + "x": 23.38, + "y": 74.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "B2": { + "depth": 97.5, + "x": 23.38, + "y": 65.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "C2": { + "depth": 97.5, + "x": 23.38, + "y": 56.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "D2": { + "depth": 97.5, + "x": 23.38, + "y": 47.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "E2": { + "depth": 97.5, + "x": 23.38, + "y": 38.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "F2": { + "depth": 97.5, + "x": 23.38, + "y": 29.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "G2": { + "depth": 97.5, + "x": 23.38, + "y": 20.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "H2": { + "depth": 97.5, + "x": 23.38, + "y": 11.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "A3": { + "depth": 97.5, + "x": 32.38, + "y": 74.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "B3": { + "depth": 97.5, + "x": 32.38, + "y": 65.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "C3": { + "depth": 97.5, + "x": 32.38, + "y": 56.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "D3": { + "depth": 97.5, + "x": 32.38, + "y": 47.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "E3": { + "depth": 97.5, + "x": 32.38, + "y": 38.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "F3": { + "depth": 97.5, + "x": 32.38, + "y": 29.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "G3": { + "depth": 97.5, + "x": 32.38, + "y": 20.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "H3": { + "depth": 97.5, + "x": 32.38, + "y": 11.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "A4": { + "depth": 97.5, + "x": 41.38, + "y": 74.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "B4": { + "depth": 97.5, + "x": 41.38, + "y": 65.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "C4": { + "depth": 97.5, + "x": 41.38, + "y": 56.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "D4": { + "depth": 97.5, + "x": 41.38, + "y": 47.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "E4": { + "depth": 97.5, + "x": 41.38, + "y": 38.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "F4": { + "depth": 97.5, + "x": 41.38, + "y": 29.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "G4": { + "depth": 97.5, + "x": 41.38, + "y": 20.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "H4": { + "depth": 97.5, + "x": 41.38, + "y": 11.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "A5": { + "depth": 97.5, + "x": 50.38, + "y": 74.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "B5": { + "depth": 97.5, + "x": 50.38, + "y": 65.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "C5": { + "depth": 97.5, + "x": 50.38, + "y": 56.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "D5": { + "depth": 97.5, + "x": 50.38, + "y": 47.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "E5": { + "depth": 97.5, + "x": 50.38, + "y": 38.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "F5": { + "depth": 97.5, + "x": 50.38, + "y": 29.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "G5": { + "depth": 97.5, + "x": 50.38, + "y": 20.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "H5": { + "depth": 97.5, + "x": 50.38, + "y": 11.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "A6": { + "depth": 97.5, + "x": 59.38, + "y": 74.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "B6": { + "depth": 97.5, + "x": 59.38, + "y": 65.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "C6": { + "depth": 97.5, + "x": 59.38, + "y": 56.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "D6": { + "depth": 97.5, + "x": 59.38, + "y": 47.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "E6": { + "depth": 97.5, + "x": 59.38, + "y": 38.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "F6": { + "depth": 97.5, + "x": 59.38, + "y": 29.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "G6": { + "depth": 97.5, + "x": 59.38, + "y": 20.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "H6": { + "depth": 97.5, + "x": 59.38, + "y": 11.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "A7": { + "depth": 97.5, + "x": 68.38, + "y": 74.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "B7": { + "depth": 97.5, + "x": 68.38, + "y": 65.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "C7": { + "depth": 97.5, + "x": 68.38, + "y": 56.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "D7": { + "depth": 97.5, + "x": 68.38, + "y": 47.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "E7": { + "depth": 97.5, + "x": 68.38, + "y": 38.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "F7": { + "depth": 97.5, + "x": 68.38, + "y": 29.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "G7": { + "depth": 97.5, + "x": 68.38, + "y": 20.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "H7": { + "depth": 97.5, + "x": 68.38, + "y": 11.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "A8": { + "depth": 97.5, + "x": 77.38, + "y": 74.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "B8": { + "depth": 97.5, + "x": 77.38, + "y": 65.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "C8": { + "depth": 97.5, + "x": 77.38, + "y": 56.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "D8": { + "depth": 97.5, + "x": 77.38, + "y": 47.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "E8": { + "depth": 97.5, + "x": 77.38, + "y": 38.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "F8": { + "depth": 97.5, + "x": 77.38, + "y": 29.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "G8": { + "depth": 97.5, + "x": 77.38, + "y": 20.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "H8": { + "depth": 97.5, + "x": 77.38, + "y": 11.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "A9": { + "depth": 97.5, + "x": 86.38, + "y": 74.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "B9": { + "depth": 97.5, + "x": 86.38, + "y": 65.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "C9": { + "depth": 97.5, + "x": 86.38, + "y": 56.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "D9": { + "depth": 97.5, + "x": 86.38, + "y": 47.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "E9": { + "depth": 97.5, + "x": 86.38, + "y": 38.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "F9": { + "depth": 97.5, + "x": 86.38, + "y": 29.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "G9": { + "depth": 97.5, + "x": 86.38, + "y": 20.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "H9": { + "depth": 97.5, + "x": 86.38, + "y": 11.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "A10": { + "depth": 97.5, + "x": 95.38, + "y": 74.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "B10": { + "depth": 97.5, + "x": 95.38, + "y": 65.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "C10": { + "depth": 97.5, + "x": 95.38, + "y": 56.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "D10": { + "depth": 97.5, + "x": 95.38, + "y": 47.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "E10": { + "depth": 97.5, + "x": 95.38, + "y": 38.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "F10": { + "depth": 97.5, + "x": 95.38, + "y": 29.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "G10": { + "depth": 97.5, + "x": 95.38, + "y": 20.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "H10": { + "depth": 97.5, + "x": 95.38, + "y": 11.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "A11": { + "depth": 97.5, + "x": 104.38, + "y": 74.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "B11": { + "depth": 97.5, + "x": 104.38, + "y": 65.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "C11": { + "depth": 97.5, + "x": 104.38, + "y": 56.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "D11": { + "depth": 97.5, + "x": 104.38, + "y": 47.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "E11": { + "depth": 97.5, + "x": 104.38, + "y": 38.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "F11": { + "depth": 97.5, + "x": 104.38, + "y": 29.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "G11": { + "depth": 97.5, + "x": 104.38, + "y": 20.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "H11": { + "depth": 97.5, + "x": 104.38, + "y": 11.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "A12": { + "depth": 97.5, + "x": 113.38, + "y": 74.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "B12": { + "depth": 97.5, + "x": 113.38, + "y": 65.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "C12": { + "depth": 97.5, + "x": 113.38, + "y": 56.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "D12": { + "depth": 97.5, + "x": 113.38, + "y": 47.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "E12": { + "depth": 97.5, + "x": 113.38, + "y": 38.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "F12": { + "depth": 97.5, + "x": 113.38, + "y": 29.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "G12": { + "depth": 97.5, + "x": 113.38, + "y": 20.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + }, + "H12": { + "depth": 97.5, + "x": 113.38, + "y": 11.38, + "z": 1.5, + "totalLiquidVolume": 1000, + "diameter": 5.47, + "shape": "circular" + } + }, + "groups": [ + { + "wells": [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1", + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2", + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3", + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4", + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5", + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6", + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7", + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8", + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9", + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10", + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11", + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + "metadata": {} + } + ], + "allowedRoles": [], + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { "x": 0, "y": 0, "z": 121 } + }, + "stackingOffsetWithModule": {}, + "gripperOffsets": {}, + "gripHeightFromLabwareBottom": 23.9, + "gripForce": 16.0 + } + }, + "startedAt": "2024-06-12T17:21:56.899933+00:00", + "completedAt": "2024-06-12T17:21:56.900034+00:00", + "notes": [] + }, + { + "id": "5607c182-a90d-466e-96fd-45aafaf45b7b", + "createdAt": "2024-06-12T17:21:56.900159+00:00", + "commandType": "loadLabware", + "key": "0d60425e-5a6f-4205-ac59-d38a080f2e92", + "status": "succeeded", + "params": { + "location": { + "moduleId": "fd6da9f1-d63b-414b-929e-c646b64790e9:thermocyclerModuleType" + }, + "loadName": "opentrons_96_wellplate_200ul_pcr_full_skirt", + "namespace": "opentrons", + "version": 2, + "labwareId": "54370838-4fca-4a14-b88a-7840e4903649:opentrons/opentrons_96_wellplate_200ul_pcr_full_skirt/2", + "displayName": "Opentrons Tough 96 Well Plate 200 \u00b5L PCR Full Skirt" + }, + "result": { + "labwareId": "54370838-4fca-4a14-b88a-7840e4903649:opentrons/opentrons_96_wellplate_200ul_pcr_full_skirt/2", + "definition": { + "schemaVersion": 2, + "version": 2, + "namespace": "opentrons", + "metadata": { + "displayName": "Opentrons Tough 96 Well Plate 200 \u00b5L PCR Full Skirt", + "displayCategory": "wellPlate", + "displayVolumeUnits": "\u00b5L", + "tags": [] + }, + "brand": { + "brand": "Opentrons", + "brandId": ["991-00076"], + "links": [ + "https://shop.opentrons.com/tough-0.2-ml-96-well-pcr-plate-full-skirt/" + ] + }, + "parameters": { + "format": "96Standard", + "isTiprack": false, + "loadName": "opentrons_96_wellplate_200ul_pcr_full_skirt", + "isMagneticModuleCompatible": true + }, + "ordering": [ + ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"], + ["A2", "B2", "C2", "D2", "E2", "F2", "G2", "H2"], + ["A3", "B3", "C3", "D3", "E3", "F3", "G3", "H3"], + ["A4", "B4", "C4", "D4", "E4", "F4", "G4", "H4"], + ["A5", "B5", "C5", "D5", "E5", "F5", "G5", "H5"], + ["A6", "B6", "C6", "D6", "E6", "F6", "G6", "H6"], + ["A7", "B7", "C7", "D7", "E7", "F7", "G7", "H7"], + ["A8", "B8", "C8", "D8", "E8", "F8", "G8", "H8"], + ["A9", "B9", "C9", "D9", "E9", "F9", "G9", "H9"], + ["A10", "B10", "C10", "D10", "E10", "F10", "G10", "H10"], + ["A11", "B11", "C11", "D11", "E11", "F11", "G11", "H11"], + ["A12", "B12", "C12", "D12", "E12", "F12", "G12", "H12"] + ], + "cornerOffsetFromSlot": { "x": 0, "y": 0, "z": 0 }, + "dimensions": { + "yDimension": 85.48, + "zDimension": 16, + "xDimension": 127.76 + }, + "wells": { + "A1": { + "depth": 14.95, + "x": 14.38, + "y": 74.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "B1": { + "depth": 14.95, + "x": 14.38, + "y": 65.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "C1": { + "depth": 14.95, + "x": 14.38, + "y": 56.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "D1": { + "depth": 14.95, + "x": 14.38, + "y": 47.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "E1": { + "depth": 14.95, + "x": 14.38, + "y": 38.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "F1": { + "depth": 14.95, + "x": 14.38, + "y": 29.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "G1": { + "depth": 14.95, + "x": 14.38, + "y": 20.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "H1": { + "depth": 14.95, + "x": 14.38, + "y": 11.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "A2": { + "depth": 14.95, + "x": 23.38, + "y": 74.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "B2": { + "depth": 14.95, + "x": 23.38, + "y": 65.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "C2": { + "depth": 14.95, + "x": 23.38, + "y": 56.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "D2": { + "depth": 14.95, + "x": 23.38, + "y": 47.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "E2": { + "depth": 14.95, + "x": 23.38, + "y": 38.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "F2": { + "depth": 14.95, + "x": 23.38, + "y": 29.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "G2": { + "depth": 14.95, + "x": 23.38, + "y": 20.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "H2": { + "depth": 14.95, + "x": 23.38, + "y": 11.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "A3": { + "depth": 14.95, + "x": 32.38, + "y": 74.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "B3": { + "depth": 14.95, + "x": 32.38, + "y": 65.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "C3": { + "depth": 14.95, + "x": 32.38, + "y": 56.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "D3": { + "depth": 14.95, + "x": 32.38, + "y": 47.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "E3": { + "depth": 14.95, + "x": 32.38, + "y": 38.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "F3": { + "depth": 14.95, + "x": 32.38, + "y": 29.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "G3": { + "depth": 14.95, + "x": 32.38, + "y": 20.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "H3": { + "depth": 14.95, + "x": 32.38, + "y": 11.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "A4": { + "depth": 14.95, + "x": 41.38, + "y": 74.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "B4": { + "depth": 14.95, + "x": 41.38, + "y": 65.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "C4": { + "depth": 14.95, + "x": 41.38, + "y": 56.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "D4": { + "depth": 14.95, + "x": 41.38, + "y": 47.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "E4": { + "depth": 14.95, + "x": 41.38, + "y": 38.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "F4": { + "depth": 14.95, + "x": 41.38, + "y": 29.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "G4": { + "depth": 14.95, + "x": 41.38, + "y": 20.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "H4": { + "depth": 14.95, + "x": 41.38, + "y": 11.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "A5": { + "depth": 14.95, + "x": 50.38, + "y": 74.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "B5": { + "depth": 14.95, + "x": 50.38, + "y": 65.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "C5": { + "depth": 14.95, + "x": 50.38, + "y": 56.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "D5": { + "depth": 14.95, + "x": 50.38, + "y": 47.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "E5": { + "depth": 14.95, + "x": 50.38, + "y": 38.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "F5": { + "depth": 14.95, + "x": 50.38, + "y": 29.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "G5": { + "depth": 14.95, + "x": 50.38, + "y": 20.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "H5": { + "depth": 14.95, + "x": 50.38, + "y": 11.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "A6": { + "depth": 14.95, + "x": 59.38, + "y": 74.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "B6": { + "depth": 14.95, + "x": 59.38, + "y": 65.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "C6": { + "depth": 14.95, + "x": 59.38, + "y": 56.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "D6": { + "depth": 14.95, + "x": 59.38, + "y": 47.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "E6": { + "depth": 14.95, + "x": 59.38, + "y": 38.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "F6": { + "depth": 14.95, + "x": 59.38, + "y": 29.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "G6": { + "depth": 14.95, + "x": 59.38, + "y": 20.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "H6": { + "depth": 14.95, + "x": 59.38, + "y": 11.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "A7": { + "depth": 14.95, + "x": 68.38, + "y": 74.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "B7": { + "depth": 14.95, + "x": 68.38, + "y": 65.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "C7": { + "depth": 14.95, + "x": 68.38, + "y": 56.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "D7": { + "depth": 14.95, + "x": 68.38, + "y": 47.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "E7": { + "depth": 14.95, + "x": 68.38, + "y": 38.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "F7": { + "depth": 14.95, + "x": 68.38, + "y": 29.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "G7": { + "depth": 14.95, + "x": 68.38, + "y": 20.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "H7": { + "depth": 14.95, + "x": 68.38, + "y": 11.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "A8": { + "depth": 14.95, + "x": 77.38, + "y": 74.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "B8": { + "depth": 14.95, + "x": 77.38, + "y": 65.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "C8": { + "depth": 14.95, + "x": 77.38, + "y": 56.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "D8": { + "depth": 14.95, + "x": 77.38, + "y": 47.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "E8": { + "depth": 14.95, + "x": 77.38, + "y": 38.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "F8": { + "depth": 14.95, + "x": 77.38, + "y": 29.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "G8": { + "depth": 14.95, + "x": 77.38, + "y": 20.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "H8": { + "depth": 14.95, + "x": 77.38, + "y": 11.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "A9": { + "depth": 14.95, + "x": 86.38, + "y": 74.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "B9": { + "depth": 14.95, + "x": 86.38, + "y": 65.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "C9": { + "depth": 14.95, + "x": 86.38, + "y": 56.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "D9": { + "depth": 14.95, + "x": 86.38, + "y": 47.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "E9": { + "depth": 14.95, + "x": 86.38, + "y": 38.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "F9": { + "depth": 14.95, + "x": 86.38, + "y": 29.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "G9": { + "depth": 14.95, + "x": 86.38, + "y": 20.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "H9": { + "depth": 14.95, + "x": 86.38, + "y": 11.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "A10": { + "depth": 14.95, + "x": 95.38, + "y": 74.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "B10": { + "depth": 14.95, + "x": 95.38, + "y": 65.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "C10": { + "depth": 14.95, + "x": 95.38, + "y": 56.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "D10": { + "depth": 14.95, + "x": 95.38, + "y": 47.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "E10": { + "depth": 14.95, + "x": 95.38, + "y": 38.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "F10": { + "depth": 14.95, + "x": 95.38, + "y": 29.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "G10": { + "depth": 14.95, + "x": 95.38, + "y": 20.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "H10": { + "depth": 14.95, + "x": 95.38, + "y": 11.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "A11": { + "depth": 14.95, + "x": 104.38, + "y": 74.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "B11": { + "depth": 14.95, + "x": 104.38, + "y": 65.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "C11": { + "depth": 14.95, + "x": 104.38, + "y": 56.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "D11": { + "depth": 14.95, + "x": 104.38, + "y": 47.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "E11": { + "depth": 14.95, + "x": 104.38, + "y": 38.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "F11": { + "depth": 14.95, + "x": 104.38, + "y": 29.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "G11": { + "depth": 14.95, + "x": 104.38, + "y": 20.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "H11": { + "depth": 14.95, + "x": 104.38, + "y": 11.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "A12": { + "depth": 14.95, + "x": 113.38, + "y": 74.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "B12": { + "depth": 14.95, + "x": 113.38, + "y": 65.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "C12": { + "depth": 14.95, + "x": 113.38, + "y": 56.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "D12": { + "depth": 14.95, + "x": 113.38, + "y": 47.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "E12": { + "depth": 14.95, + "x": 113.38, + "y": 38.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "F12": { + "depth": 14.95, + "x": 113.38, + "y": 29.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "G12": { + "depth": 14.95, + "x": 113.38, + "y": 20.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + }, + "H12": { + "depth": 14.95, + "x": 113.38, + "y": 11.24, + "z": 1.05, + "totalLiquidVolume": 200, + "diameter": 5.5, + "shape": "circular" + } + }, + "groups": [ + { + "wells": [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1", + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2", + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3", + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4", + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5", + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6", + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7", + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8", + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9", + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10", + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11", + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + "metadata": { "wellBottomShape": "v" } + } + ], + "allowedRoles": [], + "stackingOffsetWithLabware": { + "opentrons_96_pcr_adapter": { "x": 0, "y": 0, "z": 10.95 }, + "opentrons_96_well_aluminum_block": { "x": 0, "y": 0, "z": 11.91 } + }, + "stackingOffsetWithModule": { + "magneticBlockV1": { "x": 0, "y": 0, "z": 3.54 }, + "thermocyclerModuleV2": { "x": 0, "y": 0, "z": 10.7 } + }, + "gripperOffsets": {}, + "gripHeightFromLabwareBottom": 10.0, + "gripForce": 15.0 + } + }, + "startedAt": "2024-06-12T17:21:56.900184+00:00", + "completedAt": "2024-06-12T17:21:56.900240+00:00", + "notes": [] + }, + { + "id": "8632c181-e545-42a6-8379-9f1feb0dc46f", + "createdAt": "2024-06-12T17:21:56.900318+00:00", + "commandType": "loadLabware", + "key": "eba272e9-3eed-46bb-91aa-d1aee8da58da", + "status": "succeeded", + "params": { + "location": { "addressableAreaName": "A4" }, + "loadName": "axygen_1_reservoir_90ml", + "namespace": "opentrons", + "version": 1, + "labwareId": "8bacda22-9e05-45e8-bef4-cc04414a204f:opentrons/axygen_1_reservoir_90ml/1", + "displayName": "Axygen 1 Well Reservoir 90 mL" + }, + "result": { + "labwareId": "8bacda22-9e05-45e8-bef4-cc04414a204f:opentrons/axygen_1_reservoir_90ml/1", + "definition": { + "schemaVersion": 2, + "version": 1, + "namespace": "opentrons", + "metadata": { + "displayName": "Axygen 1 Well Reservoir 90 mL", + "displayCategory": "reservoir", + "displayVolumeUnits": "mL", + "tags": [] + }, + "brand": { + "brand": "Axygen", + "brandId": ["RES-SW1-LP"], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Genomics-%26-Molecular-Biology/Automation-Consumables/Automation-Reservoirs/Axygen%C2%AE-Reagent-Reservoirs/p/RES-SW1-LP?clear=true" + ] + }, + "parameters": { + "format": "trough", + "quirks": ["centerMultichannelOnWells", "touchTipDisabled"], + "isTiprack": false, + "loadName": "axygen_1_reservoir_90ml", + "isMagneticModuleCompatible": false + }, + "ordering": [["A1"]], + "cornerOffsetFromSlot": { "x": 0, "y": 0, "z": 0 }, + "dimensions": { + "yDimension": 85.47, + "zDimension": 19.05, + "xDimension": 127.76 + }, + "wells": { + "A1": { + "depth": 12.42, + "x": 63.88, + "y": 42.735, + "z": 6.63, + "totalLiquidVolume": 90000, + "xDimension": 106.76, + "yDimension": 70.52, + "shape": "rectangular" + } + }, + "groups": [ + { "wells": ["A1"], "metadata": { "wellBottomShape": "flat" } } + ], + "allowedRoles": [], + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "gripperOffsets": {} + } + }, + "startedAt": "2024-06-12T17:21:56.900343+00:00", + "completedAt": "2024-06-12T17:21:56.900400+00:00", + "notes": [] + }, + { + "id": "30aea4e1-6750-4933-9937-525cf52352fc", + "createdAt": "2024-06-12T17:21:56.900502+00:00", + "commandType": "loadLiquid", + "key": "45d432f8-581b-4272-9813-e73b9168a0ad", + "status": "succeeded", + "params": { + "liquidId": "1", + "labwareId": "54370838-4fca-4a14-b88a-7840e4903649:opentrons/opentrons_96_wellplate_200ul_pcr_full_skirt/2", + "volumeByWell": { + "A1": 100.0, + "B1": 100.0, + "C1": 100.0, + "D1": 100.0, + "E1": 100.0, + "F1": 100.0, + "G1": 100.0, + "H1": 100.0 + } + }, + "result": {}, + "startedAt": "2024-06-12T17:21:56.900534+00:00", + "completedAt": "2024-06-12T17:21:56.900568+00:00", + "notes": [] + }, + { + "id": "efe0a627-243f-4144-9eb4-6653b7592119", + "createdAt": "2024-06-12T17:21:56.900654+00:00", + "commandType": "loadLiquid", + "key": "7ec93f2a-3d22-4d30-b37a-e9f0d41a1847", + "status": "succeeded", + "params": { + "liquidId": "0", + "labwareId": "8bacda22-9e05-45e8-bef4-cc04414a204f:opentrons/axygen_1_reservoir_90ml/1", + "volumeByWell": { "A1": 10000.0 } + }, + "result": {}, + "startedAt": "2024-06-12T17:21:56.900680+00:00", + "completedAt": "2024-06-12T17:21:56.900703+00:00", + "notes": [] + }, + { + "id": "b6461e22-2c6c-4869-8b12-3818bd259f7f", + "createdAt": "2024-06-12T17:21:56.900769+00:00", + "commandType": "thermocycler/openLid", + "key": "ba1731c6-2906-4987-b948-ea1931ad3e64", + "status": "succeeded", + "params": { + "moduleId": "fd6da9f1-d63b-414b-929e-c646b64790e9:thermocyclerModuleType" + }, + "result": {}, + "startedAt": "2024-06-12T17:21:56.900799+00:00", + "completedAt": "2024-06-12T17:21:56.900827+00:00", + "notes": [] + }, + { + "id": "60097671-da13-4e65-8a39-b56ee46eaeaf", + "createdAt": "2024-06-12T17:21:56.900923+00:00", + "commandType": "moveLabware", + "key": "134cdae8-8ba1-45e4-98d7-cb931358eb01", + "status": "succeeded", + "params": { + "labwareId": "8bacda22-9e05-45e8-bef4-cc04414a204f:opentrons/axygen_1_reservoir_90ml/1", + "newLocation": { "slotName": "C1" }, + "strategy": "usingGripper" + }, + "result": {}, + "startedAt": "2024-06-12T17:21:56.900952+00:00", + "completedAt": "2024-06-12T17:21:56.901073+00:00", + "notes": [] + }, + { + "id": "9dcd7b3e-c893-4509-b7d3-29915655a3d6", + "createdAt": "2024-06-12T17:21:56.901207+00:00", + "commandType": "pickUpTip", + "key": "6a5f30cc-8bea-4899-b058-7bf2095efe86", + "status": "succeeded", + "params": { + "labwareId": "f2d371ea-5146-4c89-8200-9c056a7f321a:opentrons/opentrons_flex_96_tiprack_1000ul/1", + "wellName": "A1", + "wellLocation": { + "origin": "top", + "offset": { "x": 0, "y": 0, "z": 0 } + }, + "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc" + }, + "result": { + "position": { "x": 178.38, "y": 181.38, "z": 99.0 }, + "tipVolume": 1000.0, + "tipLength": 85.94999999999999, + "tipDiameter": 5.47 + }, + "startedAt": "2024-06-12T17:21:56.901247+00:00", + "completedAt": "2024-06-12T17:21:56.901658+00:00", + "notes": [] + }, + { + "id": "14bca710-bce8-48ec-adf2-2667fbb7a84e", + "createdAt": "2024-06-12T17:21:56.901839+00:00", + "commandType": "aspirate", + "key": "71fc15e9-ad19-4c77-a32f-abba4ea5e6f9", + "status": "succeeded", + "params": { + "labwareId": "8bacda22-9e05-45e8-bef4-cc04414a204f:opentrons/axygen_1_reservoir_90ml/1", + "wellName": "A1", + "wellLocation": { + "origin": "bottom", + "offset": { "x": 0.0, "y": 0.0, "z": 1.0 } + }, + "flowRate": 716.0, + "volume": 100.0, + "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc" + }, + "result": { + "position": { "x": 63.88, "y": 149.735, "z": 7.63 }, + "volume": 100.0 + }, + "startedAt": "2024-06-12T17:21:56.901881+00:00", + "completedAt": "2024-06-12T17:21:56.902199+00:00", + "notes": [] + }, + { + "id": "d96a443f-7246-4666-81b5-fa1ffa345421", + "createdAt": "2024-06-12T17:21:56.902289+00:00", + "commandType": "dispense", + "key": "a94a08b1-ed23-4c91-a853-27192da2aa70", + "status": "succeeded", + "params": { + "labwareId": "54370838-4fca-4a14-b88a-7840e4903649:opentrons/opentrons_96_wellplate_200ul_pcr_full_skirt/2", + "wellName": "A1", + "wellLocation": { + "origin": "bottom", + "offset": { "x": 0.0, "y": 0.0, "z": 1.0 } + }, + "flowRate": 716.0, + "volume": 100.0, + "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc" + }, + "result": { + "position": { + "x": -5.624999999999998, + "y": 356.2, + "z": 2.3100000000000014 + }, + "volume": 100.0 + }, + "startedAt": "2024-06-12T17:21:56.902318+00:00", + "completedAt": "2024-06-12T17:21:56.902634+00:00", + "notes": [] + }, + { + "id": "6f9b30ba-63ea-4528-9a5b-c03886bc1126", + "createdAt": "2024-06-12T17:21:56.902719+00:00", + "commandType": "moveToAddressableArea", + "key": "9f8c952b-88e2-4a6d-b6a2-e943f9b032e0", + "status": "succeeded", + "params": { + "forceDirect": false, + "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc", + "addressableAreaName": "1ChannelWasteChute", + "offset": { "x": 0.0, "y": 0.0, "z": 0.0 }, + "stayAtHighestPossibleZ": false + }, + "result": { "position": { "x": 392.0, "y": 36.0, "z": 114.5 } }, + "startedAt": "2024-06-12T17:21:56.902754+00:00", + "completedAt": "2024-06-12T17:21:56.903132+00:00", + "notes": [] + }, + { + "id": "d9de157e-fad0-4ec5-950a-c0a96d1406de", + "createdAt": "2024-06-12T17:21:56.903240+00:00", + "commandType": "dropTipInPlace", + "key": "734f7c4e-be2c-4a45-ae26-d81fb6b58729", + "status": "succeeded", + "params": { "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc" }, + "result": {}, + "startedAt": "2024-06-12T17:21:56.903270+00:00", + "completedAt": "2024-06-12T17:21:56.903297+00:00", + "notes": [] + }, + { + "id": "028f033a-64de-4e23-bb81-2de8a3c7e1e2", + "createdAt": "2024-06-12T17:21:56.903385+00:00", + "commandType": "pickUpTip", + "key": "e3f54bb0-ef58-4e56-ad44-1dc944d2ebd8", + "status": "succeeded", + "params": { + "labwareId": "f2d371ea-5146-4c89-8200-9c056a7f321a:opentrons/opentrons_flex_96_tiprack_1000ul/1", + "wellName": "B1", + "wellLocation": { + "origin": "top", + "offset": { "x": 0, "y": 0, "z": 0 } + }, + "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc" + }, + "result": { + "position": { "x": 178.38, "y": 172.38, "z": 99.0 }, + "tipVolume": 1000.0, + "tipLength": 85.94999999999999, + "tipDiameter": 5.47 + }, + "startedAt": "2024-06-12T17:21:56.903411+00:00", + "completedAt": "2024-06-12T17:21:56.903695+00:00", + "notes": [] + }, + { + "id": "37b9334c-3e0c-47dd-8d64-f0ae37fa243d", + "createdAt": "2024-06-12T17:21:56.903769+00:00", + "commandType": "aspirate", + "key": "d5dee037-06a2-4f63-a5dd-08f285db802f", + "status": "succeeded", + "params": { + "labwareId": "8bacda22-9e05-45e8-bef4-cc04414a204f:opentrons/axygen_1_reservoir_90ml/1", + "wellName": "A1", + "wellLocation": { + "origin": "bottom", + "offset": { "x": 0.0, "y": 0.0, "z": 1.0 } + }, + "flowRate": 716.0, + "volume": 100.0, + "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc" + }, + "result": { + "position": { "x": 63.88, "y": 149.735, "z": 7.63 }, + "volume": 100.0 + }, + "startedAt": "2024-06-12T17:21:56.903798+00:00", + "completedAt": "2024-06-12T17:21:56.904073+00:00", + "notes": [] + }, + { + "id": "e3ccca85-cb2b-4a62-be22-f5d2d14c1d65", + "createdAt": "2024-06-12T17:21:56.904141+00:00", + "commandType": "dispense", + "key": "db77cb48-9d63-4eb9-bac9-82c7137c7940", + "status": "succeeded", + "params": { + "labwareId": "54370838-4fca-4a14-b88a-7840e4903649:opentrons/opentrons_96_wellplate_200ul_pcr_full_skirt/2", + "wellName": "B1", + "wellLocation": { + "origin": "bottom", + "offset": { "x": 0.0, "y": 0.0, "z": 1.0 } + }, + "flowRate": 716.0, + "volume": 100.0, + "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc" + }, + "result": { + "position": { + "x": -5.624999999999998, + "y": 347.2, + "z": 2.3100000000000014 + }, + "volume": 100.0 + }, + "startedAt": "2024-06-12T17:21:56.904171+00:00", + "completedAt": "2024-06-12T17:21:56.904472+00:00", + "notes": [] + }, + { + "id": "22dd3872-7d25-4673-bbe1-e30b33388525", + "createdAt": "2024-06-12T17:21:56.904542+00:00", + "commandType": "moveToAddressableArea", + "key": "c4a205b9-6a31-4993-a7dd-de84e3c40fab", + "status": "succeeded", + "params": { + "forceDirect": false, + "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc", + "addressableAreaName": "1ChannelWasteChute", + "offset": { "x": 0.0, "y": 0.0, "z": 0.0 }, + "stayAtHighestPossibleZ": false + }, + "result": { "position": { "x": 392.0, "y": 36.0, "z": 114.5 } }, + "startedAt": "2024-06-12T17:21:56.904571+00:00", + "completedAt": "2024-06-12T17:21:56.904811+00:00", + "notes": [] + }, + { + "id": "e034f4a1-ec53-46fb-8f99-a23d97641764", + "createdAt": "2024-06-12T17:21:56.904883+00:00", + "commandType": "dropTipInPlace", + "key": "c1a58bc4-c922-4989-8259-3a011cb6548e", + "status": "succeeded", + "params": { "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc" }, + "result": {}, + "startedAt": "2024-06-12T17:21:56.904912+00:00", + "completedAt": "2024-06-12T17:21:56.904934+00:00", + "notes": [] + }, + { + "id": "9846e62c-626b-4fdc-a6dd-419841b0df4b", + "createdAt": "2024-06-12T17:21:56.905004+00:00", + "commandType": "pickUpTip", + "key": "4660a8b7-c24f-4cbd-b5f7-0fff091af818", + "status": "succeeded", + "params": { + "labwareId": "f2d371ea-5146-4c89-8200-9c056a7f321a:opentrons/opentrons_flex_96_tiprack_1000ul/1", + "wellName": "C1", + "wellLocation": { + "origin": "top", + "offset": { "x": 0, "y": 0, "z": 0 } + }, + "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc" + }, + "result": { + "position": { "x": 178.38, "y": 163.38, "z": 99.0 }, + "tipVolume": 1000.0, + "tipLength": 85.94999999999999, + "tipDiameter": 5.47 + }, + "startedAt": "2024-06-12T17:21:56.905029+00:00", + "completedAt": "2024-06-12T17:21:56.905304+00:00", + "notes": [] + }, + { + "id": "cb7b007b-eebc-441b-b4be-8be684988eaf", + "createdAt": "2024-06-12T17:21:56.905374+00:00", + "commandType": "aspirate", + "key": "9ac1cb1d-2876-4816-87bc-bcbeb3d0cc45", + "status": "succeeded", + "params": { + "labwareId": "8bacda22-9e05-45e8-bef4-cc04414a204f:opentrons/axygen_1_reservoir_90ml/1", + "wellName": "A1", + "wellLocation": { + "origin": "bottom", + "offset": { "x": 0.0, "y": 0.0, "z": 1.0 } + }, + "flowRate": 716.0, + "volume": 100.0, + "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc" + }, + "result": { + "position": { "x": 63.88, "y": 149.735, "z": 7.63 }, + "volume": 100.0 + }, + "startedAt": "2024-06-12T17:21:56.905402+00:00", + "completedAt": "2024-06-12T17:21:56.905662+00:00", + "notes": [] + }, + { + "id": "9962d0e7-e491-4515-b243-35322e0c263c", + "createdAt": "2024-06-12T17:21:56.905725+00:00", + "commandType": "dispense", + "key": "1e8856de-95c7-483f-bf9a-a8a08dbd51b5", + "status": "succeeded", + "params": { + "labwareId": "54370838-4fca-4a14-b88a-7840e4903649:opentrons/opentrons_96_wellplate_200ul_pcr_full_skirt/2", + "wellName": "C1", + "wellLocation": { + "origin": "bottom", + "offset": { "x": 0.0, "y": 0.0, "z": 1.0 } + }, + "flowRate": 716.0, + "volume": 100.0, + "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc" + }, + "result": { + "position": { + "x": -5.624999999999998, + "y": 338.2, + "z": 2.3100000000000014 + }, + "volume": 100.0 + }, + "startedAt": "2024-06-12T17:21:56.905754+00:00", + "completedAt": "2024-06-12T17:21:56.906051+00:00", + "notes": [] + }, + { + "id": "9167fce8-9c39-40d2-af5c-635f0b356428", + "createdAt": "2024-06-12T17:21:56.906114+00:00", + "commandType": "moveToAddressableArea", + "key": "df45d90b-b122-4a73-8166-7c36cb4b1739", + "status": "succeeded", + "params": { + "forceDirect": false, + "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc", + "addressableAreaName": "1ChannelWasteChute", + "offset": { "x": 0.0, "y": 0.0, "z": 0.0 }, + "stayAtHighestPossibleZ": false + }, + "result": { "position": { "x": 392.0, "y": 36.0, "z": 114.5 } }, + "startedAt": "2024-06-12T17:21:56.906142+00:00", + "completedAt": "2024-06-12T17:21:56.906377+00:00", + "notes": [] + }, + { + "id": "8bc60fba-40d9-4693-b7e0-0a4f5f1e9137", + "createdAt": "2024-06-12T17:21:56.906448+00:00", + "commandType": "dropTipInPlace", + "key": "893249ff-853b-4294-bd2c-12da0e5cb8af", + "status": "succeeded", + "params": { "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc" }, + "result": {}, + "startedAt": "2024-06-12T17:21:56.906475+00:00", + "completedAt": "2024-06-12T17:21:56.906496+00:00", + "notes": [] + }, + { + "id": "837a423d-9154-44f1-b872-9637498b8688", + "createdAt": "2024-06-12T17:21:56.906563+00:00", + "commandType": "pickUpTip", + "key": "2e4913f4-1f2e-4039-964b-ca6f8905e551", + "status": "succeeded", + "params": { + "labwareId": "f2d371ea-5146-4c89-8200-9c056a7f321a:opentrons/opentrons_flex_96_tiprack_1000ul/1", + "wellName": "D1", + "wellLocation": { + "origin": "top", + "offset": { "x": 0, "y": 0, "z": 0 } + }, + "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc" + }, + "result": { + "position": { "x": 178.38, "y": 154.38, "z": 99.0 }, + "tipVolume": 1000.0, + "tipLength": 85.94999999999999, + "tipDiameter": 5.47 + }, + "startedAt": "2024-06-12T17:21:56.906589+00:00", + "completedAt": "2024-06-12T17:21:56.906909+00:00", + "notes": [] + }, + { + "id": "cfe2c27a-9840-443e-80c4-daf21ab4fc81", + "createdAt": "2024-06-12T17:21:56.907016+00:00", + "commandType": "aspirate", + "key": "bd2ac396-b44d-41a8-b050-ff8ab4a25575", + "status": "succeeded", + "params": { + "labwareId": "8bacda22-9e05-45e8-bef4-cc04414a204f:opentrons/axygen_1_reservoir_90ml/1", + "wellName": "A1", + "wellLocation": { + "origin": "bottom", + "offset": { "x": 0.0, "y": 0.0, "z": 1.0 } + }, + "flowRate": 716.0, + "volume": 100.0, + "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc" + }, + "result": { + "position": { "x": 63.88, "y": 149.735, "z": 7.63 }, + "volume": 100.0 + }, + "startedAt": "2024-06-12T17:21:56.907054+00:00", + "completedAt": "2024-06-12T17:21:56.907338+00:00", + "notes": [] + }, + { + "id": "561e682c-adfa-4317-8aa0-190d58bca085", + "createdAt": "2024-06-12T17:21:56.907406+00:00", + "commandType": "dispense", + "key": "df68ab20-61c0-4077-bf0e-b1ef2997251a", + "status": "succeeded", + "params": { + "labwareId": "54370838-4fca-4a14-b88a-7840e4903649:opentrons/opentrons_96_wellplate_200ul_pcr_full_skirt/2", + "wellName": "D1", + "wellLocation": { + "origin": "bottom", + "offset": { "x": 0.0, "y": 0.0, "z": 1.0 } + }, + "flowRate": 716.0, + "volume": 100.0, + "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc" + }, + "result": { + "position": { + "x": -5.624999999999998, + "y": 329.2, + "z": 2.3100000000000014 + }, + "volume": 100.0 + }, + "startedAt": "2024-06-12T17:21:56.907432+00:00", + "completedAt": "2024-06-12T17:21:56.907727+00:00", + "notes": [] + }, + { + "id": "f23327d3-7e6f-44df-9917-73e9afe63ffc", + "createdAt": "2024-06-12T17:21:56.907789+00:00", + "commandType": "moveToAddressableArea", + "key": "4b7f1a58-2bf5-45e8-a312-e165130f208c", + "status": "succeeded", + "params": { + "forceDirect": false, + "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc", + "addressableAreaName": "1ChannelWasteChute", + "offset": { "x": 0.0, "y": 0.0, "z": 0.0 }, + "stayAtHighestPossibleZ": false + }, + "result": { "position": { "x": 392.0, "y": 36.0, "z": 114.5 } }, + "startedAt": "2024-06-12T17:21:56.907816+00:00", + "completedAt": "2024-06-12T17:21:56.908053+00:00", + "notes": [] + }, + { + "id": "1d3981ee-2c87-4a95-b81c-1c7213809f07", + "createdAt": "2024-06-12T17:21:56.908118+00:00", + "commandType": "dropTipInPlace", + "key": "2fc06e3a-f20d-47b9-ac7f-0a062b45beeb", + "status": "succeeded", + "params": { "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc" }, + "result": {}, + "startedAt": "2024-06-12T17:21:56.908144+00:00", + "completedAt": "2024-06-12T17:21:56.908164+00:00", + "notes": [] + }, + { + "id": "d9bfc9d0-2c6f-490d-900e-cf1c6d5b8a25", + "createdAt": "2024-06-12T17:21:56.908230+00:00", + "commandType": "pickUpTip", + "key": "9b4955da-0d09-40da-83b2-6c398dcf5e6e", + "status": "succeeded", + "params": { + "labwareId": "f2d371ea-5146-4c89-8200-9c056a7f321a:opentrons/opentrons_flex_96_tiprack_1000ul/1", + "wellName": "E1", + "wellLocation": { + "origin": "top", + "offset": { "x": 0, "y": 0, "z": 0 } + }, + "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc" + }, + "result": { + "position": { "x": 178.38, "y": 145.38, "z": 99.0 }, + "tipVolume": 1000.0, + "tipLength": 85.94999999999999, + "tipDiameter": 5.47 + }, + "startedAt": "2024-06-12T17:21:56.908255+00:00", + "completedAt": "2024-06-12T17:21:56.908508+00:00", + "notes": [] + }, + { + "id": "b94fd309-ceea-4f83-a40a-86be60a5fb75", + "createdAt": "2024-06-12T17:21:56.908576+00:00", + "commandType": "aspirate", + "key": "05a4a082-6381-4107-bb26-0e64351d3263", + "status": "succeeded", + "params": { + "labwareId": "8bacda22-9e05-45e8-bef4-cc04414a204f:opentrons/axygen_1_reservoir_90ml/1", + "wellName": "A1", + "wellLocation": { + "origin": "bottom", + "offset": { "x": 0.0, "y": 0.0, "z": 1.0 } + }, + "flowRate": 716.0, + "volume": 100.0, + "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc" + }, + "result": { + "position": { "x": 63.88, "y": 149.735, "z": 7.63 }, + "volume": 100.0 + }, + "startedAt": "2024-06-12T17:21:56.908601+00:00", + "completedAt": "2024-06-12T17:21:56.908860+00:00", + "notes": [] + }, + { + "id": "614b8fb5-7979-4e01-9616-525906ed8b2a", + "createdAt": "2024-06-12T17:21:56.908927+00:00", + "commandType": "dispense", + "key": "a494e205-1cf5-4718-b5f0-43fe74c962bc", + "status": "succeeded", + "params": { + "labwareId": "54370838-4fca-4a14-b88a-7840e4903649:opentrons/opentrons_96_wellplate_200ul_pcr_full_skirt/2", + "wellName": "E1", + "wellLocation": { + "origin": "bottom", + "offset": { "x": 0.0, "y": 0.0, "z": 1.0 } + }, + "flowRate": 716.0, + "volume": 100.0, + "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc" + }, + "result": { + "position": { + "x": -5.624999999999998, + "y": 320.2, + "z": 2.3100000000000014 + }, + "volume": 100.0 + }, + "startedAt": "2024-06-12T17:21:56.908956+00:00", + "completedAt": "2024-06-12T17:21:56.909249+00:00", + "notes": [] + }, + { + "id": "40abff26-69b1-4910-8d89-1cd97c3eb39a", + "createdAt": "2024-06-12T17:21:56.909312+00:00", + "commandType": "moveToAddressableArea", + "key": "e4cf4c42-d1c3-40e7-9848-3e02e01250a8", + "status": "succeeded", + "params": { + "forceDirect": false, + "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc", + "addressableAreaName": "1ChannelWasteChute", + "offset": { "x": 0.0, "y": 0.0, "z": 0.0 }, + "stayAtHighestPossibleZ": false + }, + "result": { "position": { "x": 392.0, "y": 36.0, "z": 114.5 } }, + "startedAt": "2024-06-12T17:21:56.909338+00:00", + "completedAt": "2024-06-12T17:21:56.909575+00:00", + "notes": [] + }, + { + "id": "7d6c20be-e94a-4e87-a231-9b6a50827add", + "createdAt": "2024-06-12T17:21:56.909639+00:00", + "commandType": "dropTipInPlace", + "key": "397d6c15-97ae-4ab5-a2dc-e0fe75562d17", + "status": "succeeded", + "params": { "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc" }, + "result": {}, + "startedAt": "2024-06-12T17:21:56.909665+00:00", + "completedAt": "2024-06-12T17:21:56.909684+00:00", + "notes": [] + }, + { + "id": "1e6e1c47-ac38-4233-8e1a-58b4524ae3cc", + "createdAt": "2024-06-12T17:21:56.909751+00:00", + "commandType": "pickUpTip", + "key": "86178307-33f6-4902-9207-51fc704d579c", + "status": "succeeded", + "params": { + "labwareId": "f2d371ea-5146-4c89-8200-9c056a7f321a:opentrons/opentrons_flex_96_tiprack_1000ul/1", + "wellName": "F1", + "wellLocation": { + "origin": "top", + "offset": { "x": 0, "y": 0, "z": 0 } + }, + "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc" + }, + "result": { + "position": { "x": 178.38, "y": 136.38, "z": 99.0 }, + "tipVolume": 1000.0, + "tipLength": 85.94999999999999, + "tipDiameter": 5.47 + }, + "startedAt": "2024-06-12T17:21:56.909776+00:00", + "completedAt": "2024-06-12T17:21:56.910096+00:00", + "notes": [] + }, + { + "id": "d19101fe-7e76-4d06-a45e-16a6037e7b7b", + "createdAt": "2024-06-12T17:21:56.910198+00:00", + "commandType": "aspirate", + "key": "f2964ad3-9dac-4566-b636-afb59de61116", + "status": "succeeded", + "params": { + "labwareId": "8bacda22-9e05-45e8-bef4-cc04414a204f:opentrons/axygen_1_reservoir_90ml/1", + "wellName": "A1", + "wellLocation": { + "origin": "bottom", + "offset": { "x": 0.0, "y": 0.0, "z": 1.0 } + }, + "flowRate": 716.0, + "volume": 100.0, + "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc" + }, + "result": { + "position": { "x": 63.88, "y": 149.735, "z": 7.63 }, + "volume": 100.0 + }, + "startedAt": "2024-06-12T17:21:56.910236+00:00", + "completedAt": "2024-06-12T17:21:56.910619+00:00", + "notes": [] + }, + { + "id": "56cfc2a6-75e0-4e54-998f-a70f1ae513ce", + "createdAt": "2024-06-12T17:21:56.910690+00:00", + "commandType": "dispense", + "key": "68c9104b-3796-4ca1-9bc5-22afec8024d9", + "status": "succeeded", + "params": { + "labwareId": "54370838-4fca-4a14-b88a-7840e4903649:opentrons/opentrons_96_wellplate_200ul_pcr_full_skirt/2", + "wellName": "F1", + "wellLocation": { + "origin": "bottom", + "offset": { "x": 0.0, "y": 0.0, "z": 1.0 } + }, + "flowRate": 716.0, + "volume": 100.0, + "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc" + }, + "result": { + "position": { + "x": -5.624999999999998, + "y": 311.2, + "z": 2.3100000000000014 + }, + "volume": 100.0 + }, + "startedAt": "2024-06-12T17:21:56.910718+00:00", + "completedAt": "2024-06-12T17:21:56.911011+00:00", + "notes": [] + }, + { + "id": "9c48d4ca-f623-48ef-91d6-3a551e1b80c3", + "createdAt": "2024-06-12T17:21:56.911135+00:00", + "commandType": "moveToAddressableArea", + "key": "9a10a801-1aaa-4238-89a9-c256f09deea0", + "status": "succeeded", + "params": { + "forceDirect": false, + "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc", + "addressableAreaName": "1ChannelWasteChute", + "offset": { "x": 0.0, "y": 0.0, "z": 0.0 }, + "stayAtHighestPossibleZ": false + }, + "result": { "position": { "x": 392.0, "y": 36.0, "z": 114.5 } }, + "startedAt": "2024-06-12T17:21:56.911164+00:00", + "completedAt": "2024-06-12T17:21:56.911590+00:00", + "notes": [] + }, + { + "id": "453fc49c-d8c6-4d7d-b30e-7d0c85e839e3", + "createdAt": "2024-06-12T17:21:56.911701+00:00", + "commandType": "dropTipInPlace", + "key": "73d1b9c9-4c1f-40a2-8932-7f0110da78dc", + "status": "succeeded", + "params": { "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc" }, + "result": {}, + "startedAt": "2024-06-12T17:21:56.911737+00:00", + "completedAt": "2024-06-12T17:21:56.911762+00:00", + "notes": [] + }, + { + "id": "076b217b-516b-4dcd-9e52-c8b3816612b3", + "createdAt": "2024-06-12T17:21:56.911841+00:00", + "commandType": "pickUpTip", + "key": "5818e249-0b61-4f76-af80-c835a4ad0033", + "status": "succeeded", + "params": { + "labwareId": "f2d371ea-5146-4c89-8200-9c056a7f321a:opentrons/opentrons_flex_96_tiprack_1000ul/1", + "wellName": "G1", + "wellLocation": { + "origin": "top", + "offset": { "x": 0, "y": 0, "z": 0 } + }, + "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc" + }, + "result": { + "position": { "x": 178.38, "y": 127.38, "z": 99.0 }, + "tipVolume": 1000.0, + "tipLength": 85.94999999999999, + "tipDiameter": 5.47 + }, + "startedAt": "2024-06-12T17:21:56.911869+00:00", + "completedAt": "2024-06-12T17:21:56.912289+00:00", + "notes": [] + }, + { + "id": "76aea1a4-0b4f-4ecc-9833-e52849ec71f5", + "createdAt": "2024-06-12T17:21:56.912368+00:00", + "commandType": "aspirate", + "key": "38df8344-789d-4490-bd8a-cbe9121b2692", + "status": "succeeded", + "params": { + "labwareId": "8bacda22-9e05-45e8-bef4-cc04414a204f:opentrons/axygen_1_reservoir_90ml/1", + "wellName": "A1", + "wellLocation": { + "origin": "bottom", + "offset": { "x": 0.0, "y": 0.0, "z": 1.0 } + }, + "flowRate": 716.0, + "volume": 100.0, + "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc" + }, + "result": { + "position": { "x": 63.88, "y": 149.735, "z": 7.63 }, + "volume": 100.0 + }, + "startedAt": "2024-06-12T17:21:56.912396+00:00", + "completedAt": "2024-06-12T17:21:56.912745+00:00", + "notes": [] + }, + { + "id": "4ade0517-70d3-4003-8c19-8a3f0ab36d58", + "createdAt": "2024-06-12T17:21:56.912846+00:00", + "commandType": "dispense", + "key": "13593038-b554-447e-9963-0f3666ccd11a", + "status": "succeeded", + "params": { + "labwareId": "54370838-4fca-4a14-b88a-7840e4903649:opentrons/opentrons_96_wellplate_200ul_pcr_full_skirt/2", + "wellName": "G1", + "wellLocation": { + "origin": "bottom", + "offset": { "x": 0.0, "y": 0.0, "z": 1.0 } + }, + "flowRate": 716.0, + "volume": 100.0, + "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc" + }, + "result": { + "position": { + "x": -5.624999999999998, + "y": 302.2, + "z": 2.3100000000000014 + }, + "volume": 100.0 + }, + "startedAt": "2024-06-12T17:21:56.912881+00:00", + "completedAt": "2024-06-12T17:21:56.913205+00:00", + "notes": [] + }, + { + "id": "837623e0-a69e-4b04-bba9-2e9668edfc8e", + "createdAt": "2024-06-12T17:21:56.913278+00:00", + "commandType": "moveToAddressableArea", + "key": "361985e0-7e23-4651-b0ed-5277cb5f1bec", + "status": "succeeded", + "params": { + "forceDirect": false, + "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc", + "addressableAreaName": "1ChannelWasteChute", + "offset": { "x": 0.0, "y": 0.0, "z": 0.0 }, + "stayAtHighestPossibleZ": false + }, + "result": { "position": { "x": 392.0, "y": 36.0, "z": 114.5 } }, + "startedAt": "2024-06-12T17:21:56.913306+00:00", + "completedAt": "2024-06-12T17:21:56.913538+00:00", + "notes": [] + }, + { + "id": "375f3fae-d802-437b-92ea-48dcbb0c42b7", + "createdAt": "2024-06-12T17:21:56.913608+00:00", + "commandType": "dropTipInPlace", + "key": "0d1c0aa2-d5f6-45d9-9341-bc623c07f366", + "status": "succeeded", + "params": { "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc" }, + "result": {}, + "startedAt": "2024-06-12T17:21:56.913640+00:00", + "completedAt": "2024-06-12T17:21:56.913662+00:00", + "notes": [] + }, + { + "id": "43d96227-c3bb-475d-a7f9-f53d28c9e6f6", + "createdAt": "2024-06-12T17:21:56.913730+00:00", + "commandType": "pickUpTip", + "key": "ef384b08-03fd-4ec1-8ea9-f7741ac9050e", + "status": "succeeded", + "params": { + "labwareId": "f2d371ea-5146-4c89-8200-9c056a7f321a:opentrons/opentrons_flex_96_tiprack_1000ul/1", + "wellName": "H1", + "wellLocation": { + "origin": "top", + "offset": { "x": 0, "y": 0, "z": 0 } + }, + "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc" + }, + "result": { + "position": { "x": 178.38, "y": 118.38, "z": 99.0 }, + "tipVolume": 1000.0, + "tipLength": 85.94999999999999, + "tipDiameter": 5.47 + }, + "startedAt": "2024-06-12T17:21:56.913755+00:00", + "completedAt": "2024-06-12T17:21:56.914009+00:00", + "notes": [] + }, + { + "id": "00a7bfbe-fe2e-41b4-ab1c-21f12b39fe5c", + "createdAt": "2024-06-12T17:21:56.914082+00:00", + "commandType": "aspirate", + "key": "29bcc74a-cbba-4d19-9150-889378a34530", + "status": "succeeded", + "params": { + "labwareId": "8bacda22-9e05-45e8-bef4-cc04414a204f:opentrons/axygen_1_reservoir_90ml/1", + "wellName": "A1", + "wellLocation": { + "origin": "bottom", + "offset": { "x": 0.0, "y": 0.0, "z": 1.0 } + }, + "flowRate": 716.0, + "volume": 100.0, + "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc" + }, + "result": { + "position": { "x": 63.88, "y": 149.735, "z": 7.63 }, + "volume": 100.0 + }, + "startedAt": "2024-06-12T17:21:56.914107+00:00", + "completedAt": "2024-06-12T17:21:56.914395+00:00", + "notes": [] + }, + { + "id": "56e93ce7-7974-4471-ac60-a02b05f279da", + "createdAt": "2024-06-12T17:21:56.914488+00:00", + "commandType": "dispense", + "key": "e1f51c21-1522-4538-af60-b97dc37d7b9a", + "status": "succeeded", + "params": { + "labwareId": "54370838-4fca-4a14-b88a-7840e4903649:opentrons/opentrons_96_wellplate_200ul_pcr_full_skirt/2", + "wellName": "H1", + "wellLocation": { + "origin": "bottom", + "offset": { "x": 0.0, "y": 0.0, "z": 1.0 } + }, + "flowRate": 716.0, + "volume": 100.0, + "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc" + }, + "result": { + "position": { + "x": -5.624999999999998, + "y": 293.2, + "z": 2.3100000000000014 + }, + "volume": 100.0 + }, + "startedAt": "2024-06-12T17:21:56.914523+00:00", + "completedAt": "2024-06-12T17:21:56.914832+00:00", + "notes": [] + }, + { + "id": "d6c42331-c874-4b92-ad6e-148493aab2f3", + "createdAt": "2024-06-12T17:21:56.914898+00:00", + "commandType": "moveToAddressableArea", + "key": "93516cec-406e-41e8-8c4c-9b2b145509f7", + "status": "succeeded", + "params": { + "forceDirect": false, + "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc", + "addressableAreaName": "1ChannelWasteChute", + "offset": { "x": 0.0, "y": 0.0, "z": 0.0 }, + "stayAtHighestPossibleZ": false + }, + "result": { "position": { "x": 392.0, "y": 36.0, "z": 114.5 } }, + "startedAt": "2024-06-12T17:21:56.914924+00:00", + "completedAt": "2024-06-12T17:21:56.915153+00:00", + "notes": [] + }, + { + "id": "694e494a-6df4-4780-9547-e09f902be8bf", + "createdAt": "2024-06-12T17:21:56.915216+00:00", + "commandType": "dropTipInPlace", + "key": "d9a0a1d2-f813-488e-a28a-daae69cbc072", + "status": "succeeded", + "params": { "pipetteId": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc" }, + "result": {}, + "startedAt": "2024-06-12T17:21:56.915242+00:00", + "completedAt": "2024-06-12T17:21:56.915269+00:00", + "notes": [] + }, + { + "id": "c28f4796-8853-4438-958f-84a85a120cf1", + "createdAt": "2024-06-12T17:21:56.915340+00:00", + "commandType": "thermocycler/closeLid", + "key": "6c34d1f1-bfeb-46d9-9669-c9b71732b6ab", + "status": "succeeded", + "params": { + "moduleId": "fd6da9f1-d63b-414b-929e-c646b64790e9:thermocyclerModuleType" + }, + "result": {}, + "startedAt": "2024-06-12T17:21:56.915370+00:00", + "completedAt": "2024-06-12T17:21:56.915396+00:00", + "notes": [] + }, + { + "id": "70faac6c-d96a-4d66-9361-25de74162da6", + "createdAt": "2024-06-12T17:21:56.915484+00:00", + "commandType": "thermocycler/setTargetBlockTemperature", + "key": "5ec65b6a-2b1c-4f8c-961f-c6e0ee700b49", + "status": "succeeded", + "params": { + "moduleId": "fd6da9f1-d63b-414b-929e-c646b64790e9:thermocyclerModuleType", + "celsius": 40.0 + }, + "result": { "targetBlockTemperature": 40.0 }, + "startedAt": "2024-06-12T17:21:56.915517+00:00", + "completedAt": "2024-06-12T17:21:56.915543+00:00", + "notes": [] + }, + { + "id": "21ccc284-a287-4cdd-9045-cbf74b752723", + "createdAt": "2024-06-12T17:21:56.915625+00:00", + "commandType": "thermocycler/waitForBlockTemperature", + "key": "9f90e933-131f-44eb-ab12-efb152c9cb83", + "status": "succeeded", + "params": { + "moduleId": "fd6da9f1-d63b-414b-929e-c646b64790e9:thermocyclerModuleType" + }, + "result": {}, + "startedAt": "2024-06-12T17:21:56.915651+00:00", + "completedAt": "2024-06-12T17:21:56.915674+00:00", + "notes": [] + }, + { + "id": "fbfe223a-9ca6-43ae-aff5-d784e84877a1", + "createdAt": "2024-06-12T17:21:56.915765+00:00", + "commandType": "waitForDuration", + "key": "f580c50f-08bb-42c4-b4a2-2764ed2fc090", + "status": "succeeded", + "params": { "seconds": 60.0, "message": "" }, + "result": {}, + "startedAt": "2024-06-12T17:21:56.915794+00:00", + "completedAt": "2024-06-12T17:21:56.915816+00:00", + "notes": [] + }, + { + "id": "4b76af6d-3e05-4b56-85de-a49bab41e3c7", + "createdAt": "2024-06-12T17:21:56.915900+00:00", + "commandType": "thermocycler/openLid", + "key": "f739bfc8-f438-4fa2-8d57-dc839ac29f24", + "status": "succeeded", + "params": { + "moduleId": "fd6da9f1-d63b-414b-929e-c646b64790e9:thermocyclerModuleType" + }, + "result": {}, + "startedAt": "2024-06-12T17:21:56.915925+00:00", + "completedAt": "2024-06-12T17:21:56.915947+00:00", + "notes": [] + }, + { + "id": "d678170a-be83-466e-b898-2aa00d963086", + "createdAt": "2024-06-12T17:21:56.916011+00:00", + "commandType": "thermocycler/deactivateBlock", + "key": "4561d98c-b565-48db-a7af-6bcd31520340", + "status": "succeeded", + "params": { + "moduleId": "fd6da9f1-d63b-414b-929e-c646b64790e9:thermocyclerModuleType" + }, + "result": {}, + "startedAt": "2024-06-12T17:21:56.916037+00:00", + "completedAt": "2024-06-12T17:21:56.916059+00:00", + "notes": [] + }, + { + "id": "81f0bd93-bae3-449b-904d-027fbe7d4864", + "createdAt": "2024-06-12T17:21:56.916138+00:00", + "commandType": "heaterShaker/deactivateHeater", + "key": "79dd17bf-f86a-4fe9-990a-e4e567798c87", + "status": "succeeded", + "params": { + "moduleId": "23347241-80bb-4a7e-9c91-5d9727a9e483:heaterShakerModuleType" + }, + "result": {}, + "startedAt": "2024-06-12T17:21:56.916171+00:00", + "completedAt": "2024-06-12T17:21:56.916195+00:00", + "notes": [] + }, + { + "id": "5d194127-7eb6-4ef4-a26e-bbf25ef5af7f", + "createdAt": "2024-06-12T17:21:56.916279+00:00", + "commandType": "heaterShaker/openLabwareLatch", + "key": "995a2630-7a9c-4b70-aef8-ddccb7ce26ce", + "status": "succeeded", + "params": { + "moduleId": "23347241-80bb-4a7e-9c91-5d9727a9e483:heaterShakerModuleType" + }, + "result": { "pipetteRetracted": true }, + "startedAt": "2024-06-12T17:21:56.916307+00:00", + "completedAt": "2024-06-12T17:21:56.916335+00:00", + "notes": [] + }, + { + "id": "e0a7f92e-affe-481c-8749-93909ddbfb3b", + "createdAt": "2024-06-12T17:21:56.916454+00:00", + "commandType": "moveLabware", + "key": "9d1035a4-617f-4fcc-a7a3-1b7a8c52b4c6", + "status": "succeeded", + "params": { + "labwareId": "54370838-4fca-4a14-b88a-7840e4903649:opentrons/opentrons_96_wellplate_200ul_pcr_full_skirt/2", + "newLocation": { + "labwareId": "7c4d59fa-0e50-442f-adce-9e4b0c7f0b88:opentrons/opentrons_96_pcr_adapter/1" + }, + "strategy": "usingGripper" + }, + "result": {}, + "startedAt": "2024-06-12T17:21:56.916480+00:00", + "completedAt": "2024-06-12T17:21:56.916597+00:00", + "notes": [] + }, + { + "id": "57399cf0-794d-4dfa-a38b-e5d678454f0f", + "createdAt": "2024-06-12T17:21:56.916667+00:00", + "commandType": "heaterShaker/closeLabwareLatch", + "key": "a244eacc-4cbc-48af-b54a-6c08cd534a51", + "status": "succeeded", + "params": { + "moduleId": "23347241-80bb-4a7e-9c91-5d9727a9e483:heaterShakerModuleType" + }, + "result": {}, + "startedAt": "2024-06-12T17:21:56.916694+00:00", + "completedAt": "2024-06-12T17:21:56.916715+00:00", + "notes": [] + }, + { + "id": "487eee54-9fdc-4dcd-b948-6ff860855887", + "createdAt": "2024-06-12T17:21:56.916808+00:00", + "commandType": "heaterShaker/deactivateHeater", + "key": "a6970f26-4800-4949-8592-d977df547d8b", + "status": "succeeded", + "params": { + "moduleId": "23347241-80bb-4a7e-9c91-5d9727a9e483:heaterShakerModuleType" + }, + "result": {}, + "startedAt": "2024-06-12T17:21:56.916832+00:00", + "completedAt": "2024-06-12T17:21:56.916851+00:00", + "notes": [] + }, + { + "id": "917f4e1b-d622-4602-9c13-75177b2119b2", + "createdAt": "2024-06-12T17:21:56.916913+00:00", + "commandType": "heaterShaker/setAndWaitForShakeSpeed", + "key": "ef808dac-1e14-47a1-843d-ce4ce63bdfce", + "status": "succeeded", + "params": { + "moduleId": "23347241-80bb-4a7e-9c91-5d9727a9e483:heaterShakerModuleType", + "rpm": 200.0 + }, + "result": { "pipetteRetracted": true }, + "startedAt": "2024-06-12T17:21:56.916939+00:00", + "completedAt": "2024-06-12T17:21:56.916969+00:00", + "notes": [] + }, + { + "id": "0807dfa8-3c0c-4125-964d-985c642afc34", + "createdAt": "2024-06-12T17:21:56.917053+00:00", + "commandType": "waitForDuration", + "key": "5b47f11e-0755-47d2-b844-f1363e28a54e", + "status": "succeeded", + "params": { "seconds": 60.0 }, + "result": {}, + "startedAt": "2024-06-12T17:21:56.917077+00:00", + "completedAt": "2024-06-12T17:21:56.917095+00:00", + "notes": [] + }, + { + "id": "0a40eee2-8902-4914-86f1-af3d961e7dcd", + "createdAt": "2024-06-12T17:21:56.917156+00:00", + "commandType": "heaterShaker/deactivateShaker", + "key": "614ec8d0-8abf-4aa4-b771-23ff2bde2881", + "status": "succeeded", + "params": { + "moduleId": "23347241-80bb-4a7e-9c91-5d9727a9e483:heaterShakerModuleType" + }, + "result": {}, + "startedAt": "2024-06-12T17:21:56.917187+00:00", + "completedAt": "2024-06-12T17:21:56.917208+00:00", + "notes": [] + }, + { + "id": "ddffeaa1-9f97-4bd3-99ee-5e0d8aee28bc", + "createdAt": "2024-06-12T17:21:56.917290+00:00", + "commandType": "heaterShaker/deactivateHeater", + "key": "dbbe307e-d361-4cb9-afe7-afeab944bfce", + "status": "succeeded", + "params": { + "moduleId": "23347241-80bb-4a7e-9c91-5d9727a9e483:heaterShakerModuleType" + }, + "result": {}, + "startedAt": "2024-06-12T17:21:56.917314+00:00", + "completedAt": "2024-06-12T17:21:56.917333+00:00", + "notes": [] + }, + { + "id": "176fe5ea-4a4f-4a78-a2b9-160fdd1a7be1", + "createdAt": "2024-06-12T17:21:56.917404+00:00", + "commandType": "heaterShaker/deactivateHeater", + "key": "62f98610-cbff-4acb-ba36-a3fbb9527ba9", + "status": "succeeded", + "params": { + "moduleId": "23347241-80bb-4a7e-9c91-5d9727a9e483:heaterShakerModuleType" + }, + "result": {}, + "startedAt": "2024-06-12T17:21:56.917427+00:00", + "completedAt": "2024-06-12T17:21:56.917445+00:00", + "notes": [] + }, + { + "id": "26022284-0a3c-48ad-b864-91f7c48ea19c", + "createdAt": "2024-06-12T17:21:56.917509+00:00", + "commandType": "heaterShaker/openLabwareLatch", + "key": "81cfeab1-175f-4501-8732-1ea1bc9b528b", + "status": "succeeded", + "params": { + "moduleId": "23347241-80bb-4a7e-9c91-5d9727a9e483:heaterShakerModuleType" + }, + "result": { "pipetteRetracted": true }, + "startedAt": "2024-06-12T17:21:56.917532+00:00", + "completedAt": "2024-06-12T17:21:56.917554+00:00", + "notes": [] + }, + { + "id": "5e8711de-7231-47d1-ab55-541dd21cef48", + "createdAt": "2024-06-12T17:21:56.917627+00:00", + "commandType": "moveLabware", + "key": "279df4d0-2c87-4f01-b016-5c42d5edce96", + "status": "succeeded", + "params": { + "labwareId": "54370838-4fca-4a14-b88a-7840e4903649:opentrons/opentrons_96_wellplate_200ul_pcr_full_skirt/2", + "newLocation": { "addressableAreaName": "B4" }, + "strategy": "usingGripper" + }, + "result": {}, + "startedAt": "2024-06-12T17:21:56.917651+00:00", + "completedAt": "2024-06-12T17:21:56.917738+00:00", + "notes": [] + }, + { + "id": "abf5283b-dc04-457e-b1ea-4dc848620954", + "createdAt": "2024-06-12T17:21:56.917841+00:00", + "commandType": "moveLabware", + "key": "f88f41dc-ddf9-4242-9ba4-21bd728ca25f", + "status": "succeeded", + "params": { + "labwareId": "f2d371ea-5146-4c89-8200-9c056a7f321a:opentrons/opentrons_flex_96_tiprack_1000ul/1", + "newLocation": { "addressableAreaName": "gripperWasteChute" }, + "strategy": "usingGripper" + }, + "result": {}, + "startedAt": "2024-06-12T17:21:56.917866+00:00", + "completedAt": "2024-06-12T17:21:56.917941+00:00", + "notes": [] + } + ], + "labware": [ + { + "id": "7c4d59fa-0e50-442f-adce-9e4b0c7f0b88:opentrons/opentrons_96_pcr_adapter/1", + "loadName": "opentrons_96_pcr_adapter", + "definitionUri": "opentrons/opentrons_96_pcr_adapter/1", + "location": { + "moduleId": "23347241-80bb-4a7e-9c91-5d9727a9e483:heaterShakerModuleType" + }, + "displayName": "Opentrons 96 PCR Heater-Shaker Adapter" + }, + { + "id": "f2d371ea-5146-4c89-8200-9c056a7f321a:opentrons/opentrons_flex_96_tiprack_1000ul/1", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "definitionUri": "opentrons/opentrons_flex_96_tiprack_1000ul/1", + "location": "offDeck", + "displayName": "Opentrons Flex 96 Tip Rack 1000 \u00b5L" + }, + { + "id": "54370838-4fca-4a14-b88a-7840e4903649:opentrons/opentrons_96_wellplate_200ul_pcr_full_skirt/2", + "loadName": "opentrons_96_wellplate_200ul_pcr_full_skirt", + "definitionUri": "opentrons/opentrons_96_wellplate_200ul_pcr_full_skirt/2", + "location": { "addressableAreaName": "B4" }, + "displayName": "Opentrons Tough 96 Well Plate 200 \u00b5L PCR Full Skirt" + }, + { + "id": "8bacda22-9e05-45e8-bef4-cc04414a204f:opentrons/axygen_1_reservoir_90ml/1", + "loadName": "axygen_1_reservoir_90ml", + "definitionUri": "opentrons/axygen_1_reservoir_90ml/1", + "location": { "slotName": "C1" }, + "displayName": "Axygen 1 Well Reservoir 90 mL" + } + ], + "pipettes": [ + { + "id": "9fcd50d9-92b2-45ac-acf1-e2cf773feffc", + "pipetteName": "p1000_single_flex", + "mount": "left" + } + ], + "modules": [ + { + "id": "23347241-80bb-4a7e-9c91-5d9727a9e483:heaterShakerModuleType", + "model": "heaterShakerModuleV1", + "location": { "slotName": "D1" }, + "serialNumber": "fake-serial-number-0d06c2c1-3ee4-467d-b1cb-31ce8a260ff5" + }, + { + "id": "fd6da9f1-d63b-414b-929e-c646b64790e9:thermocyclerModuleType", + "model": "thermocyclerModuleV2", + "location": { "slotName": "B1" }, + "serialNumber": "fake-serial-number-abe43d5b-1dd7-4fa9-bf8b-b089236d5adb" + } + ], + "liquids": [ + { + "id": "0", + "displayName": "h20", + "description": "", + "displayColor": "#b925ff" + }, + { + "id": "1", + "displayName": "sample", + "description": "", + "displayColor": "#ffd600" + } + ], + "errors": [] +} diff --git a/app/src/molecules/Command/__fixtures__/index.ts b/app/src/molecules/Command/__fixtures__/index.ts index 447a935d3dc..ba988a5197a 100644 --- a/app/src/molecules/Command/__fixtures__/index.ts +++ b/app/src/molecules/Command/__fixtures__/index.ts @@ -1,5 +1,5 @@ import robotSideAnalysis from './mockRobotSideAnalysis.json' -import doItAllAnalysis from './doItAllV8.json' +import doItAllAnalysis from './doItAllV10.json' import qiaseqAnalysis from './analysis_QIAseqFX24xv4_8.json' import type { CompletedProtocolAnalysis } from '@opentrons/shared-data' import type { CommandTextData } from '../types' diff --git a/app/src/molecules/Command/__tests__/CommandText.test.tsx b/app/src/molecules/Command/__tests__/CommandText.test.tsx index 484c9ee0323..a6614c6b330 100644 --- a/app/src/molecules/Command/__tests__/CommandText.test.tsx +++ b/app/src/molecules/Command/__tests__/CommandText.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { it, expect, describe } from 'vitest' import { screen } from '@testing-library/react' @@ -822,11 +821,9 @@ describe('CommandText', () => { i18nInstance: i18n, } ) - screen.getByText( - 'Thermocycler starting 2 repetitions of cycle composed of the following steps:' - ) - screen.getByText('temperature: 20°C, seconds: 10') - screen.getByText('temperature: 40°C, seconds: 30') + screen.getByText('Running thermocycler profile with 2 steps:') + screen.getByText('Temperature: 20°C, hold time: 0h 00m 10s') + screen.getByText('Temperature: 40°C, hold time: 0h 00m 30s') }) it('renders correct text for thermocycler/runProfile on ODD', () => { const mockProfileSteps = [ @@ -854,12 +851,128 @@ describe('CommandText', () => { i18nInstance: i18n, } ) + screen.getByText('Running thermocycler profile with 2 steps:') + screen.getByText('Temperature: 20°C, hold time: 0h 00m 10s') + expect( + screen.queryByText('Temperature: 40°C, hold time: 0h 00m 30s') + ).not.toBeInTheDocument() + }) + it('renders correct text for thermocycler/runExtendedProfile on Desktop', () => { + const mockProfileSteps = [ + { holdSeconds: 10, celsius: 20 }, + { + repetitions: 10, + steps: [ + { holdSeconds: 15, celsius: 10 }, + { holdSeconds: 12, celsius: 11 }, + ], + }, + { holdSeconds: 30, celsius: 40 }, + { + repetitions: 9, + steps: [ + { holdSeconds: 13000, celsius: 12 }, + { holdSeconds: 14, celsius: 13 }, + ], + }, + ] + renderWithProviders( + , + { + i18nInstance: i18n, + } + ) screen.getByText( - 'Thermocycler starting 2 repetitions of cycle composed of the following steps:' + 'Running thermocycler profile with 4 total steps and cycles:' + ) + screen.getByText('Temperature: 20°C, hold time: 0h 00m 10s') + screen.getByText('10 repetitions of the following steps:') + screen.getByText('Temperature: 10°C, hold time: 0h 00m 15s') + screen.getByText('Temperature: 11°C, hold time: 0h 00m 12s') + screen.getByText('Temperature: 40°C, hold time: 0h 00m 30s') + screen.getByText('9 repetitions of the following steps:') + screen.getByText('Temperature: 12°C, hold time: 3h 36m 40s') + screen.getByText('Temperature: 13°C, hold time: 0h 00m 14s') + }) + it('renders correct text for thermocycler/runExtendedProfile on ODD', () => { + const mockProfileSteps = [ + { holdSeconds: 10, celsius: 20 }, + { + repetitions: 10, + steps: [ + { holdSeconds: 15, celsius: 10 }, + { holdSeconds: 12, celsius: 11 }, + ], + }, + { holdSeconds: 30, celsius: 40 }, + { + repetitions: 9, + steps: [ + { holdSeconds: 13, celsius: 12 }, + { holdSeconds: 14, celsius: 13 }, + ], + }, + ] + renderWithProviders( + , + { + i18nInstance: i18n, + } + ) + screen.getByText( + 'Running thermocycler profile with 4 total steps and cycles:' ) - screen.getByText('temperature: 20°C, seconds: 10') + screen.getByText('Temperature: 20°C, hold time: 0h 00m 10s') + + expect( + screen.queryByText('10 repetitions of the following steps:') + ).not.toBeInTheDocument() + expect( + screen.queryByText('Temperature: 10°C, hold time: 0h 00m 15s') + ).not.toBeInTheDocument() + expect( + screen.queryByText('Temperature: 11°C, hold time: 0h 00m 12s') + ).not.toBeInTheDocument() + expect( + screen.queryByText('Temperature: 40°C, hold time: 0h 00m 30s') + ).not.toBeInTheDocument() + expect( + screen.queryByText('9 repetitions of the following steps:') + ).not.toBeInTheDocument() + expect( + screen.queryByText('Temperature: 12°C, hold time: 0h 00m 13s') + ).not.toBeInTheDocument() expect( - screen.queryByText('temperature: 40°C, seconds: 30') + screen.queryByText('Temperature: 13°C, hold time: 0h 00m 14s') ).not.toBeInTheDocument() }) it('renders correct text for heaterShaker/setAndWaitForShakeSpeed', () => { diff --git a/app/src/molecules/Command/hooks/index.ts b/app/src/molecules/Command/hooks/index.ts index 6b6545c7689..6f0457c174f 100644 --- a/app/src/molecules/Command/hooks/index.ts +++ b/app/src/molecules/Command/hooks/index.ts @@ -4,4 +4,6 @@ export type { UseCommandTextStringParams, GetCommandText, GetCommandTextResult, + GetTCRunExtendedProfileCommandTextResult, + GetTCRunProfileCommandTextResult, } from './useCommandTextString' diff --git a/app/src/molecules/Command/hooks/useCommandTextString/index.tsx b/app/src/molecules/Command/hooks/useCommandTextString/index.tsx index d10a9aa3211..1cf39cc0d1f 100644 --- a/app/src/molecules/Command/hooks/useCommandTextString/index.tsx +++ b/app/src/molecules/Command/hooks/useCommandTextString/index.tsx @@ -5,6 +5,10 @@ import type { TFunction } from 'i18next' import type { RunTimeCommand, RobotType } from '@opentrons/shared-data' import type { CommandTextData } from '../../types' import type { GetDirectTranslationCommandText } from './utils/getDirectTranslationCommandText' +import type { + TCProfileStepText, + TCProfileCycleText, +} from './utils/getTCRunExtendedProfileCommandText' export interface UseCommandTextStringParams { command: RunTimeCommand | null @@ -12,13 +16,32 @@ export interface UseCommandTextStringParams { robotType: RobotType } +export type CommandTextKind = + | 'generic' + | 'thermocycler/runProfile' + | 'thermocycler/runExtendedProfile' + export type GetCommandText = UseCommandTextStringParams & { t: TFunction } -export interface GetCommandTextResult { +export interface GetGenericCommandTextResult { + kind: 'generic' /* The actual command text. Ex "Homing all gantry, pipette, and plunger axes" */ commandText: string +} +export interface GetTCRunProfileCommandTextResult { + kind: 'thermocycler/runProfile' + commandText: string /* The TC run profile steps. */ - stepTexts?: string[] + stepTexts: string[] } +export interface GetTCRunExtendedProfileCommandTextResult { + kind: 'thermocycler/runExtendedProfile' + commandText: string + profileElementTexts: Array +} +export type GetCommandTextResult = + | GetGenericCommandTextResult + | GetTCRunProfileCommandTextResult + | GetTCRunExtendedProfileCommandTextResult // TODO(jh, 07-18-24): Move the testing that covers this from CommandText to a new file, and verify that all commands are // properly tested. @@ -52,6 +75,7 @@ export function useCommandTextString( case 'heaterShaker/deactivateShaker': case 'heaterShaker/waitForTemperature': return { + kind: 'generic', commandText: utils.getDirectTranslationCommandText( fullParams as GetDirectTranslationCommandText ), @@ -67,6 +91,7 @@ export function useCommandTextString( case 'dropTipInPlace': case 'pickUpTip': return { + kind: 'generic', commandText: utils.getPipettingCommandText(fullParams), } @@ -76,12 +101,14 @@ export function useCommandTextString( case 'loadModule': case 'loadLiquid': return { + kind: 'generic', commandText: utils.getLoadCommandText(fullParams), } case 'liquidProbe': case 'tryLiquidProbe': return { + kind: 'generic', commandText: utils.getLiquidProbeCommandText({ ...fullParams, command, @@ -94,6 +121,7 @@ export function useCommandTextString( case 'thermocycler/setTargetLidTemperature': case 'heaterShaker/setTargetTemperature': return { + kind: 'generic', commandText: utils.getTemperatureCommandText({ ...fullParams, command, @@ -103,8 +131,15 @@ export function useCommandTextString( case 'thermocycler/runProfile': return utils.getTCRunProfileCommandText({ ...fullParams, command }) + case 'thermocycler/runExtendedProfile': + return utils.getTCRunExtendedProfileCommandText({ + ...fullParams, + command, + }) + case 'heaterShaker/setAndWaitForShakeSpeed': return { + kind: 'generic', commandText: utils.getHSShakeSpeedCommandText({ ...fullParams, command, @@ -113,11 +148,13 @@ export function useCommandTextString( case 'moveToSlot': return { + kind: 'generic', commandText: utils.getMoveToSlotCommandText({ ...fullParams, command }), } case 'moveRelative': return { + kind: 'generic', commandText: utils.getMoveRelativeCommandText({ ...fullParams, command, @@ -126,6 +163,7 @@ export function useCommandTextString( case 'moveToCoordinates': return { + kind: 'generic', commandText: utils.getMoveToCoordinatesCommandText({ ...fullParams, command, @@ -134,11 +172,13 @@ export function useCommandTextString( case 'moveToWell': return { + kind: 'generic', commandText: utils.getMoveToWellCommandText({ ...fullParams, command }), } case 'moveLabware': return { + kind: 'generic', commandText: utils.getMoveLabwareCommandText({ ...fullParams, command, @@ -147,6 +187,7 @@ export function useCommandTextString( case 'configureForVolume': return { + kind: 'generic', commandText: utils.getConfigureForVolumeCommandText({ ...fullParams, command, @@ -155,6 +196,7 @@ export function useCommandTextString( case 'configureNozzleLayout': return { + kind: 'generic', commandText: utils.getConfigureNozzleLayoutCommandText({ ...fullParams, command, @@ -163,6 +205,7 @@ export function useCommandTextString( case 'prepareToAspirate': return { + kind: 'generic', commandText: utils.getPrepareToAspirateCommandText({ ...fullParams, command, @@ -171,6 +214,7 @@ export function useCommandTextString( case 'moveToAddressableArea': return { + kind: 'generic', commandText: utils.getMoveToAddressableAreaCommandText({ ...fullParams, command, @@ -179,6 +223,7 @@ export function useCommandTextString( case 'moveToAddressableAreaForDropTip': return { + kind: 'generic', commandText: utils.getMoveToAddressableAreaForDropTipCommandText({ ...fullParams, command, @@ -187,6 +232,7 @@ export function useCommandTextString( case 'waitForDuration': return { + kind: 'generic', commandText: utils.getWaitForDurationCommandText({ ...fullParams, command, @@ -196,6 +242,7 @@ export function useCommandTextString( case 'pause': // legacy pause command case 'waitForResume': return { + kind: 'generic', commandText: utils.getWaitForResumeCommandText({ ...fullParams, command, @@ -204,27 +251,31 @@ export function useCommandTextString( case 'delay': return { + kind: 'generic', commandText: utils.getDelayCommandText({ ...fullParams, command }), } case 'comment': return { + kind: 'generic', commandText: utils.getCommentCommandText({ ...fullParams, command }), } case 'custom': return { + kind: 'generic', commandText: utils.getCustomCommandText({ ...fullParams, command }), } case 'setRailLights': return { + kind: 'generic', commandText: utils.getRailLightsCommandText({ ...fullParams, command }), } case undefined: case null: - return { commandText: '' } + return { kind: 'generic', commandText: '' } default: console.warn( @@ -232,6 +283,7 @@ export function useCommandTextString( command ) return { + kind: 'generic', commandText: utils.getUnknownCommandText({ ...fullParams, command }), } } diff --git a/app/src/molecules/Command/hooks/useCommandTextString/utils/getConfigureNozzleLayoutCommandText.ts b/app/src/molecules/Command/hooks/useCommandTextString/utils/getConfigureNozzleLayoutCommandText.ts index e6693a4b937..04d476fadd1 100644 --- a/app/src/molecules/Command/hooks/useCommandTextString/utils/getConfigureNozzleLayoutCommandText.ts +++ b/app/src/molecules/Command/hooks/useCommandTextString/utils/getConfigureNozzleLayoutCommandText.ts @@ -13,8 +13,17 @@ export function getConfigureNozzleLayoutCommandText({ pip => pip.id === pipetteId )?.pipetteName + // TODO(cb, 2024-09-10): confirm these strings for copy consistency and add them to i18n + const ConfigAmount = { + SINGLE: 'single nozzle layout', + COLUMN: 'column layout', + ROW: 'row layout', + QUADRANT: 'partial layout', + ALL: 'all nozzles', + } + return t('configure_nozzle_layout', { - amount: configurationParams.style === 'COLUMN' ? '8' : 'all', + layout: ConfigAmount[configurationParams.style], pipette: pipetteName != null ? getPipetteSpecsV2(pipetteName)?.displayName : '', }) diff --git a/app/src/molecules/Command/hooks/useCommandTextString/utils/getTCRunExtendedProfileCommandText.ts b/app/src/molecules/Command/hooks/useCommandTextString/utils/getTCRunExtendedProfileCommandText.ts new file mode 100644 index 00000000000..4c4acde0b6f --- /dev/null +++ b/app/src/molecules/Command/hooks/useCommandTextString/utils/getTCRunExtendedProfileCommandText.ts @@ -0,0 +1,67 @@ +import { formatDurationLabeled } from '/app/transformations/commands' +import type { + TCRunExtendedProfileRunTimeCommand, + TCProfileCycle, + AtomicProfileStep, +} from '@opentrons/shared-data/command' +import type { GetTCRunExtendedProfileCommandTextResult } from '..' +import type { HandlesCommands } from './types' + +export interface TCProfileStepText { + kind: 'step' + stepText: string +} + +export interface TCProfileCycleText { + kind: 'cycle' + cycleText: string + stepTexts: TCProfileStepText[] +} + +export function getTCRunExtendedProfileCommandText({ + command, + t, +}: HandlesCommands): GetTCRunExtendedProfileCommandTextResult { + const { profileElements } = command.params + + const stepText = ({ + celsius, + holdSeconds, + }: AtomicProfileStep): TCProfileStepText => ({ + kind: 'step', + stepText: t('tc_run_profile_steps', { + celsius, + duration: formatDurationLabeled({ seconds: holdSeconds }), + }).trim(), + }) + + const stepTexts = (cycle: AtomicProfileStep[]): TCProfileStepText[] => + cycle.map(stepText) + + const startingCycleText = (cycle: TCProfileCycle): string => + t('tc_starting_extended_profile_cycle', { + repetitions: cycle.repetitions, + }) + + const cycleText = (cycle: TCProfileCycle): TCProfileCycleText => ({ + kind: 'cycle', + cycleText: startingCycleText(cycle), + stepTexts: stepTexts(cycle.steps), + }) + const profileElementTexts = ( + profile: Array + ): Array => + profile.map(element => + Object.hasOwn(element, 'repetitions') + ? cycleText(element as TCProfileCycle) + : stepText(element as AtomicProfileStep) + ) + + return { + kind: 'thermocycler/runExtendedProfile', + commandText: t('tc_starting_extended_profile', { + elementCount: profileElements.length, + }), + profileElementTexts: profileElementTexts(profileElements), + } +} diff --git a/app/src/molecules/Command/hooks/useCommandTextString/utils/getTCRunProfileCommandText.ts b/app/src/molecules/Command/hooks/useCommandTextString/utils/getTCRunProfileCommandText.ts index 2d279fca850..cbc56b02635 100644 --- a/app/src/molecules/Command/hooks/useCommandTextString/utils/getTCRunProfileCommandText.ts +++ b/app/src/molecules/Command/hooks/useCommandTextString/utils/getTCRunProfileCommandText.ts @@ -1,24 +1,29 @@ +import { formatDurationLabeled } from '/app/transformations/commands' import type { TCRunProfileRunTimeCommand } from '@opentrons/shared-data/command' -import type { GetCommandTextResult } from '..' +import type { GetTCRunProfileCommandTextResult } from '..' import type { HandlesCommands } from './types' export function getTCRunProfileCommandText({ command, t, -}: HandlesCommands): GetCommandTextResult { +}: HandlesCommands): GetTCRunProfileCommandTextResult { const { profile } = command.params const stepTexts = profile.map( ({ holdSeconds, celsius }: { holdSeconds: number; celsius: number }) => t('tc_run_profile_steps', { celsius, - seconds: holdSeconds, + duration: formatDurationLabeled({ seconds: holdSeconds }), }).trim() ) const startingProfileText = t('tc_starting_profile', { - repetitions: Object.keys(stepTexts).length, + stepCount: Object.keys(stepTexts).length, }) - return { commandText: startingProfileText, stepTexts } + return { + kind: 'thermocycler/runProfile', + commandText: startingProfileText, + stepTexts, + } } diff --git a/app/src/molecules/Command/hooks/useCommandTextString/utils/index.ts b/app/src/molecules/Command/hooks/useCommandTextString/utils/index.ts index ff3ad43fc8c..590824e558d 100644 --- a/app/src/molecules/Command/hooks/useCommandTextString/utils/index.ts +++ b/app/src/molecules/Command/hooks/useCommandTextString/utils/index.ts @@ -1,6 +1,7 @@ export { getLoadCommandText } from './getLoadCommandText' export { getTemperatureCommandText } from './getTemperatureCommandText' export { getTCRunProfileCommandText } from './getTCRunProfileCommandText' +export { getTCRunExtendedProfileCommandText } from './getTCRunExtendedProfileCommandText' export { getHSShakeSpeedCommandText } from './getHSShakeSpeedCommandText' export { getMoveToSlotCommandText } from './getMoveToSlotCommandText' export { getMoveRelativeCommandText } from './getMoveRelativeCommandText' diff --git a/app/src/molecules/FileUpload/FileUpload.stories.tsx b/app/src/molecules/FileUpload/FileUpload.stories.tsx index 5ddaab2698f..855a50c5629 100644 --- a/app/src/molecules/FileUpload/FileUpload.stories.tsx +++ b/app/src/molecules/FileUpload/FileUpload.stories.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import testFile from './__tests__/test-file.png' import { FileUpload } from '.' diff --git a/app/src/molecules/FileUpload/__tests__/FileUpload.test.tsx b/app/src/molecules/FileUpload/__tests__/FileUpload.test.tsx index 4e18cdfb08a..cd5b5adfd82 100644 --- a/app/src/molecules/FileUpload/__tests__/FileUpload.test.tsx +++ b/app/src/molecules/FileUpload/__tests__/FileUpload.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { beforeEach, describe, expect, it, vi } from 'vitest' import { screen } from '@testing-library/react' diff --git a/app/src/molecules/FileUpload/index.tsx b/app/src/molecules/FileUpload/index.tsx index dc953027235..777d186ccb0 100644 --- a/app/src/molecules/FileUpload/index.tsx +++ b/app/src/molecules/FileUpload/index.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { css } from 'styled-components' import { diff --git a/app/src/molecules/GenericWizardTile/GenericWizardTile.stories.tsx b/app/src/molecules/GenericWizardTile/GenericWizardTile.stories.tsx index b707286cb55..5444feff20b 100644 --- a/app/src/molecules/GenericWizardTile/GenericWizardTile.stories.tsx +++ b/app/src/molecules/GenericWizardTile/GenericWizardTile.stories.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { Provider } from 'react-redux' import { createStore } from 'redux' import { diff --git a/app/src/molecules/GenericWizardTile/__tests__/GenericWizardTile.test.tsx b/app/src/molecules/GenericWizardTile/__tests__/GenericWizardTile.test.tsx index 8070a4d3cd7..1f53800ff6d 100644 --- a/app/src/molecules/GenericWizardTile/__tests__/GenericWizardTile.test.tsx +++ b/app/src/molecules/GenericWizardTile/__tests__/GenericWizardTile.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import '@testing-library/jest-dom/vitest' import { describe, it, expect, vi, beforeEach } from 'vitest' import { fireEvent, screen } from '@testing-library/react' diff --git a/app/src/molecules/GenericWizardTile/index.tsx b/app/src/molecules/GenericWizardTile/index.tsx index 1d07d2bb9ea..24883a6ffea 100644 --- a/app/src/molecules/GenericWizardTile/index.tsx +++ b/app/src/molecules/GenericWizardTile/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useSelector } from 'react-redux' import styled, { css } from 'styled-components' import { useTranslation } from 'react-i18next' @@ -23,7 +23,7 @@ import { } from '@opentrons/components' import { getIsOnDevice } from '/app/redux/config' -import { NeedHelpLink } from '/app/organisms/CalibrationPanels' +import { NeedHelpLink } from '/app/molecules/OT2CalibrationNeedHelpLink' import { SmallButton, TextOnlyButton } from '/app/atoms/buttons' const ALIGN_BUTTONS = css` diff --git a/app/src/molecules/InProgressModal/InProgressModal.stories.tsx b/app/src/molecules/InProgressModal/InProgressModal.stories.tsx index 9fc5f5b30c9..cfa241a95fc 100644 --- a/app/src/molecules/InProgressModal/InProgressModal.stories.tsx +++ b/app/src/molecules/InProgressModal/InProgressModal.stories.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import type { Meta, StoryObj } from '@storybook/react' import { InProgressModal as InProgressModalComponent } from './' import { SimpleWizardInProgressBody } from '../SimpleWizardBody' diff --git a/app/src/molecules/InProgressModal/InProgressModal.tsx b/app/src/molecules/InProgressModal/InProgressModal.tsx index 24c5d9a8f71..c6fefe761a2 100644 --- a/app/src/molecules/InProgressModal/InProgressModal.tsx +++ b/app/src/molecules/InProgressModal/InProgressModal.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { css } from 'styled-components' import { ALIGN_CENTER, diff --git a/app/src/molecules/InProgressModal/__tests__/InProgressModal.test.tsx b/app/src/molecules/InProgressModal/__tests__/InProgressModal.test.tsx index 9d0f0874874..f670fa221c3 100644 --- a/app/src/molecules/InProgressModal/__tests__/InProgressModal.test.tsx +++ b/app/src/molecules/InProgressModal/__tests__/InProgressModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { screen } from '@testing-library/react' import { describe, it, beforeEach, vi } from 'vitest' import { i18n } from '/app/i18n' diff --git a/app/src/molecules/InfoMessage/__tests__/InfoMessage.test.tsx b/app/src/molecules/InfoMessage/__tests__/InfoMessage.test.tsx index c4327de590b..5ff6948976f 100644 --- a/app/src/molecules/InfoMessage/__tests__/InfoMessage.test.tsx +++ b/app/src/molecules/InfoMessage/__tests__/InfoMessage.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, beforeEach } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' import { screen } from '@testing-library/react' diff --git a/app/src/molecules/InfoMessage/index.tsx b/app/src/molecules/InfoMessage/index.tsx index 618233b0a20..c5d8bda1666 100644 --- a/app/src/molecules/InfoMessage/index.tsx +++ b/app/src/molecules/InfoMessage/index.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { ALIGN_CENTER, ALIGN_FLEX_START, diff --git a/app/src/molecules/InstrumentCard/InstrumentCard.stories.tsx b/app/src/molecules/InstrumentCard/InstrumentCard.stories.tsx index 7a56a1eba9c..7db21c46afc 100644 --- a/app/src/molecules/InstrumentCard/InstrumentCard.stories.tsx +++ b/app/src/molecules/InstrumentCard/InstrumentCard.stories.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { InstrumentCard } from './' import type { Story, Meta } from '@storybook/react' diff --git a/app/src/molecules/InstrumentCard/__tests__/InstrumentCard.test.tsx b/app/src/molecules/InstrumentCard/__tests__/InstrumentCard.test.tsx index 6efa70a7752..ca5905829f0 100644 --- a/app/src/molecules/InstrumentCard/__tests__/InstrumentCard.test.tsx +++ b/app/src/molecules/InstrumentCard/__tests__/InstrumentCard.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { fireEvent, render, screen } from '@testing-library/react' import '@testing-library/jest-dom/vitest' import { describe, it, expect, vi } from 'vitest' diff --git a/app/src/molecules/InstrumentCard/index.tsx b/app/src/molecules/InstrumentCard/index.tsx index 4384db759e3..bcb2ccb47ac 100644 --- a/app/src/molecules/InstrumentCard/index.tsx +++ b/app/src/molecules/InstrumentCard/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { ALIGN_CENTER, diff --git a/app/src/molecules/InterventionModal/CategorizedStepContent.stories.tsx b/app/src/molecules/InterventionModal/CategorizedStepContent.stories.tsx index 4037532cf6f..79d83fd57ef 100644 --- a/app/src/molecules/InterventionModal/CategorizedStepContent.stories.tsx +++ b/app/src/molecules/InterventionModal/CategorizedStepContent.stories.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { css } from 'styled-components' import { CategorizedStepContent, TwoColumn } from '.' @@ -14,7 +14,7 @@ import type { Meta, StoryObj } from '@storybook/react' type CommandType = RunTimeCommand['commandType'] const availableCommandTypes = uniq( - Fixtures.mockQIASeqTextData.commands.map(command => command.commandType) + Fixtures.mockDoItAllTextData.commands.map(command => command.commandType) ) const commandsByType: Partial> = {} @@ -22,7 +22,7 @@ function commandsOfType(type: CommandType): RunTimeCommand[] { if (type in commandsByType) { return commandsByType[type] } - commandsByType[type] = Fixtures.mockQIASeqTextData.commands.filter( + commandsByType[type] = Fixtures.mockDoItAllTextData.commands.filter( command => command.commandType === type ) return commandsByType[type] @@ -62,22 +62,22 @@ function Wrapper(props: WrapperProps): JSX.Element { const topCommandIndex = topCommand == null ? undefined - : Fixtures.mockQIASeqTextData.commands.indexOf(topCommand) + : Fixtures.mockDoItAllTextData.commands.indexOf(topCommand) const bottomCommand1Index = bottomCommand1 == null ? undefined - : Fixtures.mockQIASeqTextData.commands.indexOf(bottomCommand1) + : Fixtures.mockDoItAllTextData.commands.indexOf(bottomCommand1) const bottomCommand2Index = bottomCommand2 == null ? undefined - : Fixtures.mockQIASeqTextData.commands.indexOf(bottomCommand2) + : Fixtures.mockDoItAllTextData.commands.indexOf(bottomCommand2) return ( ) => { return renderWithProviders(, { diff --git a/app/src/molecules/ModuleInfo/index.ts b/app/src/molecules/ModuleInfo/index.ts new file mode 100644 index 00000000000..0fdce59dc8a --- /dev/null +++ b/app/src/molecules/ModuleInfo/index.ts @@ -0,0 +1 @@ +export * from './ModuleInfo' diff --git a/app/src/molecules/NavTab/NavTab.stories.tsx b/app/src/molecules/NavTab/NavTab.stories.tsx index a9b54818b51..d4847a1ed0f 100644 --- a/app/src/molecules/NavTab/NavTab.stories.tsx +++ b/app/src/molecules/NavTab/NavTab.stories.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { Flex, diff --git a/app/src/molecules/NavTab/__tests__/NavTab.test.tsx b/app/src/molecules/NavTab/__tests__/NavTab.test.tsx index 6345c2fac7d..176c76b60cc 100644 --- a/app/src/molecules/NavTab/__tests__/NavTab.test.tsx +++ b/app/src/molecules/NavTab/__tests__/NavTab.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import '@testing-library/jest-dom/vitest' import { describe, it, expect, beforeEach } from 'vitest' diff --git a/app/src/molecules/NavTab/index.tsx b/app/src/molecules/NavTab/index.tsx index 97d6e4a9f12..e170da56e43 100644 --- a/app/src/molecules/NavTab/index.tsx +++ b/app/src/molecules/NavTab/index.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import styled, { css } from 'styled-components' import { NavLink } from 'react-router-dom' diff --git a/app/src/molecules/ODDBackButton/ODDBackButton.stories.tsx b/app/src/molecules/ODDBackButton/ODDBackButton.stories.tsx index 6fad4d7ae4a..32719ce1665 100644 --- a/app/src/molecules/ODDBackButton/ODDBackButton.stories.tsx +++ b/app/src/molecules/ODDBackButton/ODDBackButton.stories.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { VIEWPORT } from '@opentrons/components' import { ODDBackButton } from '.' import type { Story, Meta } from '@storybook/react' diff --git a/app/src/molecules/ODDBackButton/__tests__/ODDBackButton.test.tsx b/app/src/molecules/ODDBackButton/__tests__/ODDBackButton.test.tsx index 5e186acf9cd..2b520279cf8 100644 --- a/app/src/molecules/ODDBackButton/__tests__/ODDBackButton.test.tsx +++ b/app/src/molecules/ODDBackButton/__tests__/ODDBackButton.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import '@testing-library/jest-dom/vitest' import { describe, it, expect, vi, beforeEach } from 'vitest' import { fireEvent, screen } from '@testing-library/react' diff --git a/app/src/molecules/ODDBackButton/index.tsx b/app/src/molecules/ODDBackButton/index.tsx index 9dff1968160..396feaa5e19 100644 --- a/app/src/molecules/ODDBackButton/index.tsx +++ b/app/src/molecules/ODDBackButton/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { ALIGN_CENTER, diff --git a/app/src/organisms/CalibrationPanels/NeedHelpLink.tsx b/app/src/molecules/OT2CalibrationNeedHelpLink/NeedHelpLink.tsx similarity index 96% rename from app/src/organisms/CalibrationPanels/NeedHelpLink.tsx rename to app/src/molecules/OT2CalibrationNeedHelpLink/NeedHelpLink.tsx index 01dac649b39..a87a7808827 100644 --- a/app/src/organisms/CalibrationPanels/NeedHelpLink.tsx +++ b/app/src/molecules/OT2CalibrationNeedHelpLink/NeedHelpLink.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useTranslation } from 'react-i18next' import { Flex, diff --git a/app/src/molecules/OT2CalibrationNeedHelpLink/index.ts b/app/src/molecules/OT2CalibrationNeedHelpLink/index.ts new file mode 100644 index 00000000000..38a22581118 --- /dev/null +++ b/app/src/molecules/OT2CalibrationNeedHelpLink/index.ts @@ -0,0 +1 @@ +export * from './NeedHelpLink' diff --git a/app/src/molecules/OddModal/ModalHeader.stories.tsx b/app/src/molecules/OddModal/ModalHeader.stories.tsx index adf9524988e..d6e5d95c598 100644 --- a/app/src/molecules/OddModal/ModalHeader.stories.tsx +++ b/app/src/molecules/OddModal/ModalHeader.stories.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { COLORS, VIEWPORT } from '@opentrons/components' import { OddModalHeader } from './OddModalHeader' import type { Story, Meta } from '@storybook/react' diff --git a/app/src/molecules/OddModal/OddModal.stories.tsx b/app/src/molecules/OddModal/OddModal.stories.tsx index 1ba0914779b..1210ad31005 100644 --- a/app/src/molecules/OddModal/OddModal.stories.tsx +++ b/app/src/molecules/OddModal/OddModal.stories.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { COLORS, Flex, BORDERS, SPACING, VIEWPORT } from '@opentrons/components' import { OddModal } from './OddModal' import type { Story, Meta } from '@storybook/react' diff --git a/app/src/molecules/OddModal/OddModal.tsx b/app/src/molecules/OddModal/OddModal.tsx index 1f18e3e1fd9..9b32974000c 100644 --- a/app/src/molecules/OddModal/OddModal.tsx +++ b/app/src/molecules/OddModal/OddModal.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { ALIGN_CENTER, BORDERS, diff --git a/app/src/molecules/OddModal/OddModalHeader.tsx b/app/src/molecules/OddModal/OddModalHeader.tsx index cd79d1a81f5..5f2a403a8af 100644 --- a/app/src/molecules/OddModal/OddModalHeader.tsx +++ b/app/src/molecules/OddModal/OddModalHeader.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { ALIGN_CENTER, BORDERS, @@ -35,7 +34,7 @@ export function OddModalHeader(props: OddModalHeaderBaseProps): JSX.Element { borderRadius={`${BORDERS.borderRadius12} ${BORDERS.borderRadius12} 0px 0px`} {...styleProps} > - + {iconName != null && iconColor != null ? ( (null) - React.useEffect(() => { + const [snippet, setSnippet] = useState(null) + useEffect(() => { if (labware.length > 0 && labwareOffsets != null) { setSnippet( createSnippet(mode, commands, labware, modules, labwareOffsets) diff --git a/app/src/molecules/ReleaseNotes/index.tsx b/app/src/molecules/ReleaseNotes/index.tsx index 5e59ecb5019..0c6207f84a1 100644 --- a/app/src/molecules/ReleaseNotes/index.tsx +++ b/app/src/molecules/ReleaseNotes/index.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import Markdown from 'react-markdown' import { Box, COLORS, SPACING, LegacyStyledText } from '@opentrons/components' diff --git a/app/src/organisms/Devices/ProtocolRun/RunTimer.tsx b/app/src/molecules/RunTimer/RunTimer.tsx similarity index 92% rename from app/src/organisms/Devices/ProtocolRun/RunTimer.tsx rename to app/src/molecules/RunTimer/RunTimer.tsx index ba285e0bb12..74962c82bb5 100644 --- a/app/src/organisms/Devices/ProtocolRun/RunTimer.tsx +++ b/app/src/molecules/RunTimer/RunTimer.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { RUN_STATUS_STOP_REQUESTED } from '@opentrons/api-client' import { @@ -24,7 +24,7 @@ export function RunTimer({ completedAt: string | null style?: CSSProp }): JSX.Element { - const [now, setNow] = React.useState(Date()) + const [now, setNow] = useState(Date()) useInterval( () => { setNow(Date()) diff --git a/app/src/molecules/RunTimer/index.ts b/app/src/molecules/RunTimer/index.ts new file mode 100644 index 00000000000..c48cfaa132c --- /dev/null +++ b/app/src/molecules/RunTimer/index.ts @@ -0,0 +1 @@ +export * from './RunTimer' diff --git a/app/src/molecules/SimpleWizardBody/SimpleWizardBody.stories.tsx b/app/src/molecules/SimpleWizardBody/SimpleWizardBody.stories.tsx index 7b66034657b..7e73f357d45 100644 --- a/app/src/molecules/SimpleWizardBody/SimpleWizardBody.stories.tsx +++ b/app/src/molecules/SimpleWizardBody/SimpleWizardBody.stories.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { Provider } from 'react-redux' import { createStore } from 'redux' import { COLORS, PrimaryButton, ModalShell } from '@opentrons/components' diff --git a/app/src/molecules/SimpleWizardBody/SimpleWizardBodyContainer.tsx b/app/src/molecules/SimpleWizardBody/SimpleWizardBodyContainer.tsx index 11644dba212..fef84670b19 100644 --- a/app/src/molecules/SimpleWizardBody/SimpleWizardBodyContainer.tsx +++ b/app/src/molecules/SimpleWizardBody/SimpleWizardBodyContainer.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { css } from 'styled-components' import { diff --git a/app/src/molecules/SimpleWizardBody/SimpleWizardBodyContent.tsx b/app/src/molecules/SimpleWizardBody/SimpleWizardBodyContent.tsx index 84e83966f07..16113e28c9a 100644 --- a/app/src/molecules/SimpleWizardBody/SimpleWizardBodyContent.tsx +++ b/app/src/molecules/SimpleWizardBody/SimpleWizardBodyContent.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useSelector } from 'react-redux' import { css } from 'styled-components' import { diff --git a/app/src/molecules/SimpleWizardBody/SimpleWizardInProgressBody.tsx b/app/src/molecules/SimpleWizardBody/SimpleWizardInProgressBody.tsx index 55bd83b534b..10882025dfc 100644 --- a/app/src/molecules/SimpleWizardBody/SimpleWizardInProgressBody.tsx +++ b/app/src/molecules/SimpleWizardBody/SimpleWizardInProgressBody.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import type { StyleProps } from '@opentrons/components' import { InProgressModal } from '../InProgressModal/InProgressModal' import { SimpleWizardBodyContainer } from './SimpleWizardBodyContainer' diff --git a/app/src/molecules/SimpleWizardBody/__tests__/SimpleWizardBody.test.tsx b/app/src/molecules/SimpleWizardBody/__tests__/SimpleWizardBody.test.tsx index 3d2b0103578..9849e8fa03c 100644 --- a/app/src/molecules/SimpleWizardBody/__tests__/SimpleWizardBody.test.tsx +++ b/app/src/molecules/SimpleWizardBody/__tests__/SimpleWizardBody.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { screen } from '@testing-library/react' import { describe, it, expect, vi, beforeEach } from 'vitest' import { COLORS } from '@opentrons/components' diff --git a/app/src/molecules/SimpleWizardBody/index.tsx b/app/src/molecules/SimpleWizardBody/index.tsx index c0408417030..b554b71b90e 100644 --- a/app/src/molecules/SimpleWizardBody/index.tsx +++ b/app/src/molecules/SimpleWizardBody/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { SimpleWizardBodyContainer } from './SimpleWizardBodyContainer' import { SimpleWizardBodyContent } from './SimpleWizardBodyContent' diff --git a/app/src/organisms/TaskList/TaskList.stories.tsx b/app/src/molecules/TaskList/TaskList.stories.tsx similarity index 99% rename from app/src/organisms/TaskList/TaskList.stories.tsx rename to app/src/molecules/TaskList/TaskList.stories.tsx index b17bf6204d2..5c6775b41cf 100644 --- a/app/src/organisms/TaskList/TaskList.stories.tsx +++ b/app/src/molecules/TaskList/TaskList.stories.tsx @@ -1,10 +1,10 @@ -import * as React from 'react' +import type * as React from 'react' import { TaskList as TaskListComponent } from './' import type { Story, Meta } from '@storybook/react' export default { - title: 'App/Organisms/TaskList', + title: 'App/Molecules/TaskList', component: TaskListComponent, } as Meta diff --git a/app/src/organisms/TaskList/index.tsx b/app/src/molecules/TaskList/index.tsx similarity index 98% rename from app/src/organisms/TaskList/index.tsx rename to app/src/molecules/TaskList/index.tsx index 0fd37fc0394..3f45de76bcb 100644 --- a/app/src/organisms/TaskList/index.tsx +++ b/app/src/molecules/TaskList/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, useEffect, Fragment } from 'react' import { ALIGN_CENTER, @@ -23,6 +23,7 @@ import { import { TertiaryButton } from '/app/atoms/buttons' import type { SubTaskProps, TaskListProps, TaskProps } from './types' +export type * from './types' const TASK_CONNECTOR_STYLE = `1px solid ${COLORS.grey40}` @@ -134,7 +135,7 @@ function ProgressTrackerItem({ const isFinalSubTaskOfTaskList = isLastSubTask && isLastTask return ( - + {/* subtask circle icon component */} - + ) })} @@ -342,11 +343,11 @@ function Task({ const hasSubTasks = subTasks.length > 0 const isDisabled = generalTaskDisabledReason != null - const [isTaskOpen, setIsTaskOpen] = React.useState( + const [isTaskOpen, setIsTaskOpen] = useState( hasSubTasks && isActiveTask ) - React.useEffect(() => { + useEffect(() => { setIsTaskOpen(hasSubTasks && isActiveTask) }, [isActiveTask, hasSubTasks]) diff --git a/app/src/organisms/TaskList/types.ts b/app/src/molecules/TaskList/types.ts similarity index 100% rename from app/src/organisms/TaskList/types.ts rename to app/src/molecules/TaskList/types.ts diff --git a/app/src/molecules/ToggleGroup/__tests__/useToggleGroup.test.tsx b/app/src/molecules/ToggleGroup/__tests__/useToggleGroup.test.tsx index 5312b7d33c9..c4829b79615 100644 --- a/app/src/molecules/ToggleGroup/__tests__/useToggleGroup.test.tsx +++ b/app/src/molecules/ToggleGroup/__tests__/useToggleGroup.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { Provider } from 'react-redux' import { createStore } from 'redux' import '@testing-library/jest-dom/vitest' diff --git a/app/src/molecules/UnorderedList/index.tsx b/app/src/molecules/UnorderedList/index.tsx index 685adc170f5..cf9937266a8 100644 --- a/app/src/molecules/UnorderedList/index.tsx +++ b/app/src/molecules/UnorderedList/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { css } from 'styled-components' import { SPACING, LegacyStyledText } from '@opentrons/components' diff --git a/app/src/molecules/UpdateBanner/__tests__/UpdateBanner.test.tsx b/app/src/molecules/UpdateBanner/__tests__/UpdateBanner.test.tsx index c40d1e2e197..52b074b37d8 100644 --- a/app/src/molecules/UpdateBanner/__tests__/UpdateBanner.test.tsx +++ b/app/src/molecules/UpdateBanner/__tests__/UpdateBanner.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, expect, vi, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' import { when } from 'vitest-when' diff --git a/app/src/molecules/UpdateBanner/index.tsx b/app/src/molecules/UpdateBanner/index.tsx index 12927dc5eea..31a7dbe3d49 100644 --- a/app/src/molecules/UpdateBanner/index.tsx +++ b/app/src/molecules/UpdateBanner/index.tsx @@ -1,9 +1,9 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { ALIGN_START, Btn, + Banner, DIRECTION_COLUMN, Flex, SPACING, @@ -11,9 +11,8 @@ import { TYPOGRAPHY, useHoverTooltip, } from '@opentrons/components' - -import { Banner } from '/app/atoms/Banner' import { useIsFlex } from '/app/redux-resources/robots' + import { useIsEstopNotDisengaged } from '/app/resources/devices/hooks/useIsEstopNotDisengaged' interface UpdateBannerProps { diff --git a/app/src/molecules/UploadInput/UploadInput.stories.tsx b/app/src/molecules/UploadInput/UploadInput.stories.tsx index d27cb0198d8..461e23fd01a 100644 --- a/app/src/molecules/UploadInput/UploadInput.stories.tsx +++ b/app/src/molecules/UploadInput/UploadInput.stories.tsx @@ -1,5 +1,3 @@ -import * as React from 'react' - import { ALIGN_CENTER, COLORS, diff --git a/app/src/molecules/UploadInput/__tests__/UploadInput.test.tsx b/app/src/molecules/UploadInput/__tests__/UploadInput.test.tsx index 92e69095ba2..5c99328ade3 100644 --- a/app/src/molecules/UploadInput/__tests__/UploadInput.test.tsx +++ b/app/src/molecules/UploadInput/__tests__/UploadInput.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { describe, it, expect, vi, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' import { fireEvent, screen } from '@testing-library/react' diff --git a/app/src/molecules/WizardHeader/WizardHeader.stories.tsx b/app/src/molecules/WizardHeader/WizardHeader.stories.tsx index 70db49aa835..0d26e4f967d 100644 --- a/app/src/molecules/WizardHeader/WizardHeader.stories.tsx +++ b/app/src/molecules/WizardHeader/WizardHeader.stories.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { WizardHeader } from './index' import type { Story, Meta } from '@storybook/react' diff --git a/app/src/molecules/WizardHeader/__tests__/WizardHeader.test.tsx b/app/src/molecules/WizardHeader/__tests__/WizardHeader.test.tsx index 5cecec7d87d..0e11447cac2 100644 --- a/app/src/molecules/WizardHeader/__tests__/WizardHeader.test.tsx +++ b/app/src/molecules/WizardHeader/__tests__/WizardHeader.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, expect, vi, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' import { fireEvent, screen } from '@testing-library/react' diff --git a/app/src/molecules/WizardHeader/index.tsx b/app/src/molecules/WizardHeader/index.tsx index 1f190e64915..1b0d23baa39 100644 --- a/app/src/molecules/WizardHeader/index.tsx +++ b/app/src/molecules/WizardHeader/index.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { css } from 'styled-components' import { diff --git a/app/src/molecules/WizardRequiredEquipmentList/index.tsx b/app/src/molecules/WizardRequiredEquipmentList/index.tsx index 7f46754bf6f..69c5cd02893 100644 --- a/app/src/molecules/WizardRequiredEquipmentList/index.tsx +++ b/app/src/molecules/WizardRequiredEquipmentList/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useSelector } from 'react-redux' import { useTranslation } from 'react-i18next' import { css } from 'styled-components' @@ -20,7 +20,7 @@ import { import { getIsOnDevice } from '/app/redux/config' import { Divider } from '/app/atoms/structure' -import { labwareImages } from '/app/organisms/CalibrationPanels/labwareImages' +import { labwareImages } from '/app/local-resources/labware' import { equipmentImages } from './equipmentImages' import type { StyleProps } from '@opentrons/components' diff --git a/app/src/molecules/modals/BottomButtonBar.tsx b/app/src/molecules/modals/BottomButtonBar.tsx index 5abb73828aa..d5c202e943c 100644 --- a/app/src/molecules/modals/BottomButtonBar.tsx +++ b/app/src/molecules/modals/BottomButtonBar.tsx @@ -1,6 +1,6 @@ // bottom button bar for modals // TODO(mc, 2018-08-18): maybe make this the default AlertModal behavior -import * as React from 'react' +import type * as React from 'react' import cx from 'classnames' import { OutlineButton } from '@opentrons/components' diff --git a/app/src/molecules/modals/ErrorModal.tsx b/app/src/molecules/modals/ErrorModal.tsx index f4a273a5bdb..3e740a73d2c 100644 --- a/app/src/molecules/modals/ErrorModal.tsx +++ b/app/src/molecules/modals/ErrorModal.tsx @@ -1,8 +1,7 @@ -import * as React from 'react' import { createPortal } from 'react-dom' import { Link } from 'react-router-dom' import { AlertModal } from '@opentrons/components' -import { getModalPortalEl } from '../../App/portal' +import { getModalPortalEl } from '/app/App/portal' import styles from './styles.module.css' import type { ButtonProps } from '@opentrons/components' diff --git a/app/src/molecules/modals/ScrollableAlertModal.tsx b/app/src/molecules/modals/ScrollableAlertModal.tsx index 32aae3def4f..c98846899b8 100644 --- a/app/src/molecules/modals/ScrollableAlertModal.tsx +++ b/app/src/molecules/modals/ScrollableAlertModal.tsx @@ -1,5 +1,5 @@ // AlertModal with vertical scrolling -import * as React from 'react' +import type * as React from 'react' import omit from 'lodash/omit' import { AlertModal } from '@opentrons/components' diff --git a/app/src/organisms/ApplyHistoricOffsets/LabwareOffsetTable.tsx b/app/src/organisms/ApplyHistoricOffsets/LabwareOffsetTable.tsx index 7c5e6f53446..3a7276a2ed8 100644 --- a/app/src/organisms/ApplyHistoricOffsets/LabwareOffsetTable.tsx +++ b/app/src/organisms/ApplyHistoricOffsets/LabwareOffsetTable.tsx @@ -1,10 +1,9 @@ -import * as React from 'react' import styled from 'styled-components' import { useTranslation } from 'react-i18next' import { SPACING, TYPOGRAPHY, COLORS } from '@opentrons/components' import { OffsetVector } from '/app/molecules/OffsetVector' -import { formatTimestamp } from '../Devices/utils' -import { getDisplayLocation } from '../LabwarePositionCheck/utils/getDisplayLocation' +import { formatTimestamp } from '/app/transformations/runs' +import { getDisplayLocation } from '/app/organisms/LabwarePositionCheck/utils/getDisplayLocation' import type { LabwareDefinition2 } from '@opentrons/shared-data' import type { OffsetCandidate } from './hooks/useOffsetCandidatesForAnalysis' import type { TFunction } from 'i18next' diff --git a/app/src/organisms/ApplyHistoricOffsets/__tests__/ApplyHistoricOffsets.test.tsx b/app/src/organisms/ApplyHistoricOffsets/__tests__/ApplyHistoricOffsets.test.tsx index 8a638843a68..30508bc0565 100644 --- a/app/src/organisms/ApplyHistoricOffsets/__tests__/ApplyHistoricOffsets.test.tsx +++ b/app/src/organisms/ApplyHistoricOffsets/__tests__/ApplyHistoricOffsets.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, vi } from 'vitest' @@ -14,7 +14,7 @@ import type { LabwareDefinition2 } from '@opentrons/shared-data' import type { OffsetCandidate } from '../hooks/useOffsetCandidatesForAnalysis' vi.mock('/app/redux/config') -vi.mock('../../LabwarePositionCheck/utils/labware') +vi.mock('/app/organisms/LabwarePositionCheck/utils/labware') vi.mock('/app/molecules/Command/utils/getLabwareDefinitionsFromCommands') const mockLabwareDef = fixture96Plate as LabwareDefinition2 diff --git a/app/src/organisms/ApplyHistoricOffsets/__tests__/LabwareOffsetTable.test.tsx b/app/src/organisms/ApplyHistoricOffsets/__tests__/LabwareOffsetTable.test.tsx index 742a5f7f50b..8b527e239f1 100644 --- a/app/src/organisms/ApplyHistoricOffsets/__tests__/LabwareOffsetTable.test.tsx +++ b/app/src/organisms/ApplyHistoricOffsets/__tests__/LabwareOffsetTable.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { screen } from '@testing-library/react' import { describe, it, expect } from 'vitest' import { fixture96Plate, fixtureTiprackAdapter } from '@opentrons/shared-data' diff --git a/app/src/organisms/ApplyHistoricOffsets/hooks/__tests__/useHistoricRunDetails.test.tsx b/app/src/organisms/ApplyHistoricOffsets/hooks/__tests__/useHistoricRunDetails.test.tsx index 5fe40a9333e..a697fabb2d3 100644 --- a/app/src/organisms/ApplyHistoricOffsets/hooks/__tests__/useHistoricRunDetails.test.tsx +++ b/app/src/organisms/ApplyHistoricOffsets/hooks/__tests__/useHistoricRunDetails.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, expect, vi } from 'vitest' import { when } from 'vitest-when' import { renderHook, waitFor } from '@testing-library/react' diff --git a/app/src/organisms/ApplyHistoricOffsets/hooks/__tests__/useOffsetCandidatesForAnalysis.test.tsx b/app/src/organisms/ApplyHistoricOffsets/hooks/__tests__/useOffsetCandidatesForAnalysis.test.tsx index 48cfcfb3f78..832417cb9af 100644 --- a/app/src/organisms/ApplyHistoricOffsets/hooks/__tests__/useOffsetCandidatesForAnalysis.test.tsx +++ b/app/src/organisms/ApplyHistoricOffsets/hooks/__tests__/useOffsetCandidatesForAnalysis.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, expect, vi, beforeEach } from 'vitest' import { when } from 'vitest-when' import { renderHook, waitFor } from '@testing-library/react' diff --git a/app/src/organisms/ApplyHistoricOffsets/index.tsx b/app/src/organisms/ApplyHistoricOffsets/index.tsx index 3ef0af4256d..240afa960b2 100644 --- a/app/src/organisms/ApplyHistoricOffsets/index.tsx +++ b/app/src/organisms/ApplyHistoricOffsets/index.tsx @@ -18,10 +18,10 @@ import { ModalHeader, ModalShell, } from '@opentrons/components' -import { getTopPortalEl } from '../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import { ExternalLink } from '/app/atoms/Link/ExternalLink' import { PythonLabwareOffsetSnippet } from '/app/molecules/PythonLabwareOffsetSnippet' -import { LabwareOffsetTabs } from '../LabwareOffsetTabs' +import { LabwareOffsetTabs } from '/app/organisms/LabwareOffsetTabs' import { getLabwareDefinitionsFromCommands } from '/app/molecules/Command/utils/getLabwareDefinitionsFromCommands' import { LabwareOffsetTable } from './LabwareOffsetTable' import { getIsLabwareOffsetCodeSnippetsOn } from '/app/redux/config' diff --git a/app/src/organisms/AdvancedSettings/AdditionalCustomLabwareSourceFolder.tsx b/app/src/organisms/Desktop/AdvancedSettings/AdditionalCustomLabwareSourceFolder.tsx similarity index 98% rename from app/src/organisms/AdvancedSettings/AdditionalCustomLabwareSourceFolder.tsx rename to app/src/organisms/Desktop/AdvancedSettings/AdditionalCustomLabwareSourceFolder.tsx index 5dc07daa93e..57708f2854d 100644 --- a/app/src/organisms/AdvancedSettings/AdditionalCustomLabwareSourceFolder.tsx +++ b/app/src/organisms/Desktop/AdvancedSettings/AdditionalCustomLabwareSourceFolder.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { useDispatch, useSelector } from 'react-redux' diff --git a/app/src/organisms/AdvancedSettings/ClearUnavailableRobots.tsx b/app/src/organisms/Desktop/AdvancedSettings/ClearUnavailableRobots.tsx similarity index 98% rename from app/src/organisms/AdvancedSettings/ClearUnavailableRobots.tsx rename to app/src/organisms/Desktop/AdvancedSettings/ClearUnavailableRobots.tsx index 0ed7a097e88..f71392df640 100644 --- a/app/src/organisms/AdvancedSettings/ClearUnavailableRobots.tsx +++ b/app/src/organisms/Desktop/AdvancedSettings/ClearUnavailableRobots.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { createPortal } from 'react-dom' import { useTranslation } from 'react-i18next' import { useDispatch, useSelector } from 'react-redux' @@ -25,7 +24,7 @@ import { import { TertiaryButton } from '/app/atoms/buttons' import { useToaster } from '/app/organisms/ToasterOven' -import { getTopPortalEl } from '../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import { clearDiscoveryCache, getReachableRobots, diff --git a/app/src/organisms/AdvancedSettings/EnableDevTools.tsx b/app/src/organisms/Desktop/AdvancedSettings/EnableDevTools.tsx similarity index 97% rename from app/src/organisms/AdvancedSettings/EnableDevTools.tsx rename to app/src/organisms/Desktop/AdvancedSettings/EnableDevTools.tsx index c117908913b..55d832027e9 100644 --- a/app/src/organisms/AdvancedSettings/EnableDevTools.tsx +++ b/app/src/organisms/Desktop/AdvancedSettings/EnableDevTools.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { useSelector, useDispatch } from 'react-redux' diff --git a/app/src/organisms/AdvancedSettings/OT2AdvancedSettings.tsx b/app/src/organisms/Desktop/AdvancedSettings/OT2AdvancedSettings.tsx similarity index 98% rename from app/src/organisms/AdvancedSettings/OT2AdvancedSettings.tsx rename to app/src/organisms/Desktop/AdvancedSettings/OT2AdvancedSettings.tsx index b0cb39caa1f..7ab3ebb0bd0 100644 --- a/app/src/organisms/AdvancedSettings/OT2AdvancedSettings.tsx +++ b/app/src/organisms/Desktop/AdvancedSettings/OT2AdvancedSettings.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useSelector, useDispatch } from 'react-redux' import { useTranslation } from 'react-i18next' import { css } from 'styled-components' diff --git a/app/src/organisms/AdvancedSettings/OverridePathToPython.tsx b/app/src/organisms/Desktop/AdvancedSettings/OverridePathToPython.tsx similarity index 98% rename from app/src/organisms/AdvancedSettings/OverridePathToPython.tsx rename to app/src/organisms/Desktop/AdvancedSettings/OverridePathToPython.tsx index e8fdd2f9b92..d0e5b7d6d93 100644 --- a/app/src/organisms/AdvancedSettings/OverridePathToPython.tsx +++ b/app/src/organisms/Desktop/AdvancedSettings/OverridePathToPython.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useTranslation } from 'react-i18next' import { useSelector, useDispatch } from 'react-redux' diff --git a/app/src/organisms/AdvancedSettings/PreventRobotCaching.tsx b/app/src/organisms/Desktop/AdvancedSettings/PreventRobotCaching.tsx similarity index 98% rename from app/src/organisms/AdvancedSettings/PreventRobotCaching.tsx rename to app/src/organisms/Desktop/AdvancedSettings/PreventRobotCaching.tsx index b0429e50ae9..0b65e78854e 100644 --- a/app/src/organisms/AdvancedSettings/PreventRobotCaching.tsx +++ b/app/src/organisms/Desktop/AdvancedSettings/PreventRobotCaching.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { Trans, useTranslation } from 'react-i18next' import { useDispatch, useSelector } from 'react-redux' diff --git a/app/src/organisms/AdvancedSettings/ShowHeaterShakerAttachmentModal.tsx b/app/src/organisms/Desktop/AdvancedSettings/ShowHeaterShakerAttachmentModal.tsx similarity index 98% rename from app/src/organisms/AdvancedSettings/ShowHeaterShakerAttachmentModal.tsx rename to app/src/organisms/Desktop/AdvancedSettings/ShowHeaterShakerAttachmentModal.tsx index 2883a1aba44..578872b389b 100644 --- a/app/src/organisms/AdvancedSettings/ShowHeaterShakerAttachmentModal.tsx +++ b/app/src/organisms/Desktop/AdvancedSettings/ShowHeaterShakerAttachmentModal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { useDispatch, useSelector } from 'react-redux' diff --git a/app/src/organisms/AdvancedSettings/ShowLabwareOffsetSnippets.tsx b/app/src/organisms/Desktop/AdvancedSettings/ShowLabwareOffsetSnippets.tsx similarity index 98% rename from app/src/organisms/AdvancedSettings/ShowLabwareOffsetSnippets.tsx rename to app/src/organisms/Desktop/AdvancedSettings/ShowLabwareOffsetSnippets.tsx index b0ec158a017..61dc9a62788 100644 --- a/app/src/organisms/AdvancedSettings/ShowLabwareOffsetSnippets.tsx +++ b/app/src/organisms/Desktop/AdvancedSettings/ShowLabwareOffsetSnippets.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { useSelector, useDispatch } from 'react-redux' diff --git a/app/src/organisms/AdvancedSettings/U2EInformation.tsx b/app/src/organisms/Desktop/AdvancedSettings/U2EInformation.tsx similarity index 98% rename from app/src/organisms/AdvancedSettings/U2EInformation.tsx rename to app/src/organisms/Desktop/AdvancedSettings/U2EInformation.tsx index cfd1c59f5f0..fb55e883dba 100644 --- a/app/src/organisms/AdvancedSettings/U2EInformation.tsx +++ b/app/src/organisms/Desktop/AdvancedSettings/U2EInformation.tsx @@ -1,10 +1,10 @@ -import * as React from 'react' import { useSelector } from 'react-redux' import { useTranslation } from 'react-i18next' import { ALIGN_CENTER, Box, + Banner, COLORS, DIRECTION_COLUMN, Flex, @@ -15,7 +15,6 @@ import { TYPOGRAPHY, } from '@opentrons/components' -import { Banner } from '/app/atoms/Banner' import { getU2EAdapterDevice, getU2EWindowsDriverStatus, diff --git a/app/src/organisms/AdvancedSettings/UpdatedChannel.tsx b/app/src/organisms/Desktop/AdvancedSettings/UpdatedChannel.tsx similarity index 98% rename from app/src/organisms/AdvancedSettings/UpdatedChannel.tsx rename to app/src/organisms/Desktop/AdvancedSettings/UpdatedChannel.tsx index 10cce14e67e..aca0348cb7b 100644 --- a/app/src/organisms/AdvancedSettings/UpdatedChannel.tsx +++ b/app/src/organisms/Desktop/AdvancedSettings/UpdatedChannel.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useTranslation } from 'react-i18next' import { useDispatch, useSelector } from 'react-redux' diff --git a/app/src/organisms/AdvancedSettings/__tests__/AdditionalCustomLabwareSourceFolder.test.tsx b/app/src/organisms/Desktop/AdvancedSettings/__tests__/AdditionalCustomLabwareSourceFolder.test.tsx similarity index 98% rename from app/src/organisms/AdvancedSettings/__tests__/AdditionalCustomLabwareSourceFolder.test.tsx rename to app/src/organisms/Desktop/AdvancedSettings/__tests__/AdditionalCustomLabwareSourceFolder.test.tsx index 59789b1c109..48a365afa0b 100644 --- a/app/src/organisms/AdvancedSettings/__tests__/AdditionalCustomLabwareSourceFolder.test.tsx +++ b/app/src/organisms/Desktop/AdvancedSettings/__tests__/AdditionalCustomLabwareSourceFolder.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { describe, it, expect, vi, beforeEach } from 'vitest' import { fireEvent, screen } from '@testing-library/react' import { i18n } from '/app/i18n' diff --git a/app/src/organisms/AdvancedSettings/__tests__/ClearUnavailableRobots.test.tsx b/app/src/organisms/Desktop/AdvancedSettings/__tests__/ClearUnavailableRobots.test.tsx similarity index 98% rename from app/src/organisms/AdvancedSettings/__tests__/ClearUnavailableRobots.test.tsx rename to app/src/organisms/Desktop/AdvancedSettings/__tests__/ClearUnavailableRobots.test.tsx index 352f3516204..008a74ad734 100644 --- a/app/src/organisms/AdvancedSettings/__tests__/ClearUnavailableRobots.test.tsx +++ b/app/src/organisms/Desktop/AdvancedSettings/__tests__/ClearUnavailableRobots.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { screen, fireEvent } from '@testing-library/react' import { describe, it, expect, vi, beforeEach } from 'vitest' import { useConditionalConfirm } from '@opentrons/components' diff --git a/app/src/organisms/AdvancedSettings/__tests__/EnableDevTools.test.tsx b/app/src/organisms/Desktop/AdvancedSettings/__tests__/EnableDevTools.test.tsx similarity index 97% rename from app/src/organisms/AdvancedSettings/__tests__/EnableDevTools.test.tsx rename to app/src/organisms/Desktop/AdvancedSettings/__tests__/EnableDevTools.test.tsx index 5605b324688..25014b0cedf 100644 --- a/app/src/organisms/AdvancedSettings/__tests__/EnableDevTools.test.tsx +++ b/app/src/organisms/Desktop/AdvancedSettings/__tests__/EnableDevTools.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { screen, fireEvent } from '@testing-library/react' import { describe, it, expect, vi, beforeEach } from 'vitest' diff --git a/app/src/organisms/AdvancedSettings/__tests__/OT2AdvancedSettings.test.tsx b/app/src/organisms/Desktop/AdvancedSettings/__tests__/OT2AdvancedSettings.test.tsx similarity index 98% rename from app/src/organisms/AdvancedSettings/__tests__/OT2AdvancedSettings.test.tsx rename to app/src/organisms/Desktop/AdvancedSettings/__tests__/OT2AdvancedSettings.test.tsx index 6cfc5acd81f..3cff50268bd 100644 --- a/app/src/organisms/AdvancedSettings/__tests__/OT2AdvancedSettings.test.tsx +++ b/app/src/organisms/Desktop/AdvancedSettings/__tests__/OT2AdvancedSettings.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { screen, fireEvent } from '@testing-library/react' import { describe, it, expect, vi, beforeEach } from 'vitest' diff --git a/app/src/organisms/AdvancedSettings/__tests__/OverridePathToPython.test.tsx b/app/src/organisms/Desktop/AdvancedSettings/__tests__/OverridePathToPython.test.tsx similarity index 98% rename from app/src/organisms/AdvancedSettings/__tests__/OverridePathToPython.test.tsx rename to app/src/organisms/Desktop/AdvancedSettings/__tests__/OverridePathToPython.test.tsx index c7f001c73f0..78574ff0eca 100644 --- a/app/src/organisms/AdvancedSettings/__tests__/OverridePathToPython.test.tsx +++ b/app/src/organisms/Desktop/AdvancedSettings/__tests__/OverridePathToPython.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, vi, beforeEach } from 'vitest' diff --git a/app/src/organisms/AdvancedSettings/__tests__/PreventRobotCaching.test.tsx b/app/src/organisms/Desktop/AdvancedSettings/__tests__/PreventRobotCaching.test.tsx similarity index 98% rename from app/src/organisms/AdvancedSettings/__tests__/PreventRobotCaching.test.tsx rename to app/src/organisms/Desktop/AdvancedSettings/__tests__/PreventRobotCaching.test.tsx index 3fe5de32faf..094a1ffac90 100644 --- a/app/src/organisms/AdvancedSettings/__tests__/PreventRobotCaching.test.tsx +++ b/app/src/organisms/Desktop/AdvancedSettings/__tests__/PreventRobotCaching.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { when } from 'vitest-when' import { describe, it, expect, vi, beforeEach } from 'vitest' import { screen, fireEvent } from '@testing-library/react' diff --git a/app/src/organisms/AdvancedSettings/__tests__/ShowHeaterShakerAttachmentModal.test.tsx b/app/src/organisms/Desktop/AdvancedSettings/__tests__/ShowHeaterShakerAttachmentModal.test.tsx similarity index 98% rename from app/src/organisms/AdvancedSettings/__tests__/ShowHeaterShakerAttachmentModal.test.tsx rename to app/src/organisms/Desktop/AdvancedSettings/__tests__/ShowHeaterShakerAttachmentModal.test.tsx index 623ca64c493..a91eec5495f 100644 --- a/app/src/organisms/AdvancedSettings/__tests__/ShowHeaterShakerAttachmentModal.test.tsx +++ b/app/src/organisms/Desktop/AdvancedSettings/__tests__/ShowHeaterShakerAttachmentModal.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, vi, beforeEach } from 'vitest' import { i18n } from '/app/i18n' diff --git a/app/src/organisms/AdvancedSettings/__tests__/ShowLabwareOffsetSnippets.test.tsx b/app/src/organisms/Desktop/AdvancedSettings/__tests__/ShowLabwareOffsetSnippets.test.tsx similarity index 97% rename from app/src/organisms/AdvancedSettings/__tests__/ShowLabwareOffsetSnippets.test.tsx rename to app/src/organisms/Desktop/AdvancedSettings/__tests__/ShowLabwareOffsetSnippets.test.tsx index 30eade7b245..047e310c628 100644 --- a/app/src/organisms/AdvancedSettings/__tests__/ShowLabwareOffsetSnippets.test.tsx +++ b/app/src/organisms/Desktop/AdvancedSettings/__tests__/ShowLabwareOffsetSnippets.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, vi, beforeEach } from 'vitest' import { i18n } from '/app/i18n' diff --git a/app/src/organisms/AdvancedSettings/__tests__/U2EInformation.test.tsx b/app/src/organisms/Desktop/AdvancedSettings/__tests__/U2EInformation.test.tsx similarity index 98% rename from app/src/organisms/AdvancedSettings/__tests__/U2EInformation.test.tsx rename to app/src/organisms/Desktop/AdvancedSettings/__tests__/U2EInformation.test.tsx index 2aa4a5a7858..a885226096d 100644 --- a/app/src/organisms/AdvancedSettings/__tests__/U2EInformation.test.tsx +++ b/app/src/organisms/Desktop/AdvancedSettings/__tests__/U2EInformation.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { screen } from '@testing-library/react' import { describe, it, expect, vi, beforeEach } from 'vitest' import { i18n } from '/app/i18n' diff --git a/app/src/organisms/AdvancedSettings/__tests__/UpdatedChannel.test.tsx b/app/src/organisms/Desktop/AdvancedSettings/__tests__/UpdatedChannel.test.tsx similarity index 98% rename from app/src/organisms/AdvancedSettings/__tests__/UpdatedChannel.test.tsx rename to app/src/organisms/Desktop/AdvancedSettings/__tests__/UpdatedChannel.test.tsx index 84c3bf76438..c6feb1c0c8d 100644 --- a/app/src/organisms/AdvancedSettings/__tests__/UpdatedChannel.test.tsx +++ b/app/src/organisms/Desktop/AdvancedSettings/__tests__/UpdatedChannel.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { screen } from '@testing-library/react' import { describe, it, vi, beforeEach } from 'vitest' import { i18n } from '/app/i18n' diff --git a/app/src/organisms/AdvancedSettings/index.ts b/app/src/organisms/Desktop/AdvancedSettings/index.ts similarity index 100% rename from app/src/organisms/AdvancedSettings/index.ts rename to app/src/organisms/Desktop/AdvancedSettings/index.ts diff --git a/app/src/organisms/Alerts/AlertsModal.tsx b/app/src/organisms/Desktop/Alerts/AlertsModal.tsx similarity index 93% rename from app/src/organisms/Alerts/AlertsModal.tsx rename to app/src/organisms/Desktop/Alerts/AlertsModal.tsx index 2e9375f4ec8..f6639444a5a 100644 --- a/app/src/organisms/Alerts/AlertsModal.tsx +++ b/app/src/organisms/Desktop/Alerts/AlertsModal.tsx @@ -1,20 +1,20 @@ -import * as React from 'react' +import type { MutableRefObject } from 'react' +import { useState, useEffect } from 'react' import { useSelector, useDispatch } from 'react-redux' import { useTranslation } from 'react-i18next' import head from 'lodash/head' -import { SUCCESS_TOAST, WARNING_TOAST } from '@opentrons/components' +import { SUCCESS_TOAST, WARNING_TOAST } from '@opentrons/components' import * as AppAlerts from '/app/redux/alerts' import { getHasJustUpdated, toggleConfigValue } from '/app/redux/config' import { getAvailableShellUpdate } from '/app/redux/shell' -import { useToaster } from '../ToasterOven' +import { useToaster } from '/app/organisms/ToasterOven' import { UpdateAppModal } from '../UpdateAppModal' import { U2EDriverOutdatedAlert } from './U2EDriverOutdatedAlert' -import { useRemoveActiveAppUpdateToast } from '.' +import { useRemoveActiveAppUpdateToast } from '.' import type { State, Dispatch } from '/app/redux/types' import type { AlertId } from '/app/redux/alerts/types' -import type { MutableRefObject } from 'react' interface AlertsModalProps { toastIdRef: MutableRefObject @@ -22,7 +22,7 @@ interface AlertsModalProps { export function AlertsModal({ toastIdRef }: AlertsModalProps): JSX.Element { const dispatch = useDispatch() - const [showUpdateModal, setShowUpdateModal] = React.useState(false) + const [showUpdateModal, setShowUpdateModal] = useState(false) const { t } = useTranslation(['app_settings', 'branded']) const { makeToast } = useToaster() const { removeActiveAppUpdateToast } = useRemoveActiveAppUpdateToast() @@ -51,7 +51,7 @@ export function AlertsModal({ toastIdRef }: AlertsModalProps): JSX.Element { isAppUpdateAvailable && !isAppUpdateIgnored // Only run this hook on app startup - React.useEffect(() => { + useEffect(() => { if (hasJustUpdated) { makeToast( t('branded:opentrons_app_successfully_updated') as string, @@ -65,7 +65,7 @@ export function AlertsModal({ toastIdRef }: AlertsModalProps): JSX.Element { } }, []) - React.useEffect(() => { + useEffect(() => { if (createAppUpdateAvailableToast) { toastIdRef.current = makeToast( t('branded:opentrons_app_update_available_variation') as string, diff --git a/app/src/organisms/Alerts/AlertsProvider.tsx b/app/src/organisms/Desktop/Alerts/AlertsProvider.tsx similarity index 93% rename from app/src/organisms/Alerts/AlertsProvider.tsx rename to app/src/organisms/Desktop/Alerts/AlertsProvider.tsx index 58215bc1e73..21aeccbf855 100644 --- a/app/src/organisms/Alerts/AlertsProvider.tsx +++ b/app/src/organisms/Desktop/Alerts/AlertsProvider.tsx @@ -1,6 +1,6 @@ import * as React from 'react' import { AlertsModal } from '.' -import { useToaster } from '../ToasterOven' +import { useToaster } from '/app/organisms/ToasterOven' export interface AlertsContextProps { removeActiveAppUpdateToast: () => void diff --git a/app/src/organisms/Alerts/U2EDriverOutdatedAlert.tsx b/app/src/organisms/Desktop/Alerts/U2EDriverOutdatedAlert.tsx similarity index 98% rename from app/src/organisms/Alerts/U2EDriverOutdatedAlert.tsx rename to app/src/organisms/Desktop/Alerts/U2EDriverOutdatedAlert.tsx index 5888fa19396..fbb79a6b935 100644 --- a/app/src/organisms/Alerts/U2EDriverOutdatedAlert.tsx +++ b/app/src/organisms/Desktop/Alerts/U2EDriverOutdatedAlert.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { Link as InternalLink } from 'react-router-dom' import styled from 'styled-components' diff --git a/app/src/organisms/Alerts/__tests__/Alerts.test.tsx b/app/src/organisms/Desktop/Alerts/__tests__/Alerts.test.tsx similarity index 100% rename from app/src/organisms/Alerts/__tests__/Alerts.test.tsx rename to app/src/organisms/Desktop/Alerts/__tests__/Alerts.test.tsx diff --git a/app/src/organisms/Alerts/__tests__/U2EDriverOutdatedAlert.test.tsx b/app/src/organisms/Desktop/Alerts/__tests__/U2EDriverOutdatedAlert.test.tsx similarity index 100% rename from app/src/organisms/Alerts/__tests__/U2EDriverOutdatedAlert.test.tsx rename to app/src/organisms/Desktop/Alerts/__tests__/U2EDriverOutdatedAlert.test.tsx diff --git a/app/src/organisms/Alerts/index.ts b/app/src/organisms/Desktop/Alerts/index.ts similarity index 100% rename from app/src/organisms/Alerts/index.ts rename to app/src/organisms/Desktop/Alerts/index.ts diff --git a/app/src/organisms/Alerts/types.ts b/app/src/organisms/Desktop/Alerts/types.ts similarity index 100% rename from app/src/organisms/Alerts/types.ts rename to app/src/organisms/Desktop/Alerts/types.ts diff --git a/app/src/organisms/Alerts/useRemoveActiveAppUpdateToast.ts.ts b/app/src/organisms/Desktop/Alerts/useRemoveActiveAppUpdateToast.ts.ts similarity index 67% rename from app/src/organisms/Alerts/useRemoveActiveAppUpdateToast.ts.ts rename to app/src/organisms/Desktop/Alerts/useRemoveActiveAppUpdateToast.ts.ts index 030639ededa..a45a88716e8 100644 --- a/app/src/organisms/Alerts/useRemoveActiveAppUpdateToast.ts.ts +++ b/app/src/organisms/Desktop/Alerts/useRemoveActiveAppUpdateToast.ts.ts @@ -1,7 +1,7 @@ -import * as React from 'react' +import { useContext } from 'react' import { AlertsContext } from '.' import type { AlertsContextProps } from '.' export function useRemoveActiveAppUpdateToast(): AlertsContextProps { - return React.useContext(AlertsContext) + return useContext(AlertsContext) } diff --git a/app/src/organisms/AppSettings/ConnectRobotSlideout.tsx b/app/src/organisms/Desktop/AppSettings/ConnectRobotSlideout.tsx similarity index 94% rename from app/src/organisms/AppSettings/ConnectRobotSlideout.tsx rename to app/src/organisms/Desktop/AppSettings/ConnectRobotSlideout.tsx index 4e003d3f9cf..7c3148796d9 100644 --- a/app/src/organisms/AppSettings/ConnectRobotSlideout.tsx +++ b/app/src/organisms/Desktop/AppSettings/ConnectRobotSlideout.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, useEffect } from 'react' import { useSelector, useDispatch } from 'react-redux' import { useTranslation } from 'react-i18next' @@ -37,10 +37,10 @@ export function ConnectRobotSlideout({ isExpanded, onCloseClick, }: ConnectRobotSlideoutProps): JSX.Element | null { - const [mostRecentAddition, setMostRecentAddition] = React.useState< - string | null - >(null) - const [mostRecentDiscovered, setMostRecentDiscovered] = React.useState< + const [mostRecentAddition, setMostRecentAddition] = useState( + null + ) + const [mostRecentDiscovered, setMostRecentDiscovered] = useState< boolean | null >(null) const { t } = useTranslation(['app_settings', 'shared', 'branded']) @@ -62,7 +62,7 @@ export function ConnectRobotSlideout({ ) } - React.useEffect(() => { + useEffect(() => { dispatch(startDiscovery()) }, [dispatch]) diff --git a/app/src/organisms/AppSettings/FeatureFlags.tsx b/app/src/organisms/Desktop/AppSettings/FeatureFlags.tsx similarity index 95% rename from app/src/organisms/AppSettings/FeatureFlags.tsx rename to app/src/organisms/Desktop/AppSettings/FeatureFlags.tsx index f53c5501056..d86b52534ab 100644 --- a/app/src/organisms/AppSettings/FeatureFlags.tsx +++ b/app/src/organisms/Desktop/AppSettings/FeatureFlags.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { Fragment } from 'react' import { useTranslation } from 'react-i18next' import { useSelector, useDispatch } from 'react-redux' import { @@ -32,7 +32,7 @@ export function FeatureFlags(): JSX.Element { paddingY={SPACING.spacing24} > {Config.DEV_INTERNAL_FLAGS.map((flag, index) => ( - + )} - + ))} ) diff --git a/app/src/organisms/AppSettings/ManualIpHostnameField.tsx b/app/src/organisms/Desktop/AppSettings/ManualIpHostnameField.tsx similarity index 97% rename from app/src/organisms/AppSettings/ManualIpHostnameField.tsx rename to app/src/organisms/Desktop/AppSettings/ManualIpHostnameField.tsx index 8d249518ae4..c7b179ab4cd 100644 --- a/app/src/organisms/AppSettings/ManualIpHostnameField.tsx +++ b/app/src/organisms/Desktop/AppSettings/ManualIpHostnameField.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { diff --git a/app/src/organisms/AppSettings/ManualIpHostnameForm.tsx b/app/src/organisms/Desktop/AppSettings/ManualIpHostnameForm.tsx similarity index 99% rename from app/src/organisms/AppSettings/ManualIpHostnameForm.tsx rename to app/src/organisms/Desktop/AppSettings/ManualIpHostnameForm.tsx index ab9119c7fcf..52892422dce 100644 --- a/app/src/organisms/AppSettings/ManualIpHostnameForm.tsx +++ b/app/src/organisms/Desktop/AppSettings/ManualIpHostnameForm.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useDispatch } from 'react-redux' import { useTranslation } from 'react-i18next' import { useForm } from 'react-hook-form' diff --git a/app/src/organisms/AppSettings/ManualIpHostnameItem.tsx b/app/src/organisms/Desktop/AppSettings/ManualIpHostnameItem.tsx similarity index 97% rename from app/src/organisms/AppSettings/ManualIpHostnameItem.tsx rename to app/src/organisms/Desktop/AppSettings/ManualIpHostnameItem.tsx index 70dc5797d64..5a1dde3b663 100644 --- a/app/src/organisms/AppSettings/ManualIpHostnameItem.tsx +++ b/app/src/organisms/Desktop/AppSettings/ManualIpHostnameItem.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useEffect } from 'react' import { useTranslation } from 'react-i18next' import styled, { css } from 'styled-components' @@ -68,7 +68,7 @@ export function ManualIpHostnameItem({ } } - React.useEffect(() => { + useEffect(() => { if (justAdded) { setMostRecentDiscovered(discovered) // Note this is to avoid the case that not found but not display the message diff --git a/app/src/organisms/AppSettings/ManualIpHostnameList.tsx b/app/src/organisms/Desktop/AppSettings/ManualIpHostnameList.tsx similarity index 94% rename from app/src/organisms/AppSettings/ManualIpHostnameList.tsx rename to app/src/organisms/Desktop/AppSettings/ManualIpHostnameList.tsx index f74675750ca..1e96b60010d 100644 --- a/app/src/organisms/AppSettings/ManualIpHostnameList.tsx +++ b/app/src/organisms/Desktop/AppSettings/ManualIpHostnameList.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { Fragment } from 'react' import { useSelector, useDispatch } from 'react-redux' import { getConfig, removeManualIp } from '/app/redux/config' @@ -38,7 +38,7 @@ export function ManualIpHostnameList({ bDiscovered && !aDiscovered ? -1 : 1 ) .map(([candidate, discovered], index) => ( - + dispatch(removeManualIp(candidate))} @@ -48,7 +48,7 @@ export function ManualIpHostnameList({ setMostRecentDiscovered={setMostRecentDiscovered} isLast={index === candidates.length - 1} /> - + )) : null} diff --git a/app/src/organisms/AppSettings/PreviousVersionModal.tsx b/app/src/organisms/Desktop/AppSettings/PreviousVersionModal.tsx similarity index 98% rename from app/src/organisms/AppSettings/PreviousVersionModal.tsx rename to app/src/organisms/Desktop/AppSettings/PreviousVersionModal.tsx index 81fece0fbdc..3b3a58f2cc1 100644 --- a/app/src/organisms/AppSettings/PreviousVersionModal.tsx +++ b/app/src/organisms/Desktop/AppSettings/PreviousVersionModal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { Box, diff --git a/app/src/organisms/AppSettings/__tests__/ConnectRobotSlideout.test.tsx b/app/src/organisms/Desktop/AppSettings/__tests__/ConnectRobotSlideout.test.tsx similarity index 99% rename from app/src/organisms/AppSettings/__tests__/ConnectRobotSlideout.test.tsx rename to app/src/organisms/Desktop/AppSettings/__tests__/ConnectRobotSlideout.test.tsx index 069a66dde38..c92e1f495a0 100644 --- a/app/src/organisms/AppSettings/__tests__/ConnectRobotSlideout.test.tsx +++ b/app/src/organisms/Desktop/AppSettings/__tests__/ConnectRobotSlideout.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import '@testing-library/jest-dom/vitest' import { describe, it, expect, vi, beforeEach } from 'vitest' diff --git a/app/src/organisms/AppSettings/__tests__/PreviousVersionModal.test.tsx b/app/src/organisms/Desktop/AppSettings/__tests__/PreviousVersionModal.test.tsx similarity index 98% rename from app/src/organisms/AppSettings/__tests__/PreviousVersionModal.test.tsx rename to app/src/organisms/Desktop/AppSettings/__tests__/PreviousVersionModal.test.tsx index 853bf6c2257..b4449623c05 100644 --- a/app/src/organisms/AppSettings/__tests__/PreviousVersionModal.test.tsx +++ b/app/src/organisms/Desktop/AppSettings/__tests__/PreviousVersionModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, vi } from 'vitest' import '@testing-library/jest-dom/vitest' diff --git a/app/src/organisms/Breadcrumbs/__tests__/Breadcrumbs.test.tsx b/app/src/organisms/Desktop/Breadcrumbs/__tests__/Breadcrumbs.test.tsx similarity index 93% rename from app/src/organisms/Breadcrumbs/__tests__/Breadcrumbs.test.tsx rename to app/src/organisms/Desktop/Breadcrumbs/__tests__/Breadcrumbs.test.tsx index 22216e8b830..5efb526a4a5 100644 --- a/app/src/organisms/Breadcrumbs/__tests__/Breadcrumbs.test.tsx +++ b/app/src/organisms/Desktop/Breadcrumbs/__tests__/Breadcrumbs.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { MemoryRouter, Route, Routes } from 'react-router-dom' import { when } from 'vitest-when' import { describe, it, expect, beforeEach, vi } from 'vitest' @@ -6,9 +5,9 @@ import { describe, it, expect, beforeEach, vi } from 'vitest' import { fireEvent, screen } from '@testing-library/react' import { i18n } from '/app/i18n' -import { useRunCreatedAtTimestamp } from '/app/organisms/Devices/hooks' +import { useRunCreatedAtTimestamp } from '/app/resources/runs' import { useRobot } from '/app/redux-resources/robots' -import { getProtocolDisplayName } from '/app/organisms/ProtocolsLanding/utils' +import { getProtocolDisplayName } from '/app/transformations/protocols' import { getIsOnDevice } from '/app/redux/config' import { renderWithProviders } from '/app/__testing-utils__' import { mockConnectableRobot } from '/app/redux/discovery/__fixtures__' @@ -18,9 +17,9 @@ import { Breadcrumbs } from '..' import type { State } from '/app/redux/types' -vi.mock('/app/organisms/Devices/hooks') +vi.mock('/app/resources/runs') vi.mock('/app/redux-resources/robots') -vi.mock('/app/organisms/ProtocolsLanding/utils') +vi.mock('/app/transformations/protocols') vi.mock('/app/redux/config') vi.mock('/app/redux/protocol-storage') diff --git a/app/src/organisms/Breadcrumbs/index.tsx b/app/src/organisms/Desktop/Breadcrumbs/index.tsx similarity index 94% rename from app/src/organisms/Breadcrumbs/index.tsx rename to app/src/organisms/Desktop/Breadcrumbs/index.tsx index f67493c2998..02ea58a483f 100644 --- a/app/src/organisms/Breadcrumbs/index.tsx +++ b/app/src/organisms/Desktop/Breadcrumbs/index.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { useSelector } from 'react-redux' import { Link, useParams, useLocation } from 'react-router-dom' @@ -18,15 +17,15 @@ import { } from '@opentrons/components' import { ApiHostProvider } from '@opentrons/react-api-client' -import { useRunCreatedAtTimestamp } from '/app/organisms/Devices/hooks' -import { getProtocolDisplayName } from '/app/organisms/ProtocolsLanding/utils' +import { useRunCreatedAtTimestamp } from '/app/resources/runs' +import { getProtocolDisplayName } from '/app/transformations/protocols' import { getIsOnDevice } from '/app/redux/config' import { OPENTRONS_USB } from '/app/redux/discovery' import { getStoredProtocol } from '/app/redux/protocol-storage' import { appShellRequestor } from '/app/redux/shell/remote' import { useRobot } from '/app/redux-resources/robots' -import type { DesktopRouteParams } from '../../App/types' +import type { DesktopRouteParams } from '/app/App/types' import type { State } from '/app/redux/types' interface CrumbNameProps { diff --git a/app/src/organisms/CalibrateDeck/__tests__/CalibrateDeck.test.tsx b/app/src/organisms/Desktop/CalibrateDeck/__tests__/CalibrateDeck.test.tsx similarity index 99% rename from app/src/organisms/CalibrateDeck/__tests__/CalibrateDeck.test.tsx rename to app/src/organisms/Desktop/CalibrateDeck/__tests__/CalibrateDeck.test.tsx index fe899c601fd..ac5e8822416 100644 --- a/app/src/organisms/CalibrateDeck/__tests__/CalibrateDeck.test.tsx +++ b/app/src/organisms/Desktop/CalibrateDeck/__tests__/CalibrateDeck.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { vi, describe, beforeEach, expect, it } from 'vitest' import { fireEvent, screen } from '@testing-library/react' diff --git a/app/src/organisms/CalibrateDeck/index.tsx b/app/src/organisms/Desktop/CalibrateDeck/index.tsx similarity index 96% rename from app/src/organisms/CalibrateDeck/index.tsx rename to app/src/organisms/Desktop/CalibrateDeck/index.tsx index 51fc36eb8d8..fc31cc28992 100644 --- a/app/src/organisms/CalibrateDeck/index.tsx +++ b/app/src/organisms/Desktop/CalibrateDeck/index.tsx @@ -19,9 +19,9 @@ import { ConfirmExit, LoadingState, CompleteConfirmation, -} from '/app/organisms/CalibrationPanels' +} from '/app/organisms/Desktop/CalibrationPanels' import { WizardHeader } from '/app/molecules/WizardHeader' -import { getTopPortalEl } from '../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import type { Mount } from '@opentrons/components' import type { @@ -29,7 +29,7 @@ import type { CalibrationSessionStep, SessionCommandParams, } from '/app/redux/sessions/types' -import type { CalibrationPanelProps } from '/app/organisms/CalibrationPanels/types' +import type { CalibrationPanelProps } from '/app/organisms/Desktop/CalibrationPanels/types' import type { CalibrateDeckParentProps } from './types' const PANEL_BY_STEP: Partial< diff --git a/app/src/organisms/CalibrateDeck/types.ts b/app/src/organisms/Desktop/CalibrateDeck/types.ts similarity index 100% rename from app/src/organisms/CalibrateDeck/types.ts rename to app/src/organisms/Desktop/CalibrateDeck/types.ts diff --git a/app/src/organisms/CalibratePipetteOffset/__tests__/CalibratePipetteOffset.test.tsx b/app/src/organisms/Desktop/CalibratePipetteOffset/__tests__/CalibratePipetteOffset.test.tsx similarity index 99% rename from app/src/organisms/CalibratePipetteOffset/__tests__/CalibratePipetteOffset.test.tsx rename to app/src/organisms/Desktop/CalibratePipetteOffset/__tests__/CalibratePipetteOffset.test.tsx index a5eaae716ff..7f85d0ad109 100644 --- a/app/src/organisms/CalibratePipetteOffset/__tests__/CalibratePipetteOffset.test.tsx +++ b/app/src/organisms/Desktop/CalibratePipetteOffset/__tests__/CalibratePipetteOffset.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { vi, it, describe, expect, beforeEach } from 'vitest' import { when } from 'vitest-when' import { fireEvent, screen } from '@testing-library/react' diff --git a/app/src/organisms/CalibratePipetteOffset/__tests__/useCalibratePipetteOffset.test.tsx b/app/src/organisms/Desktop/CalibratePipetteOffset/__tests__/useCalibratePipetteOffset.test.tsx similarity index 100% rename from app/src/organisms/CalibratePipetteOffset/__tests__/useCalibratePipetteOffset.test.tsx rename to app/src/organisms/Desktop/CalibratePipetteOffset/__tests__/useCalibratePipetteOffset.test.tsx diff --git a/app/src/organisms/CalibratePipetteOffset/index.tsx b/app/src/organisms/Desktop/CalibratePipetteOffset/index.tsx similarity index 96% rename from app/src/organisms/CalibratePipetteOffset/index.tsx rename to app/src/organisms/Desktop/CalibratePipetteOffset/index.tsx index b2e67debd28..42a31213b43 100644 --- a/app/src/organisms/CalibratePipetteOffset/index.tsx +++ b/app/src/organisms/Desktop/CalibratePipetteOffset/index.tsx @@ -19,9 +19,9 @@ import { ConfirmExit, LoadingState, CompleteConfirmation, -} from '/app/organisms/CalibrationPanels' +} from '/app/organisms/Desktop/CalibrationPanels' import { WizardHeader } from '/app/molecules/WizardHeader' -import { getTopPortalEl } from '../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import type { Mount } from '@opentrons/components' import type { @@ -30,7 +30,7 @@ import type { SessionCommandParams, } from '/app/redux/sessions/types' import type { CalibratePipetteOffsetParentProps } from './types' -import type { CalibrationPanelProps } from '/app/organisms/CalibrationPanels/types' +import type { CalibrationPanelProps } from '/app/organisms/Desktop/CalibrationPanels/types' const PANEL_BY_STEP: Partial< Record> diff --git a/app/src/organisms/CalibratePipetteOffset/types.ts b/app/src/organisms/Desktop/CalibratePipetteOffset/types.ts similarity index 100% rename from app/src/organisms/CalibratePipetteOffset/types.ts rename to app/src/organisms/Desktop/CalibratePipetteOffset/types.ts diff --git a/app/src/organisms/CalibratePipetteOffset/useCalibratePipetteOffset.tsx b/app/src/organisms/Desktop/CalibratePipetteOffset/useCalibratePipetteOffset.tsx similarity index 94% rename from app/src/organisms/CalibratePipetteOffset/useCalibratePipetteOffset.tsx rename to app/src/organisms/Desktop/CalibratePipetteOffset/useCalibratePipetteOffset.tsx index 2759c30021d..4796e998658 100644 --- a/app/src/organisms/CalibratePipetteOffset/useCalibratePipetteOffset.tsx +++ b/app/src/organisms/Desktop/CalibratePipetteOffset/useCalibratePipetteOffset.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useRef, useEffect } from 'react' import { createPortal } from 'react-dom' import { useSelector, useDispatch } from 'react-redux' @@ -16,7 +16,7 @@ import type { } from '/app/redux/sessions/types' import type { RequestState } from '/app/redux/robot-api/types' -import { getTopPortalEl } from '../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import { CalibratePipetteOffset } from '.' import { pipetteOffsetCalibrationStarted } from '/app/redux/analytics' import { useTranslation } from 'react-i18next' @@ -38,10 +38,10 @@ export function useCalibratePipetteOffset( onComplete: (() => unknown) | null = null ): [Invoker, JSX.Element | null] { const { t } = useTranslation(['robot_calibration', 'shared']) - const createRequestId = React.useRef(null) - const deleteRequestId = React.useRef(null) - const jogRequestId = React.useRef(null) - const spinnerRequestId = React.useRef(null) + const createRequestId = useRef(null) + const deleteRequestId = useRef(null) + const jogRequestId = useRef(null) + const spinnerRequestId = useRef(null) const dispatch = useDispatch() const pipOffsetCalSession: PipetteOffsetCalibrationSession | null = useSelector( @@ -112,7 +112,7 @@ export function useCalibratePipetteOffset( : null )?.status === RobotApi.PENDING - React.useEffect(() => { + useEffect(() => { if (shouldClose) { onComplete?.() deleteRequestId.current = null diff --git a/app/src/organisms/CalibrateTipLength/AskForCalibrationBlockModal.tsx b/app/src/organisms/Desktop/CalibrateTipLength/AskForCalibrationBlockModal.tsx similarity index 96% rename from app/src/organisms/CalibrateTipLength/AskForCalibrationBlockModal.tsx rename to app/src/organisms/Desktop/CalibrateTipLength/AskForCalibrationBlockModal.tsx index 0bca9a6aac3..62a8ca00ef0 100644 --- a/app/src/organisms/CalibrateTipLength/AskForCalibrationBlockModal.tsx +++ b/app/src/organisms/Desktop/CalibrateTipLength/AskForCalibrationBlockModal.tsx @@ -19,9 +19,9 @@ import { import { useDispatch } from 'react-redux' import styles from './styles.module.css' -import { labwareImages } from '/app/organisms/CalibrationPanels/labwareImages' +import { labwareImages } from '/app/local-resources/labware' import { WizardHeader } from '/app/molecules/WizardHeader' -import { getTopPortalEl } from '../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import { setUseTrashSurfaceForTipCal } from '/app/redux/calibration' import type { Dispatch } from '/app/redux/types' diff --git a/app/src/organisms/CalibrateTipLength/ConfirmRecalibrationModal.tsx b/app/src/organisms/Desktop/CalibrateTipLength/ConfirmRecalibrationModal.tsx similarity index 95% rename from app/src/organisms/CalibrateTipLength/ConfirmRecalibrationModal.tsx rename to app/src/organisms/Desktop/CalibrateTipLength/ConfirmRecalibrationModal.tsx index fb413eed6cb..9806297af9a 100644 --- a/app/src/organisms/CalibrateTipLength/ConfirmRecalibrationModal.tsx +++ b/app/src/organisms/Desktop/CalibrateTipLength/ConfirmRecalibrationModal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { createPortal } from 'react-dom' import { @@ -12,7 +11,7 @@ import { Text, } from '@opentrons/components' -import { getModalPortalEl } from '../../App/portal' +import { getModalPortalEl } from '/app/App/portal' import styles from './styles.module.css' diff --git a/app/src/organisms/CalibrateTipLength/TipLengthCalibrationInfoBox.tsx b/app/src/organisms/Desktop/CalibrateTipLength/TipLengthCalibrationInfoBox.tsx similarity index 95% rename from app/src/organisms/CalibrateTipLength/TipLengthCalibrationInfoBox.tsx rename to app/src/organisms/Desktop/CalibrateTipLength/TipLengthCalibrationInfoBox.tsx index 0869293922c..7bcf3bd81e3 100644 --- a/app/src/organisms/CalibrateTipLength/TipLengthCalibrationInfoBox.tsx +++ b/app/src/organisms/Desktop/CalibrateTipLength/TipLengthCalibrationInfoBox.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { Box, Text, diff --git a/app/src/organisms/CalibrateTipLength/__tests__/AskForCalibrationBlockModal.test.tsx b/app/src/organisms/Desktop/CalibrateTipLength/__tests__/AskForCalibrationBlockModal.test.tsx similarity index 98% rename from app/src/organisms/CalibrateTipLength/__tests__/AskForCalibrationBlockModal.test.tsx rename to app/src/organisms/Desktop/CalibrateTipLength/__tests__/AskForCalibrationBlockModal.test.tsx index 5c9e4fac976..199ec279988 100644 --- a/app/src/organisms/CalibrateTipLength/__tests__/AskForCalibrationBlockModal.test.tsx +++ b/app/src/organisms/Desktop/CalibrateTipLength/__tests__/AskForCalibrationBlockModal.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { vi, it, describe, expect } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' diff --git a/app/src/organisms/CalibrateTipLength/__tests__/CalibrateTipLength.test.tsx b/app/src/organisms/Desktop/CalibrateTipLength/__tests__/CalibrateTipLength.test.tsx similarity index 99% rename from app/src/organisms/CalibrateTipLength/__tests__/CalibrateTipLength.test.tsx rename to app/src/organisms/Desktop/CalibrateTipLength/__tests__/CalibrateTipLength.test.tsx index babf1c2e9d0..8753a346cbf 100644 --- a/app/src/organisms/CalibrateTipLength/__tests__/CalibrateTipLength.test.tsx +++ b/app/src/organisms/Desktop/CalibrateTipLength/__tests__/CalibrateTipLength.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { vi, it, describe, expect, beforeEach, afterEach } from 'vitest' import { when } from 'vitest-when' diff --git a/app/src/organisms/CalibrateTipLength/index.tsx b/app/src/organisms/Desktop/CalibrateTipLength/index.tsx similarity index 97% rename from app/src/organisms/CalibrateTipLength/index.tsx rename to app/src/organisms/Desktop/CalibrateTipLength/index.tsx index 405aabec969..14ab84d2ef6 100644 --- a/app/src/organisms/CalibrateTipLength/index.tsx +++ b/app/src/organisms/Desktop/CalibrateTipLength/index.tsx @@ -20,9 +20,9 @@ import { ConfirmExit, LoadingState, CompleteConfirmation, -} from '/app/organisms/CalibrationPanels' +} from '/app/organisms/Desktop/CalibrationPanels' import { WizardHeader } from '/app/molecules/WizardHeader' -import { getTopPortalEl } from '../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import slotOneRemoveBlockAsset from '/app/assets/videos/tip-length-cal/Slot_1_Remove_CalBlock_(330x260)REV1.webm' import slotThreeRemoveBlockAsset from '/app/assets/videos/tip-length-cal/Slot_3_Remove_CalBlock_(330x260)REV1.webm' @@ -33,7 +33,7 @@ import type { CalibrationLabware, CalibrationSessionStep, } from '/app/redux/sessions/types' -import type { CalibrationPanelProps } from '/app/organisms/CalibrationPanels/types' +import type { CalibrationPanelProps } from '/app/organisms/Desktop/CalibrationPanels/types' import type { CalibrateTipLengthParentProps } from './types' export { AskForCalibrationBlockModal } from './AskForCalibrationBlockModal' diff --git a/app/src/organisms/CalibrateTipLength/styles.module.css b/app/src/organisms/Desktop/CalibrateTipLength/styles.module.css similarity index 100% rename from app/src/organisms/CalibrateTipLength/styles.module.css rename to app/src/organisms/Desktop/CalibrateTipLength/styles.module.css diff --git a/app/src/organisms/CalibrateTipLength/types.ts b/app/src/organisms/Desktop/CalibrateTipLength/types.ts similarity index 100% rename from app/src/organisms/CalibrateTipLength/types.ts rename to app/src/organisms/Desktop/CalibrateTipLength/types.ts diff --git a/app/src/organisms/CalibrationPanels/CalibrationLabwareRender.tsx b/app/src/organisms/Desktop/CalibrationPanels/CalibrationLabwareRender.tsx similarity index 99% rename from app/src/organisms/CalibrationPanels/CalibrationLabwareRender.tsx rename to app/src/organisms/Desktop/CalibrationPanels/CalibrationLabwareRender.tsx index e81adfe525b..2e789e7f116 100644 --- a/app/src/organisms/CalibrationPanels/CalibrationLabwareRender.tsx +++ b/app/src/organisms/Desktop/CalibrationPanels/CalibrationLabwareRender.tsx @@ -1,5 +1,3 @@ -import * as React from 'react' - import { LabwareRender, LabwareNameOverlay, diff --git a/app/src/organisms/CalibrationPanels/ChooseTipRack.tsx b/app/src/organisms/Desktop/CalibrationPanels/ChooseTipRack.tsx similarity index 97% rename from app/src/organisms/CalibrationPanels/ChooseTipRack.tsx rename to app/src/organisms/Desktop/CalibrationPanels/ChooseTipRack.tsx index 7a09addeb70..072293f22b4 100644 --- a/app/src/organisms/CalibrationPanels/ChooseTipRack.tsx +++ b/app/src/organisms/Desktop/CalibrationPanels/ChooseTipRack.tsx @@ -1,10 +1,11 @@ -import * as React from 'react' +import { useState } from 'react' import { useSelector } from 'react-redux' import { Trans, useTranslation } from 'react-i18next' import head from 'lodash/head' import isEqual from 'lodash/isEqual' import { ALIGN_CENTER, + Banner, Box, COLORS, DIRECTION_COLUMN, @@ -25,9 +26,8 @@ import { getTipLengthForPipetteAndTiprack, } from '/app/redux/calibration/' import { Select } from '/app/atoms/SelectField/Select' -import { Banner } from '/app/atoms/Banner' import { Divider } from '/app/atoms/structure' -import { NeedHelpLink } from './NeedHelpLink' +import { NeedHelpLink } from '/app/molecules/OT2CalibrationNeedHelpLink' import { ChosenTipRackRender } from './ChosenTipRackRender' import type { MultiValue, SingleValue } from 'react-select' @@ -153,7 +153,7 @@ export function ChooseTipRack(props: ChooseTipRackProps): JSX.Element { ] : [...opentronsTipRacksOptions] - const [selectedValue, setSelectedValue] = React.useState< + const [selectedValue, setSelectedValue] = useState< SingleValue | MultiValue >( chosenTipRack != null diff --git a/app/src/organisms/CalibrationPanels/ChosenTipRackRender.tsx b/app/src/organisms/Desktop/CalibrationPanels/ChosenTipRackRender.tsx similarity index 93% rename from app/src/organisms/CalibrationPanels/ChosenTipRackRender.tsx rename to app/src/organisms/Desktop/CalibrationPanels/ChosenTipRackRender.tsx index 98d1ebb4499..4cc533985d0 100644 --- a/app/src/organisms/CalibrationPanels/ChosenTipRackRender.tsx +++ b/app/src/organisms/Desktop/CalibrationPanels/ChosenTipRackRender.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { css } from 'styled-components' import { ALIGN_CENTER, @@ -8,7 +7,7 @@ import { SPACING, LegacyStyledText, } from '@opentrons/components' -import { labwareImages } from './labwareImages' +import { labwareImages } from '/app/local-resources/labware' import type { SelectOption } from '@opentrons/components' export interface ChosenTipRackRenderProps { diff --git a/app/src/organisms/CalibrationPanels/CompleteConfirmation.tsx b/app/src/organisms/Desktop/CalibrationPanels/CompleteConfirmation.tsx similarity index 97% rename from app/src/organisms/CalibrationPanels/CompleteConfirmation.tsx rename to app/src/organisms/Desktop/CalibrationPanels/CompleteConfirmation.tsx index 7d11b2243a9..cbd0e214cd1 100644 --- a/app/src/organisms/CalibrationPanels/CompleteConfirmation.tsx +++ b/app/src/organisms/Desktop/CalibrationPanels/CompleteConfirmation.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useTranslation } from 'react-i18next' import { ALIGN_CENTER, diff --git a/app/src/organisms/CalibrationPanels/ConfirmCrashRecovery.tsx b/app/src/organisms/Desktop/CalibrationPanels/ConfirmCrashRecovery.tsx similarity index 98% rename from app/src/organisms/CalibrationPanels/ConfirmCrashRecovery.tsx rename to app/src/organisms/Desktop/CalibrationPanels/ConfirmCrashRecovery.tsx index 43a55cabaa2..b2ac7b52179 100644 --- a/app/src/organisms/CalibrationPanels/ConfirmCrashRecovery.tsx +++ b/app/src/organisms/Desktop/CalibrationPanels/ConfirmCrashRecovery.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { diff --git a/app/src/organisms/CalibrationPanels/ConfirmExit.tsx b/app/src/organisms/Desktop/CalibrationPanels/ConfirmExit.tsx similarity index 95% rename from app/src/organisms/CalibrationPanels/ConfirmExit.tsx rename to app/src/organisms/Desktop/CalibrationPanels/ConfirmExit.tsx index 4d52a7424e9..2190852ae4a 100644 --- a/app/src/organisms/CalibrationPanels/ConfirmExit.tsx +++ b/app/src/organisms/Desktop/CalibrationPanels/ConfirmExit.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { AlertPrimaryButton, @@ -15,7 +14,7 @@ import { TYPOGRAPHY, } from '@opentrons/components' -import { NeedHelpLink } from './NeedHelpLink' +import { NeedHelpLink } from '/app/molecules/OT2CalibrationNeedHelpLink' interface ConfirmExitProps { back: () => void diff --git a/app/src/organisms/CalibrationPanels/DeckSetup.tsx b/app/src/organisms/Desktop/CalibrationPanels/DeckSetup.tsx similarity index 97% rename from app/src/organisms/CalibrationPanels/DeckSetup.tsx rename to app/src/organisms/Desktop/CalibrationPanels/DeckSetup.tsx index 230b0456161..6da2f94044d 100644 --- a/app/src/organisms/CalibrationPanels/DeckSetup.tsx +++ b/app/src/organisms/Desktop/CalibrationPanels/DeckSetup.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useMemo } from 'react' import { useTranslation } from 'react-i18next' import map from 'lodash/map' @@ -19,7 +19,7 @@ import { getPositionFromSlotId, } from '@opentrons/shared-data' import * as Sessions from '/app/redux/sessions' -import { NeedHelpLink } from './NeedHelpLink' +import { NeedHelpLink } from '/app/molecules/OT2CalibrationNeedHelpLink' import { CalibrationLabwareRender } from './CalibrationLabwareRender' import type { AddressableArea } from '@opentrons/shared-data' @@ -28,7 +28,7 @@ import type { CalibrationPanelProps } from './types' const TIPRACK = 'tip rack' export function DeckSetup(props: CalibrationPanelProps): JSX.Element { - const deckDef = React.useMemo(() => getDeckDefinitions().ot2_standard, []) + const deckDef = useMemo(() => getDeckDefinitions().ot2_standard, []) const { t } = useTranslation('robot_calibration') diff --git a/app/src/organisms/CalibrationPanels/Introduction/Body.tsx b/app/src/organisms/Desktop/CalibrationPanels/Introduction/Body.tsx similarity index 97% rename from app/src/organisms/CalibrationPanels/Introduction/Body.tsx rename to app/src/organisms/Desktop/CalibrationPanels/Introduction/Body.tsx index 410e6d02423..8f67637f6c4 100644 --- a/app/src/organisms/CalibrationPanels/Introduction/Body.tsx +++ b/app/src/organisms/Desktop/CalibrationPanels/Introduction/Body.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { Trans, useTranslation } from 'react-i18next' import { LegacyStyledText } from '@opentrons/components' import * as Sessions from '/app/redux/sessions' diff --git a/app/src/organisms/CalibrationPanels/Introduction/InvalidationWarning.tsx b/app/src/organisms/Desktop/CalibrationPanels/Introduction/InvalidationWarning.tsx similarity index 94% rename from app/src/organisms/CalibrationPanels/Introduction/InvalidationWarning.tsx rename to app/src/organisms/Desktop/CalibrationPanels/Introduction/InvalidationWarning.tsx index fd047275c46..dbe27f7358a 100644 --- a/app/src/organisms/CalibrationPanels/Introduction/InvalidationWarning.tsx +++ b/app/src/organisms/Desktop/CalibrationPanels/Introduction/InvalidationWarning.tsx @@ -1,12 +1,11 @@ -import * as React from 'react' import { Flex, + Banner, SPACING, TYPOGRAPHY, LegacyStyledText, } from '@opentrons/components' import { useTranslation } from 'react-i18next' -import { Banner } from '/app/atoms/Banner' import * as Sessions from '/app/redux/sessions' interface InvalidationWarningProps { diff --git a/app/src/organisms/CalibrationPanels/Introduction/__tests__/Body.test.tsx b/app/src/organisms/Desktop/CalibrationPanels/Introduction/__tests__/Body.test.tsx similarity index 98% rename from app/src/organisms/CalibrationPanels/Introduction/__tests__/Body.test.tsx rename to app/src/organisms/Desktop/CalibrationPanels/Introduction/__tests__/Body.test.tsx index 5de8c58d35c..c1300fb3218 100644 --- a/app/src/organisms/CalibrationPanels/Introduction/__tests__/Body.test.tsx +++ b/app/src/organisms/Desktop/CalibrationPanels/Introduction/__tests__/Body.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { it, describe } from 'vitest' import { screen } from '@testing-library/react' diff --git a/app/src/organisms/CalibrationPanels/Introduction/__tests__/Introduction.test.tsx b/app/src/organisms/Desktop/CalibrationPanels/Introduction/__tests__/Introduction.test.tsx similarity index 99% rename from app/src/organisms/CalibrationPanels/Introduction/__tests__/Introduction.test.tsx rename to app/src/organisms/Desktop/CalibrationPanels/Introduction/__tests__/Introduction.test.tsx index a5f0f6b59c0..a34460571ed 100644 --- a/app/src/organisms/CalibrationPanels/Introduction/__tests__/Introduction.test.tsx +++ b/app/src/organisms/Desktop/CalibrationPanels/Introduction/__tests__/Introduction.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { vi, it, expect, describe, beforeEach, afterEach } from 'vitest' import { fireEvent, screen } from '@testing-library/react' diff --git a/app/src/organisms/CalibrationPanels/Introduction/__tests__/InvalidationWarning.test.tsx b/app/src/organisms/Desktop/CalibrationPanels/Introduction/__tests__/InvalidationWarning.test.tsx similarity index 96% rename from app/src/organisms/CalibrationPanels/Introduction/__tests__/InvalidationWarning.test.tsx rename to app/src/organisms/Desktop/CalibrationPanels/Introduction/__tests__/InvalidationWarning.test.tsx index da55d8a6b26..6151097eccf 100644 --- a/app/src/organisms/CalibrationPanels/Introduction/__tests__/InvalidationWarning.test.tsx +++ b/app/src/organisms/Desktop/CalibrationPanels/Introduction/__tests__/InvalidationWarning.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { it, describe } from 'vitest' import { screen } from '@testing-library/react' diff --git a/app/src/organisms/CalibrationPanels/Introduction/index.tsx b/app/src/organisms/Desktop/CalibrationPanels/Introduction/index.tsx similarity index 95% rename from app/src/organisms/CalibrationPanels/Introduction/index.tsx rename to app/src/organisms/Desktop/CalibrationPanels/Introduction/index.tsx index 1f5f85dbd16..8211b54bb57 100644 --- a/app/src/organisms/CalibrationPanels/Introduction/index.tsx +++ b/app/src/organisms/Desktop/CalibrationPanels/Introduction/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { useTranslation } from 'react-i18next' import { getLabwareDisplayName } from '@opentrons/shared-data' import { @@ -13,7 +13,7 @@ import { } from '@opentrons/components' import * as Sessions from '/app/redux/sessions' -import { NeedHelpLink } from '../NeedHelpLink' +import { NeedHelpLink } from '/app/molecules/OT2CalibrationNeedHelpLink' import { ChooseTipRack } from '../ChooseTipRack' import { TRASH_BIN_LOAD_NAME } from '../constants' @@ -39,11 +39,10 @@ export function Introduction(props: CalibrationPanelProps): JSX.Element { } = props const { t } = useTranslation('robot_calibration') - const [showChooseTipRack, setShowChooseTipRack] = React.useState(false) - const [ - chosenTipRack, - setChosenTipRack, - ] = React.useState(null) + const [showChooseTipRack, setShowChooseTipRack] = useState(false) + const [chosenTipRack, setChosenTipRack] = useState( + null + ) const handleChosenTipRack = (value: LabwareDefinition2 | null): void => { value != null && setChosenTipRack(value) diff --git a/app/src/organisms/CalibrationPanels/LoadingState.tsx b/app/src/organisms/Desktop/CalibrationPanels/LoadingState.tsx similarity index 96% rename from app/src/organisms/CalibrationPanels/LoadingState.tsx rename to app/src/organisms/Desktop/CalibrationPanels/LoadingState.tsx index 03e491af459..0327e13d86c 100644 --- a/app/src/organisms/CalibrationPanels/LoadingState.tsx +++ b/app/src/organisms/Desktop/CalibrationPanels/LoadingState.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { ALIGN_CENTER, COLORS, diff --git a/app/src/organisms/CalibrationPanels/MeasureNozzle.tsx b/app/src/organisms/Desktop/CalibrationPanels/MeasureNozzle.tsx similarity index 97% rename from app/src/organisms/CalibrationPanels/MeasureNozzle.tsx rename to app/src/organisms/Desktop/CalibrationPanels/MeasureNozzle.tsx index 34afa5d7fd2..9c2c9762735 100644 --- a/app/src/organisms/CalibrationPanels/MeasureNozzle.tsx +++ b/app/src/organisms/Desktop/CalibrationPanels/MeasureNozzle.tsx @@ -1,5 +1,5 @@ /* eslint-disable no-return-assign */ -import * as React from 'react' +import { useMemo } from 'react' import { css } from 'styled-components' import { useTranslation } from 'react-i18next' import { @@ -23,7 +23,7 @@ import * as Sessions from '/app/redux/sessions' import type { Axis, Sign, StepSize } from '/app/molecules/JogControls/types' import type { CalibrationPanelProps } from './types' -import { NeedHelpLink } from './NeedHelpLink' +import { NeedHelpLink } from '/app/molecules/OT2CalibrationNeedHelpLink' import { useConfirmCrashRecovery } from './useConfirmCrashRecovery' import { formatJogVector } from './utils' import leftMultiBlockAssetTLC from '/app/assets/videos/tip-length-cal/Left_Multi_CalBlock_NO_TIP_(330x260)REV1.webm' @@ -82,7 +82,7 @@ export function MeasureNozzle(props: CalibrationPanelProps): JSX.Element { const { t } = useTranslation('robot_calibration') const { sendCommands, calBlock, mount, isMulti, sessionType } = props - const demoAsset = React.useMemo( + const demoAsset = useMemo( () => calBlock != null ? assetMapBlock[sessionType]?.[mount]?.[isMulti ? 'multi' : 'single'] diff --git a/app/src/organisms/CalibrationPanels/MeasureTip.tsx b/app/src/organisms/Desktop/CalibrationPanels/MeasureTip.tsx similarity index 97% rename from app/src/organisms/CalibrationPanels/MeasureTip.tsx rename to app/src/organisms/Desktop/CalibrationPanels/MeasureTip.tsx index 63bb5723bad..9eac47f89cb 100644 --- a/app/src/organisms/CalibrationPanels/MeasureTip.tsx +++ b/app/src/organisms/Desktop/CalibrationPanels/MeasureTip.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useMemo } from 'react' import { css } from 'styled-components' import { useTranslation } from 'react-i18next' import { @@ -19,7 +19,7 @@ import { MEDIUM_STEP_SIZE_MM, SMALL_STEP_SIZE_MM, } from '/app/molecules/JogControls' -import { NeedHelpLink } from './NeedHelpLink' +import { NeedHelpLink } from '/app/molecules/OT2CalibrationNeedHelpLink' import { useConfirmCrashRecovery } from './useConfirmCrashRecovery' import { formatJogVector } from './utils' @@ -82,7 +82,7 @@ export function MeasureTip(props: CalibrationPanelProps): JSX.Element { const { t } = useTranslation('robot_calibration') const { sendCommands, calBlock, isMulti, mount, sessionType } = props - const demoAsset = React.useMemo( + const demoAsset = useMemo( () => calBlock != null ? assetMapBlock[sessionType]?.[mount]?.[isMulti ? 'multi' : 'single'] diff --git a/app/src/organisms/CalibrationPanels/SaveXYPoint.tsx b/app/src/organisms/Desktop/CalibrationPanels/SaveXYPoint.tsx similarity index 97% rename from app/src/organisms/CalibrationPanels/SaveXYPoint.tsx rename to app/src/organisms/Desktop/CalibrationPanels/SaveXYPoint.tsx index 207f0a609c9..8fda2535ee8 100644 --- a/app/src/organisms/CalibrationPanels/SaveXYPoint.tsx +++ b/app/src/organisms/Desktop/CalibrationPanels/SaveXYPoint.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useMemo } from 'react' import { css } from 'styled-components' import { useTranslation } from 'react-i18next' import { @@ -13,7 +13,7 @@ import { LegacyStyledText, } from '@opentrons/components' -import { useLogger } from '../../logger' +import { useLogger } from '/app/logger' import * as Sessions from '/app/redux/sessions' import { JogControls, @@ -22,7 +22,7 @@ import { } from '/app/molecules/JogControls' import { formatJogVector } from './utils' import { useConfirmCrashRecovery } from './useConfirmCrashRecovery' -import { NeedHelpLink } from './NeedHelpLink' +import { NeedHelpLink } from '/app/molecules/OT2CalibrationNeedHelpLink' import slot1LeftMultiDemoAsset from '/app/assets/videos/cal-movement/SLOT_1_LEFT_MULTI_X-Y.webm' import slot1LeftSingleDemoAsset from '/app/assets/videos/cal-movement/SLOT_1_LEFT_SINGLE_X-Y.webm' @@ -143,7 +143,7 @@ export function SaveXYPoint(props: CalibrationPanelProps): JSX.Element | null { const { slotNumber, moveCommand } = contentsBySessionTypeByCurrentStep[sessionType]?.[currentStep] ?? {} - const demoAsset = React.useMemo( + const demoAsset = useMemo( () => slotNumber != null ? assetMap[slotNumber][mount][isMulti ? 'multi' : 'single'] diff --git a/app/src/organisms/CalibrationPanels/SaveZPoint.tsx b/app/src/organisms/Desktop/CalibrationPanels/SaveZPoint.tsx similarity index 98% rename from app/src/organisms/CalibrationPanels/SaveZPoint.tsx rename to app/src/organisms/Desktop/CalibrationPanels/SaveZPoint.tsx index ddc2975030a..7c85aa4b020 100644 --- a/app/src/organisms/CalibrationPanels/SaveZPoint.tsx +++ b/app/src/organisms/Desktop/CalibrationPanels/SaveZPoint.tsx @@ -22,7 +22,7 @@ import { } from '/app/molecules/JogControls' import { formatJogVector } from './utils' import { useConfirmCrashRecovery } from './useConfirmCrashRecovery' -import { NeedHelpLink } from './NeedHelpLink' +import { NeedHelpLink } from '/app/molecules/OT2CalibrationNeedHelpLink' import slot5LeftMultiDemoAsset from '/app/assets/videos/cal-movement/SLOT_5_LEFT_MULTI_Z.webm' import slot5LeftSingleDemoAsset from '/app/assets/videos/cal-movement/SLOT_5_LEFT_SINGLE_Z.webm' diff --git a/app/src/organisms/CalibrationPanels/TipConfirmation.tsx b/app/src/organisms/Desktop/CalibrationPanels/TipConfirmation.tsx similarity index 96% rename from app/src/organisms/CalibrationPanels/TipConfirmation.tsx rename to app/src/organisms/Desktop/CalibrationPanels/TipConfirmation.tsx index da25aef6ee5..c4d094eadb7 100644 --- a/app/src/organisms/CalibrationPanels/TipConfirmation.tsx +++ b/app/src/organisms/Desktop/CalibrationPanels/TipConfirmation.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { css } from 'styled-components' import { DIRECTION_COLUMN, @@ -12,7 +11,7 @@ import { import { useTranslation } from 'react-i18next' import * as Sessions from '/app/redux/sessions' -import { NeedHelpLink } from './NeedHelpLink' +import { NeedHelpLink } from '/app/molecules/OT2CalibrationNeedHelpLink' import type { CalibrationPanelProps } from './types' import type { diff --git a/app/src/organisms/CalibrationPanels/TipPickUp.tsx b/app/src/organisms/Desktop/CalibrationPanels/TipPickUp.tsx similarity index 97% rename from app/src/organisms/CalibrationPanels/TipPickUp.tsx rename to app/src/organisms/Desktop/CalibrationPanels/TipPickUp.tsx index f8008a98ede..e375398c8cf 100644 --- a/app/src/organisms/CalibrationPanels/TipPickUp.tsx +++ b/app/src/organisms/Desktop/CalibrationPanels/TipPickUp.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { css } from 'styled-components' import { Trans, useTranslation } from 'react-i18next' import { @@ -19,7 +18,7 @@ import { JogControls } from '/app/molecules/JogControls' import type { CalibrationPanelProps } from './types' import { formatJogVector } from './utils' -import { NeedHelpLink } from './NeedHelpLink' +import { NeedHelpLink } from '/app/molecules/OT2CalibrationNeedHelpLink' import { useConfirmCrashRecovery } from './useConfirmCrashRecovery' import multiDemoAsset from '/app/assets/videos/tip-pick-up/A1_Multi_Channel_REV1.webm' diff --git a/app/src/organisms/CalibrationPanels/__tests__/ChooseTipRack.test.tsx b/app/src/organisms/Desktop/CalibrationPanels/__tests__/ChooseTipRack.test.tsx similarity index 98% rename from app/src/organisms/CalibrationPanels/__tests__/ChooseTipRack.test.tsx rename to app/src/organisms/Desktop/CalibrationPanels/__tests__/ChooseTipRack.test.tsx index fb41e694dbd..4bb1cecd0ef 100644 --- a/app/src/organisms/CalibrationPanels/__tests__/ChooseTipRack.test.tsx +++ b/app/src/organisms/Desktop/CalibrationPanels/__tests__/ChooseTipRack.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { vi, it, describe, expect, beforeEach } from 'vitest' diff --git a/app/src/organisms/CalibrationPanels/__tests__/ChosenTipRackRender.test.tsx b/app/src/organisms/Desktop/CalibrationPanels/__tests__/ChosenTipRackRender.test.tsx similarity index 96% rename from app/src/organisms/CalibrationPanels/__tests__/ChosenTipRackRender.test.tsx rename to app/src/organisms/Desktop/CalibrationPanels/__tests__/ChosenTipRackRender.test.tsx index 11662e1bd1e..5eb7fa1db8b 100644 --- a/app/src/organisms/CalibrationPanels/__tests__/ChosenTipRackRender.test.tsx +++ b/app/src/organisms/Desktop/CalibrationPanels/__tests__/ChosenTipRackRender.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { it, describe, beforeEach } from 'vitest' import { screen } from '@testing-library/react' diff --git a/app/src/organisms/CalibrationPanels/__tests__/CompleteConfirmation.test.tsx b/app/src/organisms/Desktop/CalibrationPanels/__tests__/CompleteConfirmation.test.tsx similarity index 97% rename from app/src/organisms/CalibrationPanels/__tests__/CompleteConfirmation.test.tsx rename to app/src/organisms/Desktop/CalibrationPanels/__tests__/CompleteConfirmation.test.tsx index d5ff26ba96c..99dc73310d1 100644 --- a/app/src/organisms/CalibrationPanels/__tests__/CompleteConfirmation.test.tsx +++ b/app/src/organisms/Desktop/CalibrationPanels/__tests__/CompleteConfirmation.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { vi, it, describe, expect } from 'vitest' diff --git a/app/src/organisms/CalibrationPanels/__tests__/ConfirmCrashRecovery.test.tsx b/app/src/organisms/Desktop/CalibrationPanels/__tests__/ConfirmCrashRecovery.test.tsx similarity index 97% rename from app/src/organisms/CalibrationPanels/__tests__/ConfirmCrashRecovery.test.tsx rename to app/src/organisms/Desktop/CalibrationPanels/__tests__/ConfirmCrashRecovery.test.tsx index 51f70785f82..53fb8559e55 100644 --- a/app/src/organisms/CalibrationPanels/__tests__/ConfirmCrashRecovery.test.tsx +++ b/app/src/organisms/Desktop/CalibrationPanels/__tests__/ConfirmCrashRecovery.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { vi, it, describe, expect } from 'vitest' diff --git a/app/src/organisms/CalibrationPanels/__tests__/ConfirmExit.test.tsx b/app/src/organisms/Desktop/CalibrationPanels/__tests__/ConfirmExit.test.tsx similarity index 97% rename from app/src/organisms/CalibrationPanels/__tests__/ConfirmExit.test.tsx rename to app/src/organisms/Desktop/CalibrationPanels/__tests__/ConfirmExit.test.tsx index eaec356c62c..086c122e8bf 100644 --- a/app/src/organisms/CalibrationPanels/__tests__/ConfirmExit.test.tsx +++ b/app/src/organisms/Desktop/CalibrationPanels/__tests__/ConfirmExit.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { vi, it, describe, expect } from 'vitest' diff --git a/app/src/organisms/CalibrationPanels/__tests__/DeckSetup.test.tsx b/app/src/organisms/Desktop/CalibrationPanels/__tests__/DeckSetup.test.tsx similarity index 99% rename from app/src/organisms/CalibrationPanels/__tests__/DeckSetup.test.tsx rename to app/src/organisms/Desktop/CalibrationPanels/__tests__/DeckSetup.test.tsx index 920e6463cb9..bfa641e6b26 100644 --- a/app/src/organisms/CalibrationPanels/__tests__/DeckSetup.test.tsx +++ b/app/src/organisms/Desktop/CalibrationPanels/__tests__/DeckSetup.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { vi, it, describe, expect } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' diff --git a/app/src/organisms/CalibrationPanels/__tests__/MeasureNozzle.test.tsx b/app/src/organisms/Desktop/CalibrationPanels/__tests__/MeasureNozzle.test.tsx similarity index 98% rename from app/src/organisms/CalibrationPanels/__tests__/MeasureNozzle.test.tsx rename to app/src/organisms/Desktop/CalibrationPanels/__tests__/MeasureNozzle.test.tsx index a7a8d68773f..d0de251b0ad 100644 --- a/app/src/organisms/CalibrationPanels/__tests__/MeasureNozzle.test.tsx +++ b/app/src/organisms/Desktop/CalibrationPanels/__tests__/MeasureNozzle.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { vi, it, describe, expect } from 'vitest' diff --git a/app/src/organisms/CalibrationPanels/__tests__/MeasureTip.test.tsx b/app/src/organisms/Desktop/CalibrationPanels/__tests__/MeasureTip.test.tsx similarity index 98% rename from app/src/organisms/CalibrationPanels/__tests__/MeasureTip.test.tsx rename to app/src/organisms/Desktop/CalibrationPanels/__tests__/MeasureTip.test.tsx index f2436f9af0f..70d8ab54a6b 100644 --- a/app/src/organisms/CalibrationPanels/__tests__/MeasureTip.test.tsx +++ b/app/src/organisms/Desktop/CalibrationPanels/__tests__/MeasureTip.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { vi, it, describe, expect } from 'vitest' diff --git a/app/src/organisms/CalibrationPanels/__tests__/SaveXYPoint.test.tsx b/app/src/organisms/Desktop/CalibrationPanels/__tests__/SaveXYPoint.test.tsx similarity index 99% rename from app/src/organisms/CalibrationPanels/__tests__/SaveXYPoint.test.tsx rename to app/src/organisms/Desktop/CalibrationPanels/__tests__/SaveXYPoint.test.tsx index feabd927785..3d7dbda32a9 100644 --- a/app/src/organisms/CalibrationPanels/__tests__/SaveXYPoint.test.tsx +++ b/app/src/organisms/Desktop/CalibrationPanels/__tests__/SaveXYPoint.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { vi, it, describe, expect } from 'vitest' diff --git a/app/src/organisms/CalibrationPanels/__tests__/SaveZPoint.test.tsx b/app/src/organisms/Desktop/CalibrationPanels/__tests__/SaveZPoint.test.tsx similarity index 99% rename from app/src/organisms/CalibrationPanels/__tests__/SaveZPoint.test.tsx rename to app/src/organisms/Desktop/CalibrationPanels/__tests__/SaveZPoint.test.tsx index 480686c489b..36f04c1ebb2 100644 --- a/app/src/organisms/CalibrationPanels/__tests__/SaveZPoint.test.tsx +++ b/app/src/organisms/Desktop/CalibrationPanels/__tests__/SaveZPoint.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { vi, it, describe, expect } from 'vitest' diff --git a/app/src/organisms/CalibrationPanels/__tests__/TipConfirmation.test.tsx b/app/src/organisms/Desktop/CalibrationPanels/__tests__/TipConfirmation.test.tsx similarity index 98% rename from app/src/organisms/CalibrationPanels/__tests__/TipConfirmation.test.tsx rename to app/src/organisms/Desktop/CalibrationPanels/__tests__/TipConfirmation.test.tsx index a0b26400005..f9eee22d78b 100644 --- a/app/src/organisms/CalibrationPanels/__tests__/TipConfirmation.test.tsx +++ b/app/src/organisms/Desktop/CalibrationPanels/__tests__/TipConfirmation.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { vi, it, describe, expect } from 'vitest' diff --git a/app/src/organisms/CalibrationPanels/__tests__/TipPickUp.test.tsx b/app/src/organisms/Desktop/CalibrationPanels/__tests__/TipPickUp.test.tsx similarity index 98% rename from app/src/organisms/CalibrationPanels/__tests__/TipPickUp.test.tsx rename to app/src/organisms/Desktop/CalibrationPanels/__tests__/TipPickUp.test.tsx index 7aa63cc6a2f..b6836cf96fb 100644 --- a/app/src/organisms/CalibrationPanels/__tests__/TipPickUp.test.tsx +++ b/app/src/organisms/Desktop/CalibrationPanels/__tests__/TipPickUp.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { vi, it, describe, expect } from 'vitest' diff --git a/app/src/organisms/CalibrationPanels/__tests__/useConfirmCrashRecovery.test.tsx b/app/src/organisms/Desktop/CalibrationPanels/__tests__/useConfirmCrashRecovery.test.tsx similarity index 99% rename from app/src/organisms/CalibrationPanels/__tests__/useConfirmCrashRecovery.test.tsx rename to app/src/organisms/Desktop/CalibrationPanels/__tests__/useConfirmCrashRecovery.test.tsx index 54ca33eb5b3..9e385a2c320 100644 --- a/app/src/organisms/CalibrationPanels/__tests__/useConfirmCrashRecovery.test.tsx +++ b/app/src/organisms/Desktop/CalibrationPanels/__tests__/useConfirmCrashRecovery.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { fireEvent, renderHook, screen } from '@testing-library/react' import { I18nextProvider } from 'react-i18next' import { vi, it, describe, expect } from 'vitest' diff --git a/app/src/organisms/CalibrationPanels/constants.ts b/app/src/organisms/Desktop/CalibrationPanels/constants.ts similarity index 100% rename from app/src/organisms/CalibrationPanels/constants.ts rename to app/src/organisms/Desktop/CalibrationPanels/constants.ts diff --git a/app/src/organisms/CalibrationPanels/index.ts b/app/src/organisms/Desktop/CalibrationPanels/index.ts similarity index 92% rename from app/src/organisms/CalibrationPanels/index.ts rename to app/src/organisms/Desktop/CalibrationPanels/index.ts index 820e397e9e5..735b87cc473 100644 --- a/app/src/organisms/CalibrationPanels/index.ts +++ b/app/src/organisms/Desktop/CalibrationPanels/index.ts @@ -7,7 +7,6 @@ export { MeasureTip } from './MeasureTip' export { SaveZPoint } from './SaveZPoint' export { SaveXYPoint } from './SaveXYPoint' export { CompleteConfirmation } from './CompleteConfirmation' -export { NeedHelpLink } from './NeedHelpLink' export { LoadingState } from './LoadingState' export { ConfirmExit } from './ConfirmExit' export * from './constants' diff --git a/app/src/organisms/CalibrationPanels/styles.module.css b/app/src/organisms/Desktop/CalibrationPanels/styles.module.css similarity index 100% rename from app/src/organisms/CalibrationPanels/styles.module.css rename to app/src/organisms/Desktop/CalibrationPanels/styles.module.css diff --git a/app/src/organisms/CalibrationPanels/types.ts b/app/src/organisms/Desktop/CalibrationPanels/types.ts similarity index 100% rename from app/src/organisms/CalibrationPanels/types.ts rename to app/src/organisms/Desktop/CalibrationPanels/types.ts diff --git a/app/src/organisms/CalibrationPanels/useConfirmCrashRecovery.tsx b/app/src/organisms/Desktop/CalibrationPanels/useConfirmCrashRecovery.tsx similarity index 93% rename from app/src/organisms/CalibrationPanels/useConfirmCrashRecovery.tsx rename to app/src/organisms/Desktop/CalibrationPanels/useConfirmCrashRecovery.tsx index 5f6058281c5..e4b9bb2c13f 100644 --- a/app/src/organisms/CalibrationPanels/useConfirmCrashRecovery.tsx +++ b/app/src/organisms/Desktop/CalibrationPanels/useConfirmCrashRecovery.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { useTranslation } from 'react-i18next' import { @@ -20,7 +20,7 @@ export function useConfirmCrashRecovery( ): [link: JSX.Element, confirmation: JSX.Element | null] { const { t } = useTranslation('robot_calibration') const { sendCommands } = props - const [showModal, setShowModal] = React.useState(false) + const [showModal, setShowModal] = useState(false) const doStartOver = (): void => { sendCommands({ command: Sessions.sharedCalCommands.INVALIDATE_LAST_ACTION }) diff --git a/app/src/organisms/CalibrationPanels/utils.ts b/app/src/organisms/Desktop/CalibrationPanels/utils.ts similarity index 100% rename from app/src/organisms/CalibrationPanels/utils.ts rename to app/src/organisms/Desktop/CalibrationPanels/utils.ts diff --git a/app/src/organisms/CalibrationStatusCard/__tests__/CalibrationStatusCard.test.tsx b/app/src/organisms/Desktop/CalibrationStatusCard/__tests__/CalibrationStatusCard.test.tsx similarity index 99% rename from app/src/organisms/CalibrationStatusCard/__tests__/CalibrationStatusCard.test.tsx rename to app/src/organisms/Desktop/CalibrationStatusCard/__tests__/CalibrationStatusCard.test.tsx index a1060e5200d..400e73b3078 100644 --- a/app/src/organisms/CalibrationStatusCard/__tests__/CalibrationStatusCard.test.tsx +++ b/app/src/organisms/Desktop/CalibrationStatusCard/__tests__/CalibrationStatusCard.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { vi, it, describe, expect, beforeEach } from 'vitest' import { fireEvent, screen } from '@testing-library/react' diff --git a/app/src/organisms/CalibrationStatusCard/index.tsx b/app/src/organisms/Desktop/CalibrationStatusCard/index.tsx similarity index 99% rename from app/src/organisms/CalibrationStatusCard/index.tsx rename to app/src/organisms/Desktop/CalibrationStatusCard/index.tsx index 057a9403585..9be7eecb1c2 100644 --- a/app/src/organisms/CalibrationStatusCard/index.tsx +++ b/app/src/organisms/Desktop/CalibrationStatusCard/index.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { Link as RouterLink } from 'react-router-dom' diff --git a/app/src/organisms/CalibrationTaskList/__tests__/CalibrationTaskList.test.tsx b/app/src/organisms/Desktop/CalibrationTaskList/__tests__/CalibrationTaskList.test.tsx similarity index 98% rename from app/src/organisms/CalibrationTaskList/__tests__/CalibrationTaskList.test.tsx rename to app/src/organisms/Desktop/CalibrationTaskList/__tests__/CalibrationTaskList.test.tsx index fe175420b4a..ebada58f1f3 100644 --- a/app/src/organisms/CalibrationTaskList/__tests__/CalibrationTaskList.test.tsx +++ b/app/src/organisms/Desktop/CalibrationTaskList/__tests__/CalibrationTaskList.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { vi, it, describe, expect, beforeEach, afterEach } from 'vitest' import { fireEvent, screen } from '@testing-library/react' @@ -18,15 +17,14 @@ import { expectedIncompleteRightMountTaskList, expectedIncompleteLeftMountTaskList, } from '../../Devices/hooks/__fixtures__/taskListFixtures' -import { - useCalibrationTaskList, - useRunHasStarted, - useAttachedPipettes, -} from '../../Devices/hooks' +import { useCalibrationTaskList } from '../../Devices/hooks' +import { useAttachedPipettes } from '/app/resources/instruments' import { mockLeftProtoPipette } from '/app/redux/pipettes/__fixtures__' +import { useRunHasStarted } from '/app/resources/runs' vi.mock('../../Devices/hooks') vi.mock('/app/resources/runs') +vi.mock('/app/resources/instruments') const render = (robotName: string = 'otie') => { return renderWithProviders( diff --git a/app/src/organisms/CalibrationTaskList/index.tsx b/app/src/organisms/Desktop/CalibrationTaskList/index.tsx similarity index 89% rename from app/src/organisms/CalibrationTaskList/index.tsx rename to app/src/organisms/Desktop/CalibrationTaskList/index.tsx index 069e6ba4ebf..f0826dce48d 100644 --- a/app/src/organisms/CalibrationTaskList/index.tsx +++ b/app/src/organisms/Desktop/CalibrationTaskList/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useRef, useState, useEffect } from 'react' import { css } from 'styled-components' import { useTranslation } from 'react-i18next' import { useNavigate } from 'react-router-dom' @@ -18,20 +18,17 @@ import { } from '@opentrons/components' import { StatusLabel } from '/app/atoms/StatusLabel' -import { TaskList } from '../TaskList' +import { TaskList } from '/app/molecules/TaskList' -import { - useAttachedPipettes, - useCalibrationTaskList, - useRunHasStarted, -} from '/app/organisms/Devices/hooks' -import { useCurrentRunId } from '/app/resources/runs' +import { useCalibrationTaskList } from '/app/organisms/Desktop/Devices/hooks' +import { useAttachedPipettes } from '/app/resources/instruments' +import { useCurrentRunId, useRunHasStarted } from '/app/resources/runs' import type { DashboardCalOffsetInvoker, DashboardCalTipLengthInvoker, DashboardCalDeckInvoker, -} from '/app/organisms/Devices/hooks' +} from '/app/organisms/Desktop/Devices/hooks' interface CalibrationTaskListProps { robotName: string @@ -48,14 +45,11 @@ export function CalibrationTaskList({ deckCalLauncher, exitBeforeDeckConfigCompletion, }: CalibrationTaskListProps): JSX.Element { - const prevActiveIndex = React.useRef<[number, number] | null>(null) - const [hasLaunchedWizard, setHasLaunchedWizard] = React.useState( + const prevActiveIndex = useRef<[number, number] | null>(null) + const [hasLaunchedWizard, setHasLaunchedWizard] = useState(false) + const [showCompletionScreen, setShowCompletionScreen] = useState( false ) - const [ - showCompletionScreen, - setShowCompletionScreen, - ] = React.useState(false) const { t } = useTranslation(['robot_calibration', 'device_settings']) const navigate = useNavigate() const { activeIndex, taskList, taskListStatus } = useCalibrationTaskList( @@ -80,7 +74,7 @@ export function CalibrationTaskList({ 'device_settings:some_robot_controls_are_not_available' ) - React.useEffect(() => { + useEffect(() => { if ( prevActiveIndex.current !== null && activeIndex === null && diff --git a/app/src/organisms/CheckCalibration/ResultsSummary/CalibrationHealthCheckResults.tsx b/app/src/organisms/Desktop/CheckCalibration/ResultsSummary/CalibrationHealthCheckResults.tsx similarity index 97% rename from app/src/organisms/CheckCalibration/ResultsSummary/CalibrationHealthCheckResults.tsx rename to app/src/organisms/Desktop/CheckCalibration/ResultsSummary/CalibrationHealthCheckResults.tsx index f105a212ecc..957a91fb0eb 100644 --- a/app/src/organisms/CheckCalibration/ResultsSummary/CalibrationHealthCheckResults.tsx +++ b/app/src/organisms/Desktop/CheckCalibration/ResultsSummary/CalibrationHealthCheckResults.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { diff --git a/app/src/organisms/CheckCalibration/ResultsSummary/CalibrationResult.tsx b/app/src/organisms/Desktop/CheckCalibration/ResultsSummary/CalibrationResult.tsx similarity index 97% rename from app/src/organisms/CheckCalibration/ResultsSummary/CalibrationResult.tsx rename to app/src/organisms/Desktop/CheckCalibration/ResultsSummary/CalibrationResult.tsx index 9fd0252cc28..6d060e30b72 100644 --- a/app/src/organisms/CheckCalibration/ResultsSummary/CalibrationResult.tsx +++ b/app/src/organisms/Desktop/CheckCalibration/ResultsSummary/CalibrationResult.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { css } from 'styled-components' diff --git a/app/src/organisms/CheckCalibration/ResultsSummary/RenderMountInformation.tsx b/app/src/organisms/Desktop/CheckCalibration/ResultsSummary/RenderMountInformation.tsx similarity index 97% rename from app/src/organisms/CheckCalibration/ResultsSummary/RenderMountInformation.tsx rename to app/src/organisms/Desktop/CheckCalibration/ResultsSummary/RenderMountInformation.tsx index f93c62acdf6..fb79709cf33 100644 --- a/app/src/organisms/CheckCalibration/ResultsSummary/RenderMountInformation.tsx +++ b/app/src/organisms/Desktop/CheckCalibration/ResultsSummary/RenderMountInformation.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { diff --git a/app/src/organisms/CheckCalibration/ResultsSummary/RenderResult.tsx b/app/src/organisms/Desktop/CheckCalibration/ResultsSummary/RenderResult.tsx similarity index 96% rename from app/src/organisms/CheckCalibration/ResultsSummary/RenderResult.tsx rename to app/src/organisms/Desktop/CheckCalibration/ResultsSummary/RenderResult.tsx index 9f6fbe5e548..78c8f4e93d2 100644 --- a/app/src/organisms/CheckCalibration/ResultsSummary/RenderResult.tsx +++ b/app/src/organisms/Desktop/CheckCalibration/ResultsSummary/RenderResult.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { ALIGN_CENTER, diff --git a/app/src/organisms/CheckCalibration/ResultsSummary/__tests__/CalibrationHealthCheckResults.test.tsx b/app/src/organisms/Desktop/CheckCalibration/ResultsSummary/__tests__/CalibrationHealthCheckResults.test.tsx similarity index 97% rename from app/src/organisms/CheckCalibration/ResultsSummary/__tests__/CalibrationHealthCheckResults.test.tsx rename to app/src/organisms/Desktop/CheckCalibration/ResultsSummary/__tests__/CalibrationHealthCheckResults.test.tsx index 08e930a1391..dbe7c8349a0 100644 --- a/app/src/organisms/CheckCalibration/ResultsSummary/__tests__/CalibrationHealthCheckResults.test.tsx +++ b/app/src/organisms/Desktop/CheckCalibration/ResultsSummary/__tests__/CalibrationHealthCheckResults.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { it, describe, expect, beforeEach } from 'vitest' import { screen } from '@testing-library/react' diff --git a/app/src/organisms/CheckCalibration/ResultsSummary/__tests__/CalibrationResult.test.tsx b/app/src/organisms/Desktop/CheckCalibration/ResultsSummary/__tests__/CalibrationResult.test.tsx similarity index 98% rename from app/src/organisms/CheckCalibration/ResultsSummary/__tests__/CalibrationResult.test.tsx rename to app/src/organisms/Desktop/CheckCalibration/ResultsSummary/__tests__/CalibrationResult.test.tsx index 9004462430a..70432556944 100644 --- a/app/src/organisms/CheckCalibration/ResultsSummary/__tests__/CalibrationResult.test.tsx +++ b/app/src/organisms/Desktop/CheckCalibration/ResultsSummary/__tests__/CalibrationResult.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { vi, it, describe, beforeEach } from 'vitest' import { screen } from '@testing-library/react' diff --git a/app/src/organisms/CheckCalibration/ResultsSummary/__tests__/RenderMountInformation.test.tsx b/app/src/organisms/Desktop/CheckCalibration/ResultsSummary/__tests__/RenderMountInformation.test.tsx similarity index 98% rename from app/src/organisms/CheckCalibration/ResultsSummary/__tests__/RenderMountInformation.test.tsx rename to app/src/organisms/Desktop/CheckCalibration/ResultsSummary/__tests__/RenderMountInformation.test.tsx index 1915e0ae711..bae133b6522 100644 --- a/app/src/organisms/CheckCalibration/ResultsSummary/__tests__/RenderMountInformation.test.tsx +++ b/app/src/organisms/Desktop/CheckCalibration/ResultsSummary/__tests__/RenderMountInformation.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { vi, it, describe, beforeEach } from 'vitest' import { screen } from '@testing-library/react' diff --git a/app/src/organisms/CheckCalibration/ResultsSummary/__tests__/RenderResult.test.tsx b/app/src/organisms/Desktop/CheckCalibration/ResultsSummary/__tests__/RenderResult.test.tsx similarity index 97% rename from app/src/organisms/CheckCalibration/ResultsSummary/__tests__/RenderResult.test.tsx rename to app/src/organisms/Desktop/CheckCalibration/ResultsSummary/__tests__/RenderResult.test.tsx index 1fb708f81ba..90ed47fc126 100644 --- a/app/src/organisms/CheckCalibration/ResultsSummary/__tests__/RenderResult.test.tsx +++ b/app/src/organisms/Desktop/CheckCalibration/ResultsSummary/__tests__/RenderResult.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { it, describe, expect, beforeEach } from 'vitest' import { screen } from '@testing-library/react' diff --git a/app/src/organisms/CheckCalibration/ResultsSummary/__tests__/ResultsSummary.test.tsx b/app/src/organisms/Desktop/CheckCalibration/ResultsSummary/__tests__/ResultsSummary.test.tsx similarity index 96% rename from app/src/organisms/CheckCalibration/ResultsSummary/__tests__/ResultsSummary.test.tsx rename to app/src/organisms/Desktop/CheckCalibration/ResultsSummary/__tests__/ResultsSummary.test.tsx index 3f3ad46b7f1..246513300a9 100644 --- a/app/src/organisms/CheckCalibration/ResultsSummary/__tests__/ResultsSummary.test.tsx +++ b/app/src/organisms/Desktop/CheckCalibration/ResultsSummary/__tests__/ResultsSummary.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { vi, it, describe, expect, beforeEach } from 'vitest' import { saveAs } from 'file-saver' import { fireEvent, screen } from '@testing-library/react' @@ -13,7 +12,7 @@ import { CalibrationResult } from '../CalibrationResult' import { ResultsSummary } from '../' -import type { CalibrationPanelProps } from '/app/organisms/CalibrationPanels/types' +import type { CalibrationPanelProps } from '/app/organisms/Desktop/CalibrationPanels/types' // file-saver has circular dep, need to mock with factory to prevent error vi.mock('file-saver', async importOriginal => { diff --git a/app/src/organisms/CheckCalibration/ResultsSummary/index.tsx b/app/src/organisms/Desktop/CheckCalibration/ResultsSummary/index.tsx similarity index 98% rename from app/src/organisms/CheckCalibration/ResultsSummary/index.tsx rename to app/src/organisms/Desktop/CheckCalibration/ResultsSummary/index.tsx index 06aec08bec3..1bc2446ae4b 100644 --- a/app/src/organisms/CheckCalibration/ResultsSummary/index.tsx +++ b/app/src/organisms/Desktop/CheckCalibration/ResultsSummary/index.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { saveAs } from 'file-saver' @@ -23,7 +22,7 @@ import { RenderMountInformation } from './RenderMountInformation' import { CalibrationResult } from './CalibrationResult' import type { Mount } from '/app/redux/pipettes/types' -import type { CalibrationPanelProps } from '/app/organisms/CalibrationPanels/types' +import type { CalibrationPanelProps } from '/app/organisms/Desktop/CalibrationPanels/types' import type { CalibrationCheckInstrument, CalibrationCheckComparisonsPerCalibration, diff --git a/app/src/organisms/CheckCalibration/ReturnTip.tsx b/app/src/organisms/Desktop/CheckCalibration/ReturnTip.tsx similarity index 92% rename from app/src/organisms/CheckCalibration/ReturnTip.tsx rename to app/src/organisms/Desktop/CheckCalibration/ReturnTip.tsx index 02a9963be89..a996ee7f566 100644 --- a/app/src/organisms/CheckCalibration/ReturnTip.tsx +++ b/app/src/organisms/Desktop/CheckCalibration/ReturnTip.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { ALIGN_STRETCH, DIRECTION_COLUMN, @@ -11,10 +10,10 @@ import { import uniq from 'lodash/uniq' import * as Sessions from '/app/redux/sessions' -import type { CalibrationPanelProps } from '/app/organisms/CalibrationPanels/types' +import type { CalibrationPanelProps } from '/app/organisms/Desktop/CalibrationPanels/types' import type { SessionCommandString } from '/app/redux/sessions/types' import { useTranslation } from 'react-i18next' -import { NeedHelpLink } from '../CalibrationPanels' +import { NeedHelpLink } from '/app/molecules/OT2CalibrationNeedHelpLink' export function ReturnTip(props: CalibrationPanelProps): JSX.Element { const { t } = useTranslation('robot_calibration') diff --git a/app/src/organisms/CheckCalibration/ThresholdValue.tsx b/app/src/organisms/Desktop/CheckCalibration/ThresholdValue.tsx similarity index 92% rename from app/src/organisms/CheckCalibration/ThresholdValue.tsx rename to app/src/organisms/Desktop/CheckCalibration/ThresholdValue.tsx index 4ff957fbb47..383f3f4ed31 100644 --- a/app/src/organisms/CheckCalibration/ThresholdValue.tsx +++ b/app/src/organisms/Desktop/CheckCalibration/ThresholdValue.tsx @@ -1,5 +1,3 @@ -import * as React from 'react' - interface Props { thresholdVector: [number, number, number] } diff --git a/app/src/organisms/CheckCalibration/__tests__/CheckCalibration.test.tsx b/app/src/organisms/Desktop/CheckCalibration/__tests__/CheckCalibration.test.tsx similarity index 99% rename from app/src/organisms/CheckCalibration/__tests__/CheckCalibration.test.tsx rename to app/src/organisms/Desktop/CheckCalibration/__tests__/CheckCalibration.test.tsx index 47ee094592f..d5f5a9814d7 100644 --- a/app/src/organisms/CheckCalibration/__tests__/CheckCalibration.test.tsx +++ b/app/src/organisms/Desktop/CheckCalibration/__tests__/CheckCalibration.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { when } from 'vitest-when' import { vi, it, describe, expect, beforeEach, afterEach } from 'vitest' diff --git a/app/src/organisms/CheckCalibration/__tests__/ReturnTip.test.tsx b/app/src/organisms/Desktop/CheckCalibration/__tests__/ReturnTip.test.tsx similarity index 100% rename from app/src/organisms/CheckCalibration/__tests__/ReturnTip.test.tsx rename to app/src/organisms/Desktop/CheckCalibration/__tests__/ReturnTip.test.tsx diff --git a/app/src/organisms/CheckCalibration/index.tsx b/app/src/organisms/Desktop/CheckCalibration/index.tsx similarity index 97% rename from app/src/organisms/CheckCalibration/index.tsx rename to app/src/organisms/Desktop/CheckCalibration/index.tsx index 4711d3208e1..f2dae1c242e 100644 --- a/app/src/organisms/CheckCalibration/index.tsx +++ b/app/src/organisms/Desktop/CheckCalibration/index.tsx @@ -17,9 +17,9 @@ import { MeasureTip, LoadingState, ConfirmExit, -} from '/app/organisms/CalibrationPanels' +} from '/app/organisms/Desktop/CalibrationPanels' import { WizardHeader } from '/app/molecules/WizardHeader' -import { getTopPortalEl } from '../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import { ReturnTip } from './ReturnTip' import { ResultsSummary } from './ResultsSummary' @@ -31,7 +31,7 @@ import type { SessionCommandParams, } from '/app/redux/sessions/types' -import type { CalibrationPanelProps } from '/app/organisms/CalibrationPanels/types' +import type { CalibrationPanelProps } from '/app/organisms/Desktop/CalibrationPanels/types' import type { CalibrationCheckParentProps } from './types' import { CHECK_PIPETTE_RANK_FIRST } from '/app/redux/sessions' diff --git a/app/src/organisms/CheckCalibration/styles.module.css b/app/src/organisms/Desktop/CheckCalibration/styles.module.css similarity index 100% rename from app/src/organisms/CheckCalibration/styles.module.css rename to app/src/organisms/Desktop/CheckCalibration/styles.module.css diff --git a/app/src/organisms/CheckCalibration/types.ts b/app/src/organisms/Desktop/CheckCalibration/types.ts similarity index 100% rename from app/src/organisms/CheckCalibration/types.ts rename to app/src/organisms/Desktop/CheckCalibration/types.ts diff --git a/app/src/organisms/ChooseProtocolSlideout/__tests__/ChooseProtocolSlideout.test.tsx b/app/src/organisms/Desktop/ChooseProtocolSlideout/__tests__/ChooseProtocolSlideout.test.tsx similarity index 95% rename from app/src/organisms/ChooseProtocolSlideout/__tests__/ChooseProtocolSlideout.test.tsx rename to app/src/organisms/Desktop/ChooseProtocolSlideout/__tests__/ChooseProtocolSlideout.test.tsx index 89ae868022a..fc6a0f281a9 100644 --- a/app/src/organisms/ChooseProtocolSlideout/__tests__/ChooseProtocolSlideout.test.tsx +++ b/app/src/organisms/Desktop/ChooseProtocolSlideout/__tests__/ChooseProtocolSlideout.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { vi, it, describe, expect, beforeEach } from 'vitest' import { MemoryRouter } from 'react-router-dom' import { fireEvent, screen, waitFor } from '@testing-library/react' @@ -15,15 +15,17 @@ import { storedProtocolData as storedProtocolDataFixture, storedProtocolDataWithoutRunTimeParameters, } from '/app/redux/protocol-storage/__fixtures__' -import { useTrackCreateProtocolRunEvent } from '/app/organisms/Devices/hooks' -import { useCreateRunFromProtocol } from '../../ChooseRobotToRunProtocolSlideout/useCreateRunFromProtocol' +import { useTrackCreateProtocolRunEvent } from '/app/organisms/Desktop/Devices/hooks' +import { useCreateRunFromProtocol } from '/app/organisms/Desktop/ChooseRobotToRunProtocolSlideout/useCreateRunFromProtocol' import { ChooseProtocolSlideout } from '../' import { useNotifyDataReady } from '/app/resources/useNotifyDataReady' import type { ProtocolAnalysisOutput } from '@opentrons/shared-data' -vi.mock('../../ChooseRobotToRunProtocolSlideout/useCreateRunFromProtocol') +vi.mock( + '/app/organisms/Desktop/ChooseRobotToRunProtocolSlideout/useCreateRunFromProtocol' +) vi.mock('/app/redux/protocol-storage') -vi.mock('/app/organisms/Devices/hooks') +vi.mock('/app/organisms/Desktop/Devices/hooks') vi.mock('/app/redux/config') vi.mock('/app/resources/useNotifyDataReady') diff --git a/app/src/organisms/ChooseProtocolSlideout/index.tsx b/app/src/organisms/Desktop/ChooseProtocolSlideout/index.tsx similarity index 98% rename from app/src/organisms/ChooseProtocolSlideout/index.tsx rename to app/src/organisms/Desktop/ChooseProtocolSlideout/index.tsx index bd771f92f40..a4824c76c5c 100644 --- a/app/src/organisms/ChooseProtocolSlideout/index.tsx +++ b/app/src/organisms/Desktop/ChooseProtocolSlideout/index.tsx @@ -43,7 +43,7 @@ import { } from '@opentrons/react-api-client' import { sortRuntimeParameters } from '@opentrons/shared-data' -import { useLogger } from '../../logger' +import { useLogger } from '/app/logger' import { OPENTRONS_USB } from '/app/redux/discovery' import { getStoredProtocols } from '/app/redux/protocol-storage' import { appShellRequestor } from '/app/redux/shell/remote' @@ -51,16 +51,16 @@ import { MultiSlideout } from '/app/atoms/Slideout/MultiSlideout' import { ToggleButton } from '/app/atoms/buttons' import { MiniCard } from '/app/molecules/MiniCard' import { UploadInput } from '/app/molecules/UploadInput' -import { useTrackCreateProtocolRunEvent } from '../Devices/hooks' -import { useCreateRunFromProtocol } from '../ChooseRobotToRunProtocolSlideout/useCreateRunFromProtocol' -import { ApplyHistoricOffsets } from '../ApplyHistoricOffsets' -import { useOffsetCandidatesForAnalysis } from '../ApplyHistoricOffsets/hooks/useOffsetCandidatesForAnalysis' +import { useTrackCreateProtocolRunEvent } from '/app/organisms/Desktop/Devices/hooks' +import { useCreateRunFromProtocol } from '/app/organisms/Desktop/ChooseRobotToRunProtocolSlideout/useCreateRunFromProtocol' +import { ApplyHistoricOffsets } from '/app/organisms/ApplyHistoricOffsets' +import { useOffsetCandidatesForAnalysis } from '/app/organisms/ApplyHistoricOffsets/hooks/useOffsetCandidatesForAnalysis' import { FileCard } from '../ChooseRobotSlideout/FileCard' import { getRunTimeParameterFilesForRun, getRunTimeParameterValuesForRun, } from '/app/transformations/runs' -import { getAnalysisStatus } from '../ProtocolsLanding/utils' +import { getAnalysisStatus } from '/app/organisms/Desktop/ProtocolsLanding/utils' import type { DropdownOption } from '@opentrons/components' import type { RunTimeParameter } from '@opentrons/shared-data' diff --git a/app/src/organisms/ChooseRobotSlideout/AvailableRobotOption.tsx b/app/src/organisms/Desktop/ChooseRobotSlideout/AvailableRobotOption.tsx similarity index 100% rename from app/src/organisms/ChooseRobotSlideout/AvailableRobotOption.tsx rename to app/src/organisms/Desktop/ChooseRobotSlideout/AvailableRobotOption.tsx diff --git a/app/src/organisms/ChooseRobotSlideout/FileCard.tsx b/app/src/organisms/Desktop/ChooseRobotSlideout/FileCard.tsx similarity index 98% rename from app/src/organisms/ChooseRobotSlideout/FileCard.tsx rename to app/src/organisms/Desktop/ChooseRobotSlideout/FileCard.tsx index 0ed23c4aa2f..e21e806c5cb 100644 --- a/app/src/organisms/ChooseRobotSlideout/FileCard.tsx +++ b/app/src/organisms/Desktop/ChooseRobotSlideout/FileCard.tsx @@ -1,4 +1,3 @@ -import React from 'react' import { css } from 'styled-components' import { ALIGN_CENTER, diff --git a/app/src/organisms/ChooseRobotSlideout/__tests__/ChooseRobotSlideout.test.tsx b/app/src/organisms/Desktop/ChooseRobotSlideout/__tests__/ChooseRobotSlideout.test.tsx similarity index 99% rename from app/src/organisms/ChooseRobotSlideout/__tests__/ChooseRobotSlideout.test.tsx rename to app/src/organisms/Desktop/ChooseRobotSlideout/__tests__/ChooseRobotSlideout.test.tsx index b9c3eab323c..998c82462bc 100644 --- a/app/src/organisms/ChooseRobotSlideout/__tests__/ChooseRobotSlideout.test.tsx +++ b/app/src/organisms/Desktop/ChooseRobotSlideout/__tests__/ChooseRobotSlideout.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { vi, it, describe, expect, beforeEach } from 'vitest' import { MemoryRouter } from 'react-router-dom' diff --git a/app/src/organisms/ChooseRobotSlideout/__tests__/FileCard.test.tsx b/app/src/organisms/Desktop/ChooseRobotSlideout/__tests__/FileCard.test.tsx similarity index 98% rename from app/src/organisms/ChooseRobotSlideout/__tests__/FileCard.test.tsx rename to app/src/organisms/Desktop/ChooseRobotSlideout/__tests__/FileCard.test.tsx index eefe4f96241..9a151cd1704 100644 --- a/app/src/organisms/ChooseRobotSlideout/__tests__/FileCard.test.tsx +++ b/app/src/organisms/Desktop/ChooseRobotSlideout/__tests__/FileCard.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { vi, it, describe, expect } from 'vitest' import { MemoryRouter } from 'react-router-dom' import { fireEvent, screen } from '@testing-library/react' diff --git a/app/src/organisms/ChooseRobotSlideout/index.tsx b/app/src/organisms/Desktop/ChooseRobotSlideout/index.tsx similarity index 97% rename from app/src/organisms/ChooseRobotSlideout/index.tsx rename to app/src/organisms/Desktop/ChooseRobotSlideout/index.tsx index 109d1832163..1d7dc4e983f 100644 --- a/app/src/organisms/ChooseRobotSlideout/index.tsx +++ b/app/src/organisms/Desktop/ChooseRobotSlideout/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, useReducer, useEffect, Fragment } from 'react' import { useTranslation, Trans } from 'react-i18next' import { useSelector, useDispatch } from 'react-redux' import { NavLink } from 'react-router-dom' @@ -7,6 +7,7 @@ import { css } from 'styled-components' import { ALIGN_CENTER, ALIGN_FLEX_END, + Banner, BORDERS, COLORS, CURSOR_AUTO, @@ -47,7 +48,6 @@ import { RE_ROBOT_MODEL_OT2, RE_ROBOT_MODEL_OT3, } from '/app/redux/discovery' -import { Banner } from '/app/atoms/Banner' import { Slideout } from '/app/atoms/Slideout' import { MultiSlideout } from '/app/atoms/Slideout/MultiSlideout' import { ToggleButton } from '/app/atoms/buttons' @@ -58,7 +58,7 @@ import { FileCard } from './FileCard' import type { RobotType, RunTimeParameter } from '@opentrons/shared-data' import type { DropdownOption } from '@opentrons/components' import type { SlideoutProps } from '/app/atoms/Slideout' -import type { UseCreateRun } from '/app/organisms/ChooseRobotToRunProtocolSlideout/useCreateRunFromProtocol' +import type { UseCreateRun } from '/app/organisms/Desktop/ChooseRobotToRunProtocolSlideout/useCreateRunFromProtocol' import type { State, Dispatch } from '/app/redux/types' import type { Robot } from '/app/redux/discovery/types' @@ -162,8 +162,8 @@ export function ChooseRobotSlideout( const [ showRestoreValuesTooltip, setShowRestoreValuesTooltip, - ] = React.useState(false) - const [isInputFocused, setIsInputFocused] = React.useState(false) + ] = useState(false) + const [isInputFocused, setIsInputFocused] = useState(false) const unhealthyReachableRobots = useSelector((state: State) => getReachableRobots(state) @@ -199,7 +199,7 @@ export function ChooseRobotSlideout( } }) - const [robotBusyStatusByName, registerRobotBusyStatus] = React.useReducer( + const [robotBusyStatusByName, registerRobotBusyStatus] = useReducer( robotBusyStatusByNameReducer, {} ) @@ -212,7 +212,7 @@ export function ChooseRobotSlideout( ).length // this useEffect sets the default selection to the first robot in the list. state is managed by the caller - React.useEffect(() => { + useEffect(() => { if ( (selectedRobot == null || !reducerAvailableRobots.some( @@ -284,7 +284,7 @@ export function ChooseRobotSlideout( const isSelected = selectedRobot != null && selectedRobot.ip === robot.ip return ( - + { @@ -331,7 +331,7 @@ export function ChooseRobotSlideout( )} )} - + ) }) )} diff --git a/app/src/organisms/ChooseRobotToRunProtocolSlideout/__tests__/ChooseRobotToRunProtocolSlideout.test.tsx b/app/src/organisms/Desktop/ChooseRobotToRunProtocolSlideout/__tests__/ChooseRobotToRunProtocolSlideout.test.tsx similarity index 98% rename from app/src/organisms/ChooseRobotToRunProtocolSlideout/__tests__/ChooseRobotToRunProtocolSlideout.test.tsx rename to app/src/organisms/Desktop/ChooseRobotToRunProtocolSlideout/__tests__/ChooseRobotToRunProtocolSlideout.test.tsx index 068cd0825f0..5c7e858fb38 100644 --- a/app/src/organisms/ChooseRobotToRunProtocolSlideout/__tests__/ChooseRobotToRunProtocolSlideout.test.tsx +++ b/app/src/organisms/Desktop/ChooseRobotToRunProtocolSlideout/__tests__/ChooseRobotToRunProtocolSlideout.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { vi, it, describe, expect, beforeEach, afterEach } from 'vitest' import { MemoryRouter } from 'react-router-dom' import { fireEvent, screen, waitFor } from '@testing-library/react' @@ -6,7 +6,7 @@ import { when } from 'vitest-when' import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' -import { useTrackCreateProtocolRunEvent } from '/app/organisms/Devices/hooks' +import { useTrackCreateProtocolRunEvent } from '/app/organisms/Desktop/Devices/hooks' import { useCurrentRunStatus } from '/app/organisms/RunTimeControl/hooks' import { getConnectableRobots, @@ -27,14 +27,14 @@ import { storedProtocolDataWithCsvRunTimeParameter, } from '/app/redux/protocol-storage/__fixtures__' import { useCreateRunFromProtocol } from '../useCreateRunFromProtocol' -import { useOffsetCandidatesForAnalysis } from '../../ApplyHistoricOffsets/hooks/useOffsetCandidatesForAnalysis' +import { useOffsetCandidatesForAnalysis } from '/app/organisms/ApplyHistoricOffsets/hooks/useOffsetCandidatesForAnalysis' import { ChooseRobotToRunProtocolSlideout } from '../' import { useNotifyDataReady } from '/app/resources/useNotifyDataReady' import { useCurrentRunId, useCloseCurrentRun } from '/app/resources/runs' import type { State } from '/app/redux/types' -vi.mock('/app/organisms/Devices/hooks') +vi.mock('/app/organisms/Desktop/Devices/hooks') vi.mock('/app/organisms/ProtocolUpload/hooks') vi.mock('/app/organisms/RunTimeControl/hooks') vi.mock('/app/redux/config') @@ -42,7 +42,9 @@ vi.mock('/app/redux/discovery') vi.mock('/app/redux/robot-update') vi.mock('/app/redux/networking') vi.mock('../useCreateRunFromProtocol') -vi.mock('../../ApplyHistoricOffsets/hooks/useOffsetCandidatesForAnalysis') +vi.mock( + '/app/organisms/ApplyHistoricOffsets/hooks/useOffsetCandidatesForAnalysis' +) vi.mock('/app/resources/useNotifyDataReady') vi.mock('/app/resources/runs') diff --git a/app/src/organisms/ChooseRobotToRunProtocolSlideout/index.tsx b/app/src/organisms/Desktop/ChooseRobotToRunProtocolSlideout/index.tsx similarity index 97% rename from app/src/organisms/ChooseRobotToRunProtocolSlideout/index.tsx rename to app/src/organisms/Desktop/ChooseRobotToRunProtocolSlideout/index.tsx index 9b3446bf3d2..f4850a649cf 100644 --- a/app/src/organisms/ChooseRobotToRunProtocolSlideout/index.tsx +++ b/app/src/organisms/Desktop/ChooseRobotToRunProtocolSlideout/index.tsx @@ -24,13 +24,13 @@ import { import { useIsRobotOnWrongVersionOfSoftware } from '/app/redux/robot-update' import { OPENTRONS_USB } from '/app/redux/discovery' import { appShellRequestor } from '/app/redux/shell/remote' -import { useTrackCreateProtocolRunEvent } from '../Devices/hooks' +import { useTrackCreateProtocolRunEvent } from '/app/organisms/Desktop/Devices/hooks' import { getRunTimeParameterFilesForRun, getRunTimeParameterValuesForRun, } from '/app/transformations/runs' -import { ApplyHistoricOffsets } from '../ApplyHistoricOffsets' -import { useOffsetCandidatesForAnalysis } from '../ApplyHistoricOffsets/hooks/useOffsetCandidatesForAnalysis' +import { ApplyHistoricOffsets } from '/app/organisms/ApplyHistoricOffsets' +import { useOffsetCandidatesForAnalysis } from '/app/organisms/ApplyHistoricOffsets/hooks/useOffsetCandidatesForAnalysis' import { ChooseRobotSlideout } from '../ChooseRobotSlideout' import { useCreateRunFromProtocol } from './useCreateRunFromProtocol' import type { StyleProps } from '@opentrons/components' diff --git a/app/src/organisms/ChooseRobotToRunProtocolSlideout/useCreateRunFromProtocol.ts b/app/src/organisms/Desktop/ChooseRobotToRunProtocolSlideout/useCreateRunFromProtocol.ts similarity index 100% rename from app/src/organisms/ChooseRobotToRunProtocolSlideout/useCreateRunFromProtocol.ts rename to app/src/organisms/Desktop/ChooseRobotToRunProtocolSlideout/useCreateRunFromProtocol.ts diff --git a/app/src/organisms/Devices/CalibrationStatusBanner.tsx b/app/src/organisms/Desktop/Devices/CalibrationStatusBanner.tsx similarity index 95% rename from app/src/organisms/Devices/CalibrationStatusBanner.tsx rename to app/src/organisms/Desktop/Devices/CalibrationStatusBanner.tsx index 0a16d516658..e601ea19799 100644 --- a/app/src/organisms/Devices/CalibrationStatusBanner.tsx +++ b/app/src/organisms/Desktop/Devices/CalibrationStatusBanner.tsx @@ -1,9 +1,9 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { Link as RouterLink } from 'react-router-dom' import { ALIGN_CENTER, + Banner, COLORS, DIRECTION_ROW, Flex, @@ -14,7 +14,6 @@ import { TYPOGRAPHY, } from '@opentrons/components' -import { Banner } from '/app/atoms/Banner' import { useCalibrationTaskList } from './hooks' interface CalibrationStatusBannerProps { diff --git a/app/src/organisms/ChangePipette/CheckPipettesButton.tsx b/app/src/organisms/Desktop/Devices/ChangePipette/CheckPipettesButton.tsx similarity index 100% rename from app/src/organisms/ChangePipette/CheckPipettesButton.tsx rename to app/src/organisms/Desktop/Devices/ChangePipette/CheckPipettesButton.tsx diff --git a/app/src/organisms/ChangePipette/ClearDeckModal.tsx b/app/src/organisms/Desktop/Devices/ChangePipette/ClearDeckModal.tsx similarity index 97% rename from app/src/organisms/ChangePipette/ClearDeckModal.tsx rename to app/src/organisms/Desktop/Devices/ChangePipette/ClearDeckModal.tsx index dc89fc4ff7c..5fb2cd79de1 100644 --- a/app/src/organisms/ChangePipette/ClearDeckModal.tsx +++ b/app/src/organisms/Desktop/Devices/ChangePipette/ClearDeckModal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { Trans, useTranslation } from 'react-i18next' import { DIRECTION_COLUMN, diff --git a/app/src/organisms/ChangePipette/ConfirmPipette.tsx b/app/src/organisms/Desktop/Devices/ChangePipette/ConfirmPipette.tsx similarity index 99% rename from app/src/organisms/ChangePipette/ConfirmPipette.tsx rename to app/src/organisms/Desktop/Devices/ChangePipette/ConfirmPipette.tsx index c9c603905a1..f756059d003 100644 --- a/app/src/organisms/ChangePipette/ConfirmPipette.tsx +++ b/app/src/organisms/Desktop/Devices/ChangePipette/ConfirmPipette.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useTranslation } from 'react-i18next' import { OT2_ROBOT_TYPE } from '@opentrons/shared-data' import { diff --git a/app/src/organisms/ChangePipette/ExitModal.tsx b/app/src/organisms/Desktop/Devices/ChangePipette/ExitModal.tsx similarity index 97% rename from app/src/organisms/ChangePipette/ExitModal.tsx rename to app/src/organisms/Desktop/Devices/ChangePipette/ExitModal.tsx index 15ab8132dc6..619b35cea36 100644 --- a/app/src/organisms/ChangePipette/ExitModal.tsx +++ b/app/src/organisms/Desktop/Devices/ChangePipette/ExitModal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { COLORS, diff --git a/app/src/organisms/ChangePipette/InstructionStep.tsx b/app/src/organisms/Desktop/Devices/ChangePipette/InstructionStep.tsx similarity index 98% rename from app/src/organisms/ChangePipette/InstructionStep.tsx rename to app/src/organisms/Desktop/Devices/ChangePipette/InstructionStep.tsx index a12ae6827e3..05d43fdd11c 100644 --- a/app/src/organisms/ChangePipette/InstructionStep.tsx +++ b/app/src/organisms/Desktop/Devices/ChangePipette/InstructionStep.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { Box, Flex, JUSTIFY_SPACE_EVENLY, SPACING } from '@opentrons/components' import type { PipetteChannels, diff --git a/app/src/organisms/ChangePipette/Instructions.tsx b/app/src/organisms/Desktop/Devices/ChangePipette/Instructions.tsx similarity index 99% rename from app/src/organisms/ChangePipette/Instructions.tsx rename to app/src/organisms/Desktop/Devices/ChangePipette/Instructions.tsx index 4582dafafe5..cffdceca835 100644 --- a/app/src/organisms/ChangePipette/Instructions.tsx +++ b/app/src/organisms/Desktop/Devices/ChangePipette/Instructions.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useEffect } from 'react' import { css } from 'styled-components' import { Trans, useTranslation } from 'react-i18next' import { @@ -69,7 +69,7 @@ export function Instructions(props: Props): JSX.Element { } = props const { t } = useTranslation('change_pipette') - React.useEffect(() => { + useEffect(() => { if (direction === 'detach' && currentStepCount === 0) { nextStep() } diff --git a/app/src/organisms/ChangePipette/LevelPipette.tsx b/app/src/organisms/Desktop/Devices/ChangePipette/LevelPipette.tsx similarity index 98% rename from app/src/organisms/ChangePipette/LevelPipette.tsx rename to app/src/organisms/Desktop/Devices/ChangePipette/LevelPipette.tsx index d3f69909f5d..db49a4d6861 100644 --- a/app/src/organisms/ChangePipette/LevelPipette.tsx +++ b/app/src/organisms/Desktop/Devices/ChangePipette/LevelPipette.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { Trans, useTranslation } from 'react-i18next' import { css } from 'styled-components' diff --git a/app/src/organisms/ChangePipette/PipetteSelection.tsx b/app/src/organisms/Desktop/Devices/ChangePipette/PipetteSelection.tsx similarity index 96% rename from app/src/organisms/ChangePipette/PipetteSelection.tsx rename to app/src/organisms/Desktop/Devices/ChangePipette/PipetteSelection.tsx index 58151b8610d..c306f132154 100644 --- a/app/src/organisms/ChangePipette/PipetteSelection.tsx +++ b/app/src/organisms/Desktop/Devices/ChangePipette/PipetteSelection.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useTranslation } from 'react-i18next' import { DIRECTION_COLUMN, diff --git a/app/src/organisms/ChangePipette/__tests__/ChangePipette.test.tsx b/app/src/organisms/Desktop/Devices/ChangePipette/__tests__/ChangePipette.test.tsx similarity index 98% rename from app/src/organisms/ChangePipette/__tests__/ChangePipette.test.tsx rename to app/src/organisms/Desktop/Devices/ChangePipette/__tests__/ChangePipette.test.tsx index f627265493c..89112a484d4 100644 --- a/app/src/organisms/ChangePipette/__tests__/ChangePipette.test.tsx +++ b/app/src/organisms/Desktop/Devices/ChangePipette/__tests__/ChangePipette.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { vi, it, describe, expect, beforeEach } from 'vitest' import { fireEvent, screen } from '@testing-library/react' @@ -15,7 +15,7 @@ import { SUCCESS, useDispatchApiRequests, } from '/app/redux/robot-api' -import { useAttachedPipettes } from '../../Devices/hooks' +import { useAttachedPipettes } from '/app/resources/instruments' import { PipetteSelection } from '../PipetteSelection' import { ExitModal } from '../ExitModal' import { ConfirmPipette } from '../ConfirmPipette' @@ -51,7 +51,7 @@ vi.mock('../PipetteSelection') vi.mock('../ExitModal') vi.mock('/app/molecules/InProgressModal/InProgressModal') vi.mock('../ConfirmPipette') -vi.mock('../../Devices/hooks') +vi.mock('/app/resources/instruments') vi.mock('/app/assets/images') const render = (props: React.ComponentProps) => { diff --git a/app/src/organisms/ChangePipette/__tests__/CheckPipettesButton.test.tsx b/app/src/organisms/Desktop/Devices/ChangePipette/__tests__/CheckPipettesButton.test.tsx similarity index 98% rename from app/src/organisms/ChangePipette/__tests__/CheckPipettesButton.test.tsx rename to app/src/organisms/Desktop/Devices/ChangePipette/__tests__/CheckPipettesButton.test.tsx index 41c8afcb08c..a5fa3a50bd6 100644 --- a/app/src/organisms/ChangePipette/__tests__/CheckPipettesButton.test.tsx +++ b/app/src/organisms/Desktop/Devices/ChangePipette/__tests__/CheckPipettesButton.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { vi, it, describe, expect, beforeEach } from 'vitest' diff --git a/app/src/organisms/ChangePipette/__tests__/ClearDeckModal.test.tsx b/app/src/organisms/Desktop/Devices/ChangePipette/__tests__/ClearDeckModal.test.tsx similarity index 97% rename from app/src/organisms/ChangePipette/__tests__/ClearDeckModal.test.tsx rename to app/src/organisms/Desktop/Devices/ChangePipette/__tests__/ClearDeckModal.test.tsx index faae99c439c..f4af4566141 100644 --- a/app/src/organisms/ChangePipette/__tests__/ClearDeckModal.test.tsx +++ b/app/src/organisms/Desktop/Devices/ChangePipette/__tests__/ClearDeckModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { vi, it, describe, expect, beforeEach } from 'vitest' diff --git a/app/src/organisms/ChangePipette/__tests__/ConfirmPipette.test.tsx b/app/src/organisms/Desktop/Devices/ChangePipette/__tests__/ConfirmPipette.test.tsx similarity index 99% rename from app/src/organisms/ChangePipette/__tests__/ConfirmPipette.test.tsx rename to app/src/organisms/Desktop/Devices/ChangePipette/__tests__/ConfirmPipette.test.tsx index b2ddff2791f..a328df38383 100644 --- a/app/src/organisms/ChangePipette/__tests__/ConfirmPipette.test.tsx +++ b/app/src/organisms/Desktop/Devices/ChangePipette/__tests__/ConfirmPipette.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { vi, it, describe, expect } from 'vitest' diff --git a/app/src/organisms/ChangePipette/__tests__/ExitModal.test.tsx b/app/src/organisms/Desktop/Devices/ChangePipette/__tests__/ExitModal.test.tsx similarity index 97% rename from app/src/organisms/ChangePipette/__tests__/ExitModal.test.tsx rename to app/src/organisms/Desktop/Devices/ChangePipette/__tests__/ExitModal.test.tsx index f7438b1874c..29bf417071c 100644 --- a/app/src/organisms/ChangePipette/__tests__/ExitModal.test.tsx +++ b/app/src/organisms/Desktop/Devices/ChangePipette/__tests__/ExitModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { vi, it, describe, expect, beforeEach } from 'vitest' diff --git a/app/src/organisms/ChangePipette/__tests__/InstructionStep.test.tsx b/app/src/organisms/Desktop/Devices/ChangePipette/__tests__/InstructionStep.test.tsx similarity index 97% rename from app/src/organisms/ChangePipette/__tests__/InstructionStep.test.tsx rename to app/src/organisms/Desktop/Devices/ChangePipette/__tests__/InstructionStep.test.tsx index 33e390ad1f4..80cdde63972 100644 --- a/app/src/organisms/ChangePipette/__tests__/InstructionStep.test.tsx +++ b/app/src/organisms/Desktop/Devices/ChangePipette/__tests__/InstructionStep.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { it, describe, beforeEach } from 'vitest' import { screen } from '@testing-library/react' diff --git a/app/src/organisms/ChangePipette/__tests__/Instructions.test.tsx b/app/src/organisms/Desktop/Devices/ChangePipette/__tests__/Instructions.test.tsx similarity index 99% rename from app/src/organisms/ChangePipette/__tests__/Instructions.test.tsx rename to app/src/organisms/Desktop/Devices/ChangePipette/__tests__/Instructions.test.tsx index c169f5f0960..024be58e798 100644 --- a/app/src/organisms/ChangePipette/__tests__/Instructions.test.tsx +++ b/app/src/organisms/Desktop/Devices/ChangePipette/__tests__/Instructions.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { vi, it, describe, expect, beforeEach } from 'vitest' import { fireEvent, screen } from '@testing-library/react' diff --git a/app/src/organisms/ChangePipette/__tests__/LevelPipette.test.tsx b/app/src/organisms/Desktop/Devices/ChangePipette/__tests__/LevelPipette.test.tsx similarity index 98% rename from app/src/organisms/ChangePipette/__tests__/LevelPipette.test.tsx rename to app/src/organisms/Desktop/Devices/ChangePipette/__tests__/LevelPipette.test.tsx index 40edcf61260..78c2e9f8d6d 100644 --- a/app/src/organisms/ChangePipette/__tests__/LevelPipette.test.tsx +++ b/app/src/organisms/Desktop/Devices/ChangePipette/__tests__/LevelPipette.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { vi, it, describe, expect, beforeEach } from 'vitest' import { fireEvent, screen } from '@testing-library/react' diff --git a/app/src/organisms/ChangePipette/__tests__/PipetteSelection.test.tsx b/app/src/organisms/Desktop/Devices/ChangePipette/__tests__/PipetteSelection.test.tsx similarity index 96% rename from app/src/organisms/ChangePipette/__tests__/PipetteSelection.test.tsx rename to app/src/organisms/Desktop/Devices/ChangePipette/__tests__/PipetteSelection.test.tsx index 1048e265fae..f3619e9930d 100644 --- a/app/src/organisms/ChangePipette/__tests__/PipetteSelection.test.tsx +++ b/app/src/organisms/Desktop/Devices/ChangePipette/__tests__/PipetteSelection.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { vi, it, describe, beforeEach } from 'vitest' import { screen } from '@testing-library/react' diff --git a/app/src/organisms/ChangePipette/constants.ts b/app/src/organisms/Desktop/Devices/ChangePipette/constants.ts similarity index 100% rename from app/src/organisms/ChangePipette/constants.ts rename to app/src/organisms/Desktop/Devices/ChangePipette/constants.ts diff --git a/app/src/organisms/ChangePipette/index.tsx b/app/src/organisms/Desktop/Devices/ChangePipette/index.tsx similarity index 93% rename from app/src/organisms/ChangePipette/index.tsx rename to app/src/organisms/Desktop/Devices/ChangePipette/index.tsx index cd91b04529e..efcca7d7a35 100644 --- a/app/src/organisms/ChangePipette/index.tsx +++ b/app/src/organisms/Desktop/Devices/ChangePipette/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useRef, useState, useEffect, useCallback } from 'react' import capitalize from 'lodash/capitalize' import { useSelector, useDispatch } from 'react-redux' import { useNavigate } from 'react-router-dom' @@ -31,7 +31,7 @@ import { import { WizardHeader } from '/app/molecules/WizardHeader' import { InProgressModal } from '/app/molecules/InProgressModal/InProgressModal' -import { useAttachedPipettes } from '../Devices/hooks' +import { useAttachedPipettes } from '/app/resources/instruments' import { ExitModal } from './ExitModal' import { Instructions } from './Instructions' import { ConfirmPipette } from './ConfirmPipette' @@ -63,7 +63,7 @@ export function ChangePipette(props: Props): JSX.Element | null { const { t } = useTranslation(['change_pipette', 'shared']) const navigate = useNavigate() const dispatch = useDispatch() - const finalRequestId = React.useRef(null) + const finalRequestId = useRef(null) const [dispatchApiRequests] = useDispatchApiRequests(dispatchedAction => { if ( dispatchedAction.type === HOME && @@ -74,10 +74,10 @@ export function ChangePipette(props: Props): JSX.Element | null { finalRequestId.current = dispatchedAction.meta.requestId } }) - const [wizardStep, setWizardStep] = React.useState(CLEAR_DECK) - const [wantedName, setWantedName] = React.useState(null) - const [confirmExit, setConfirmExit] = React.useState(false) - const [currentStepCount, setCurrentStepCount] = React.useState(0) + const [wizardStep, setWizardStep] = useState(CLEAR_DECK) + const [wantedName, setWantedName] = useState(null) + const [confirmExit, setConfirmExit] = useState(false) + const [currentStepCount, setCurrentStepCount] = useState(0) // @ts-expect-error(sa, 2021-05-27): avoiding src code change, use in operator to type narrow const wantedPipette = wantedName ? getPipetteNameSpecs(wantedName) : null const attachedPipette = useAttachedPipettes()[mount] @@ -90,10 +90,8 @@ export function ChangePipette(props: Props): JSX.Element | null { const [ wrongWantedPipette, setWrongWantedPipette, - ] = React.useState(wantedPipette) - const [confirmPipetteLevel, setConfirmPipetteLevel] = React.useState( - false - ) + ] = useState(wantedPipette) + const [confirmPipetteLevel, setConfirmPipetteLevel] = useState(false) const movementStatus = useSelector((state: State) => { return getMovementStatus(state, robotName) @@ -105,11 +103,11 @@ export function ChangePipette(props: Props): JSX.Element | null { : null })?.status - React.useEffect(() => { + useEffect(() => { if (homePipStatus === SUCCESS) closeModal() }, [homePipStatus, closeModal]) - const homePipAndExit = React.useCallback(() => { + const homePipAndExit = useCallback(() => { dispatchApiRequests(home(robotName, PIPETTE, mount)) }, [dispatchApiRequests, robotName, mount]) diff --git a/app/src/organisms/ChangePipette/types.ts b/app/src/organisms/Desktop/Devices/ChangePipette/types.ts similarity index 100% rename from app/src/organisms/ChangePipette/types.ts rename to app/src/organisms/Desktop/Devices/ChangePipette/types.ts diff --git a/app/src/organisms/ConfigurePipette/ConfigErrorBanner.tsx b/app/src/organisms/Desktop/Devices/ConfigurePipette/ConfigErrorBanner.tsx similarity index 90% rename from app/src/organisms/ConfigurePipette/ConfigErrorBanner.tsx rename to app/src/organisms/Desktop/Devices/ConfigurePipette/ConfigErrorBanner.tsx index 35aac004632..5a7ea72ae7e 100644 --- a/app/src/organisms/ConfigurePipette/ConfigErrorBanner.tsx +++ b/app/src/organisms/Desktop/Devices/ConfigurePipette/ConfigErrorBanner.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { AlertItem } from '@opentrons/components' import styles from './styles.module.css' @@ -10,7 +10,7 @@ const TITLE = 'Error updating pipette settings' export function ConfigErrorBanner(props: Props): JSX.Element | null { const { message } = props - const [dismissed, setDismissed] = React.useState(false) + const [dismissed, setDismissed] = useState(false) if (message == null || dismissed) return null return ( diff --git a/app/src/organisms/ConfigurePipette/ConfigForm.tsx b/app/src/organisms/Desktop/Devices/ConfigurePipette/ConfigForm.tsx similarity index 99% rename from app/src/organisms/ConfigurePipette/ConfigForm.tsx rename to app/src/organisms/Desktop/Devices/ConfigurePipette/ConfigForm.tsx index acc2c943cb9..6cd5691db1e 100644 --- a/app/src/organisms/ConfigurePipette/ConfigForm.tsx +++ b/app/src/organisms/Desktop/Devices/ConfigurePipette/ConfigForm.tsx @@ -1,5 +1,3 @@ -import * as React from 'react' - import startCase from 'lodash/startCase' import mapValues from 'lodash/mapValues' import forOwn from 'lodash/forOwn' diff --git a/app/src/organisms/ConfigurePipette/ConfigFormGroup.tsx b/app/src/organisms/Desktop/Devices/ConfigurePipette/ConfigFormGroup.tsx similarity index 99% rename from app/src/organisms/ConfigurePipette/ConfigFormGroup.tsx rename to app/src/organisms/Desktop/Devices/ConfigurePipette/ConfigFormGroup.tsx index a7f75904ae3..9c8a2c25acf 100644 --- a/app/src/organisms/ConfigurePipette/ConfigFormGroup.tsx +++ b/app/src/organisms/Desktop/Devices/ConfigurePipette/ConfigFormGroup.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { Controller } from 'react-hook-form' import { CheckboxField, diff --git a/app/src/organisms/ConfigurePipette/ConfigFormResetButton.tsx b/app/src/organisms/Desktop/Devices/ConfigurePipette/ConfigFormResetButton.tsx similarity index 97% rename from app/src/organisms/ConfigurePipette/ConfigFormResetButton.tsx rename to app/src/organisms/Desktop/Devices/ConfigurePipette/ConfigFormResetButton.tsx index 8d640e89bda..3d31d8b7bab 100644 --- a/app/src/organisms/ConfigurePipette/ConfigFormResetButton.tsx +++ b/app/src/organisms/Desktop/Devices/ConfigurePipette/ConfigFormResetButton.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { Trans, useTranslation } from 'react-i18next' import { DIRECTION_COLUMN, diff --git a/app/src/organisms/ConfigurePipette/ConfigFormSubmitButton.tsx b/app/src/organisms/Desktop/Devices/ConfigurePipette/ConfigFormSubmitButton.tsx similarity index 96% rename from app/src/organisms/ConfigurePipette/ConfigFormSubmitButton.tsx rename to app/src/organisms/Desktop/Devices/ConfigurePipette/ConfigFormSubmitButton.tsx index cc608f40e85..97335e736a3 100644 --- a/app/src/organisms/ConfigurePipette/ConfigFormSubmitButton.tsx +++ b/app/src/organisms/Desktop/Devices/ConfigurePipette/ConfigFormSubmitButton.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { DIRECTION_COLUMN, diff --git a/app/src/organisms/ConfigurePipette/ConfigMessage.tsx b/app/src/organisms/Desktop/Devices/ConfigurePipette/ConfigMessage.tsx similarity index 95% rename from app/src/organisms/ConfigurePipette/ConfigMessage.tsx rename to app/src/organisms/Desktop/Devices/ConfigurePipette/ConfigMessage.tsx index d55c2b96c36..d6a32fa6d4b 100644 --- a/app/src/organisms/ConfigurePipette/ConfigMessage.tsx +++ b/app/src/organisms/Desktop/Devices/ConfigurePipette/ConfigMessage.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import styles from './styles.module.css' // TODO (ka 2019-2-12): Add intercom onClick to assistance text diff --git a/app/src/organisms/ConfigurePipette/__tests__/ConfigFormResetButton.test.tsx b/app/src/organisms/Desktop/Devices/ConfigurePipette/__tests__/ConfigFormResetButton.test.tsx similarity index 97% rename from app/src/organisms/ConfigurePipette/__tests__/ConfigFormResetButton.test.tsx rename to app/src/organisms/Desktop/Devices/ConfigurePipette/__tests__/ConfigFormResetButton.test.tsx index bcec76bc2ea..4c2ec08c7d4 100644 --- a/app/src/organisms/ConfigurePipette/__tests__/ConfigFormResetButton.test.tsx +++ b/app/src/organisms/Desktop/Devices/ConfigurePipette/__tests__/ConfigFormResetButton.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { vi, it, expect, describe, beforeEach } from 'vitest' diff --git a/app/src/organisms/ConfigurePipette/__tests__/ConfigFormSubmitButton.test.tsx b/app/src/organisms/Desktop/Devices/ConfigurePipette/__tests__/ConfigFormSubmitButton.test.tsx similarity index 96% rename from app/src/organisms/ConfigurePipette/__tests__/ConfigFormSubmitButton.test.tsx rename to app/src/organisms/Desktop/Devices/ConfigurePipette/__tests__/ConfigFormSubmitButton.test.tsx index 3a10eb988f0..3dbab681883 100644 --- a/app/src/organisms/ConfigurePipette/__tests__/ConfigFormSubmitButton.test.tsx +++ b/app/src/organisms/Desktop/Devices/ConfigurePipette/__tests__/ConfigFormSubmitButton.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { it, expect, describe, beforeEach } from 'vitest' import { screen } from '@testing-library/react' diff --git a/app/src/organisms/ConfigurePipette/__tests__/ConfigurePipette.test.tsx b/app/src/organisms/Desktop/Devices/ConfigurePipette/__tests__/ConfigurePipette.test.tsx similarity index 98% rename from app/src/organisms/ConfigurePipette/__tests__/ConfigurePipette.test.tsx rename to app/src/organisms/Desktop/Devices/ConfigurePipette/__tests__/ConfigurePipette.test.tsx index e3e37a76ff0..2d7790bdd24 100644 --- a/app/src/organisms/ConfigurePipette/__tests__/ConfigurePipette.test.tsx +++ b/app/src/organisms/Desktop/Devices/ConfigurePipette/__tests__/ConfigurePipette.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { when } from 'vitest-when' import { vi, it, expect, describe, beforeEach } from 'vitest' diff --git a/app/src/organisms/ConfigurePipette/index.tsx b/app/src/organisms/Desktop/Devices/ConfigurePipette/index.tsx similarity index 97% rename from app/src/organisms/ConfigurePipette/index.tsx rename to app/src/organisms/Desktop/Devices/ConfigurePipette/index.tsx index 326f9e5792e..62a90721b26 100644 --- a/app/src/organisms/ConfigurePipette/index.tsx +++ b/app/src/organisms/Desktop/Devices/ConfigurePipette/index.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { Box } from '@opentrons/components' diff --git a/app/src/organisms/ConfigurePipette/styles.module.css b/app/src/organisms/Desktop/Devices/ConfigurePipette/styles.module.css similarity index 100% rename from app/src/organisms/ConfigurePipette/styles.module.css rename to app/src/organisms/Desktop/Devices/ConfigurePipette/styles.module.css diff --git a/app/src/organisms/Devices/ConnectionTroubleshootingModal.tsx b/app/src/organisms/Desktop/Devices/ConnectionTroubleshootingModal.tsx similarity index 98% rename from app/src/organisms/Devices/ConnectionTroubleshootingModal.tsx rename to app/src/organisms/Desktop/Devices/ConnectionTroubleshootingModal.tsx index c6289ead522..1587524abae 100644 --- a/app/src/organisms/Devices/ConnectionTroubleshootingModal.tsx +++ b/app/src/organisms/Desktop/Devices/ConnectionTroubleshootingModal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { css } from 'styled-components' import { diff --git a/app/src/organisms/Devices/DevicesEmptyState.tsx b/app/src/organisms/Desktop/Devices/DevicesEmptyState.tsx similarity index 98% rename from app/src/organisms/Devices/DevicesEmptyState.tsx rename to app/src/organisms/Desktop/Devices/DevicesEmptyState.tsx index 95ec5f8af2c..f542fb2f979 100644 --- a/app/src/organisms/Devices/DevicesEmptyState.tsx +++ b/app/src/organisms/Desktop/Devices/DevicesEmptyState.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { useDispatch } from 'react-redux' diff --git a/app/src/organisms/Devices/DownloadCsvFileLink.tsx b/app/src/organisms/Desktop/Devices/DownloadCsvFileLink.tsx similarity index 97% rename from app/src/organisms/Devices/DownloadCsvFileLink.tsx rename to app/src/organisms/Desktop/Devices/DownloadCsvFileLink.tsx index 4975db0ce11..e2ab564c0c8 100644 --- a/app/src/organisms/Devices/DownloadCsvFileLink.tsx +++ b/app/src/organisms/Desktop/Devices/DownloadCsvFileLink.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { diff --git a/app/src/organisms/ErrorRecoveryBanner/__tests__/ErrorRecoveryBanner.test.tsx b/app/src/organisms/Desktop/Devices/ErrorRecoveryBanner/__tests__/ErrorRecoveryBanner.test.tsx similarity index 97% rename from app/src/organisms/ErrorRecoveryBanner/__tests__/ErrorRecoveryBanner.test.tsx rename to app/src/organisms/Desktop/Devices/ErrorRecoveryBanner/__tests__/ErrorRecoveryBanner.test.tsx index 17e0e5665db..fc234a52629 100644 --- a/app/src/organisms/ErrorRecoveryBanner/__tests__/ErrorRecoveryBanner.test.tsx +++ b/app/src/organisms/Desktop/Devices/ErrorRecoveryBanner/__tests__/ErrorRecoveryBanner.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, vi, beforeEach } from 'vitest' import { screen } from '@testing-library/react' diff --git a/app/src/organisms/ErrorRecoveryBanner/__tests__/useErrorRecoveryBanner.test.ts b/app/src/organisms/Desktop/Devices/ErrorRecoveryBanner/__tests__/useErrorRecoveryBanner.test.ts similarity index 100% rename from app/src/organisms/ErrorRecoveryBanner/__tests__/useErrorRecoveryBanner.test.ts rename to app/src/organisms/Desktop/Devices/ErrorRecoveryBanner/__tests__/useErrorRecoveryBanner.test.ts diff --git a/app/src/organisms/ErrorRecoveryBanner/index.tsx b/app/src/organisms/Desktop/Devices/ErrorRecoveryBanner/index.tsx similarity index 96% rename from app/src/organisms/ErrorRecoveryBanner/index.tsx rename to app/src/organisms/Desktop/Devices/ErrorRecoveryBanner/index.tsx index 6a2d12607cd..f8630d67824 100644 --- a/app/src/organisms/ErrorRecoveryBanner/index.tsx +++ b/app/src/organisms/Desktop/Devices/ErrorRecoveryBanner/index.tsx @@ -1,9 +1,9 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { useSelector } from 'react-redux' import { Flex, + Banner, DIRECTION_COLUMN, SPACING, StyledText, @@ -11,7 +11,6 @@ import { import { getUserId } from '/app/redux/config' import { useClientDataRecovery } from '/app/resources/client_data' -import { Banner } from '/app/atoms/Banner' import type { RecoveryIntent } from '/app/resources/client_data' import type { StyleProps } from '@opentrons/components' diff --git a/app/src/organisms/Devices/EstopBanner.tsx b/app/src/organisms/Desktop/Devices/EstopBanner.tsx similarity index 93% rename from app/src/organisms/Devices/EstopBanner.tsx rename to app/src/organisms/Desktop/Devices/EstopBanner.tsx index f006be1ed47..c1d434fa585 100644 --- a/app/src/organisms/Devices/EstopBanner.tsx +++ b/app/src/organisms/Desktop/Devices/EstopBanner.tsx @@ -1,7 +1,7 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { Btn, + Banner, DIRECTION_ROW, Flex, SPACING, @@ -9,13 +9,12 @@ import { TYPOGRAPHY, } from '@opentrons/components' -import { Banner } from '/app/atoms/Banner' import { NOT_PRESENT, PHYSICALLY_ENGAGED, LOGICALLY_ENGAGED, useEstopContext, -} from '../EmergencyStop' +} from '/app/organisms/EmergencyStop' import type { EstopState } from '@opentrons/api-client' diff --git a/app/src/organisms/GripperCard/AboutGripperSlideout.tsx b/app/src/organisms/Desktop/Devices/GripperCard/AboutGripperSlideout.tsx similarity index 98% rename from app/src/organisms/GripperCard/AboutGripperSlideout.tsx rename to app/src/organisms/Desktop/Devices/GripperCard/AboutGripperSlideout.tsx index 5cfb59e2c21..a95a409f759 100644 --- a/app/src/organisms/GripperCard/AboutGripperSlideout.tsx +++ b/app/src/organisms/Desktop/Devices/GripperCard/AboutGripperSlideout.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { COLORS, diff --git a/app/src/organisms/GripperCard/__tests__/AboutGripperSlideout.test.tsx b/app/src/organisms/Desktop/Devices/GripperCard/__tests__/AboutGripperSlideout.test.tsx similarity index 97% rename from app/src/organisms/GripperCard/__tests__/AboutGripperSlideout.test.tsx rename to app/src/organisms/Desktop/Devices/GripperCard/__tests__/AboutGripperSlideout.test.tsx index fa6fff2a552..9ad4381a40c 100644 --- a/app/src/organisms/GripperCard/__tests__/AboutGripperSlideout.test.tsx +++ b/app/src/organisms/Desktop/Devices/GripperCard/__tests__/AboutGripperSlideout.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { screen, fireEvent } from '@testing-library/react' import { describe, it, vi, beforeEach, expect } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' diff --git a/app/src/organisms/GripperCard/__tests__/GripperCard.test.tsx b/app/src/organisms/Desktop/Devices/GripperCard/__tests__/GripperCard.test.tsx similarity index 97% rename from app/src/organisms/GripperCard/__tests__/GripperCard.test.tsx rename to app/src/organisms/Desktop/Devices/GripperCard/__tests__/GripperCard.test.tsx index 32f523b82ca..ccdbc80c2b3 100644 --- a/app/src/organisms/GripperCard/__tests__/GripperCard.test.tsx +++ b/app/src/organisms/Desktop/Devices/GripperCard/__tests__/GripperCard.test.tsx @@ -1,15 +1,15 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, vi, beforeEach, expect } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' import { useCurrentSubsystemUpdateQuery } from '@opentrons/react-api-client' import { i18n } from '/app/i18n' -import { GripperWizardFlows } from '../../GripperWizardFlows' +import { GripperWizardFlows } from '/app/organisms/GripperWizardFlows' import { AboutGripperSlideout } from '../AboutGripperSlideout' import { GripperCard } from '../' import type { GripperData } from '@opentrons/api-client' -vi.mock('../../GripperWizardFlows') +vi.mock('/app/organisms/GripperWizardFlows') vi.mock('../AboutGripperSlideout') vi.mock('@opentrons/react-api-client') diff --git a/app/src/organisms/GripperCard/index.tsx b/app/src/organisms/Desktop/Devices/GripperCard/index.tsx similarity index 96% rename from app/src/organisms/GripperCard/index.tsx rename to app/src/organisms/Desktop/Devices/GripperCard/index.tsx index fd720a99e0f..c8a5280049e 100644 --- a/app/src/organisms/GripperCard/index.tsx +++ b/app/src/organisms/Desktop/Devices/GripperCard/index.tsx @@ -2,6 +2,7 @@ import * as React from 'react' import { Trans, useTranslation } from 'react-i18next' import { css } from 'styled-components' import { + Banner, CURSOR_POINTER, LegacyStyledText, SPACING, @@ -9,15 +10,14 @@ import { } from '@opentrons/components' import { getGripperDisplayName } from '@opentrons/shared-data' import { useCurrentSubsystemUpdateQuery } from '@opentrons/react-api-client' -import { Banner } from '/app/atoms/Banner' import { InstrumentCard } from '/app/molecules/InstrumentCard' -import { GripperWizardFlows } from '../GripperWizardFlows' +import { GripperWizardFlows } from '/app/organisms/GripperWizardFlows' import { AboutGripperSlideout } from './AboutGripperSlideout' -import { GRIPPER_FLOW_TYPES } from '../GripperWizardFlows/constants' +import { GRIPPER_FLOW_TYPES } from '/app/organisms/GripperWizardFlows/constants' import type { BadGripper, GripperData } from '@opentrons/api-client' import type { GripperModel } from '@opentrons/shared-data' -import type { GripperWizardFlowType } from '../GripperWizardFlows/types' +import type { GripperWizardFlowType } from '/app/organisms/GripperWizardFlows/types' interface GripperCardProps { attachedGripper: GripperData | BadGripper | null diff --git a/app/src/organisms/Devices/HistoricalProtocolRun.tsx b/app/src/organisms/Desktop/Devices/HistoricalProtocolRun.tsx similarity index 96% rename from app/src/organisms/Devices/HistoricalProtocolRun.tsx rename to app/src/organisms/Desktop/Devices/HistoricalProtocolRun.tsx index e843ecec15d..1ec488cfc45 100644 --- a/app/src/organisms/Devices/HistoricalProtocolRun.tsx +++ b/app/src/organisms/Desktop/Devices/HistoricalProtocolRun.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { useTranslation } from 'react-i18next' import { css } from 'styled-components' import { @@ -15,7 +15,7 @@ import { CURSOR_POINTER, } from '@opentrons/components' import { formatInterval } from '/app/transformations/commands' -import { formatTimestamp } from './utils' +import { formatTimestamp } from '/app/transformations/runs' import { EMPTY_TIMESTAMP } from '/app/resources/runs' import { HistoricalProtocolRunOverflowMenu as OverflowMenu } from './HistoricalProtocolRunOverflowMenu' import { HistoricalProtocolRunDrawer as Drawer } from './HistoricalProtocolRunDrawer' @@ -40,7 +40,7 @@ export function HistoricalProtocolRun( ): JSX.Element | null { const { t } = useTranslation('run_details') const { run, protocolName, robotIsBusy, robotName, protocolKey } = props - const [drawerOpen, setDrawerOpen] = React.useState(false) + const [drawerOpen, setDrawerOpen] = useState(false) const countRunDataFiles = 'runTimeParameters' in run ? run?.runTimeParameters.filter( diff --git a/app/src/organisms/Devices/HistoricalProtocolRunDrawer.tsx b/app/src/organisms/Desktop/Devices/HistoricalProtocolRunDrawer.tsx similarity index 98% rename from app/src/organisms/Devices/HistoricalProtocolRunDrawer.tsx rename to app/src/organisms/Desktop/Devices/HistoricalProtocolRunDrawer.tsx index 26316a4b990..6533895bb1e 100644 --- a/app/src/organisms/Devices/HistoricalProtocolRunDrawer.tsx +++ b/app/src/organisms/Desktop/Devices/HistoricalProtocolRunDrawer.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { format } from 'date-fns' import isEqual from 'lodash/isEqual' @@ -6,6 +5,7 @@ import { css } from 'styled-components' import { ALIGN_CENTER, ALIGN_END, + Banner, BORDERS, Box, COLORS, @@ -27,8 +27,7 @@ import { } from '@opentrons/shared-data' import { useCsvFileQuery } from '@opentrons/react-api-client' import { DownloadCsvFileLink } from './DownloadCsvFileLink' -import { Banner } from '/app/atoms/Banner' -import { useMostRecentCompletedAnalysis } from '../LabwarePositionCheck/useMostRecentCompletedAnalysis' +import { useMostRecentCompletedAnalysis } from '/app/resources/runs' import { useDeckCalibrationData } from './hooks' import { OffsetVector } from '/app/molecules/OffsetVector' import type { RunData } from '@opentrons/api-client' diff --git a/app/src/organisms/Devices/HistoricalProtocolRunOverflowMenu.tsx b/app/src/organisms/Desktop/Devices/HistoricalProtocolRunOverflowMenu.tsx similarity index 90% rename from app/src/organisms/Devices/HistoricalProtocolRunOverflowMenu.tsx rename to app/src/organisms/Desktop/Devices/HistoricalProtocolRunOverflowMenu.tsx index 4e4723a5ccd..18dc44cb11b 100644 --- a/app/src/organisms/Devices/HistoricalProtocolRunOverflowMenu.tsx +++ b/app/src/organisms/Desktop/Devices/HistoricalProtocolRunOverflowMenu.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useTranslation } from 'react-i18next' import { NavLink, useNavigate } from 'react-router-dom' @@ -26,7 +26,7 @@ import { import { useDeleteRunMutation } from '@opentrons/react-api-client' import { Divider } from '/app/atoms/structure' -import { useRunControls } from '/app/organisms/RunTimeControl/hooks' +import { useRunControls } from '/app/organisms/RunTimeControl' import { useTrackEvent, ANALYTICS_PROTOCOL_PROCEED_TO_RUN, @@ -34,7 +34,7 @@ import { } from '/app/redux/analytics' import { useIsRobotOnWrongVersionOfSoftware } from '/app/redux/robot-update' import { useDownloadRunLog } from './hooks' -import { useIsEstopNotDisengaged } from '/app/resources/devices/hooks/useIsEstopNotDisengaged' +import { useIsEstopNotDisengaged } from '/app/resources/devices' import { useTrackProtocolRunEvent } from '/app/redux-resources/analytics' import { useRobot } from '/app/redux-resources/robots' @@ -134,7 +134,10 @@ function MenuDropdown(props: MenuDropdownProps): JSX.Element { } const trackEvent = useTrackEvent() const { trackProtocolRunEvent } = useTrackProtocolRunEvent(runId, robotName) - const { reset, isRunControlLoading } = useRunControls(runId, onResetSuccess) + const { reset, isResetRunLoading, isRunControlLoading } = useRunControls( + runId, + onResetSuccess + ) const { deleteRun } = useDeleteRunMutation() const robot = useRobot(robotName) const robotSerialNumber = @@ -190,7 +193,18 @@ function MenuDropdown(props: MenuDropdownProps): JSX.Element { } data-testid="RecentProtocolRun_OverflowMenu_rerunNow" > - {t('rerun_now')} + + {t('rerun_now')} + {isResetRunLoading ? ( + + ) : null} + {isRobotOnWrongVersionOfSoftware && ( diff --git a/app/src/organisms/Devices/InstrumentsAndModules.tsx b/app/src/organisms/Desktop/Devices/InstrumentsAndModules.tsx similarity index 95% rename from app/src/organisms/Devices/InstrumentsAndModules.tsx rename to app/src/organisms/Desktop/Devices/InstrumentsAndModules.tsx index b8b2e786bb5..75f1140efed 100644 --- a/app/src/organisms/Devices/InstrumentsAndModules.tsx +++ b/app/src/organisms/Desktop/Devices/InstrumentsAndModules.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { getPipetteModelSpecs, LEFT, RIGHT } from '@opentrons/shared-data' import { @@ -10,6 +9,7 @@ import { import { ALIGN_CENTER, ALIGN_FLEX_START, + Banner, COLORS, DIRECTION_COLUMN, Flex, @@ -20,18 +20,16 @@ import { TYPOGRAPHY, } from '@opentrons/components' -import { Banner } from '/app/atoms/Banner' import { PipetteRecalibrationWarning } from './PipetteCard/PipetteRecalibrationWarning' -import { useCurrentRunId } from '/app/resources/runs' -import { useIsFlex } from '/app/redux-resources/robots' -import { ModuleCard } from '../ModuleCard' -import { useIsRobotViewable, useRunStatuses } from './hooks' -import { getShowPipetteCalibrationWarning } from './utils' +import { useCurrentRunId, useRunStatuses } from '/app/resources/runs' +import { useIsFlex, useIsRobotViewable } from '/app/redux-resources/robots' +import { ModuleCard } from '/app/organisms/ModuleCard' +import { getShowPipetteCalibrationWarning } from '/app/transformations/instruments' import { PipetteCard } from './PipetteCard' import { FlexPipetteCard } from './PipetteCard/FlexPipetteCard' -import { GripperCard } from '../GripperCard' +import { GripperCard } from './GripperCard' import { useIsEstopNotDisengaged } from '/app/resources/devices/hooks/useIsEstopNotDisengaged' -import { useModuleApiRequests } from '../ModuleCard/utils' +import { useModuleApiRequests } from '/app/organisms/ModuleCard/utils' import type { BadGripper, diff --git a/app/src/organisms/Devices/PipetteCard/AboutPipetteSlideout.tsx b/app/src/organisms/Desktop/Devices/PipetteCard/AboutPipetteSlideout.tsx similarity index 98% rename from app/src/organisms/Devices/PipetteCard/AboutPipetteSlideout.tsx rename to app/src/organisms/Desktop/Devices/PipetteCard/AboutPipetteSlideout.tsx index 304d7be4b23..a8588a00778 100644 --- a/app/src/organisms/Devices/PipetteCard/AboutPipetteSlideout.tsx +++ b/app/src/organisms/Desktop/Devices/PipetteCard/AboutPipetteSlideout.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { COLORS, diff --git a/app/src/organisms/Devices/PipetteCard/FlexPipetteCard.tsx b/app/src/organisms/Desktop/Devices/PipetteCard/FlexPipetteCard.tsx similarity index 96% rename from app/src/organisms/Devices/PipetteCard/FlexPipetteCard.tsx rename to app/src/organisms/Desktop/Devices/PipetteCard/FlexPipetteCard.tsx index a1042e92881..ca7b7a27340 100644 --- a/app/src/organisms/Devices/PipetteCard/FlexPipetteCard.tsx +++ b/app/src/organisms/Desktop/Devices/PipetteCard/FlexPipetteCard.tsx @@ -3,6 +3,7 @@ import { Trans, useTranslation } from 'react-i18next' import { css } from 'styled-components' import { CURSOR_POINTER, + Banner, LegacyStyledText, SPACING, TYPOGRAPHY, @@ -17,15 +18,14 @@ import { useCurrentSubsystemUpdateQuery, useHost, } from '@opentrons/react-api-client' -import { Banner } from '/app/atoms/Banner' import { InstrumentCard } from '/app/molecules/InstrumentCard' -import { ChoosePipette } from '../../PipetteWizardFlows/ChoosePipette' -import { FLOWS } from '../../PipetteWizardFlows/constants' -import { handlePipetteWizardFlows } from '../../PipetteWizardFlows' +import { ChoosePipette } from '/app/organisms/PipetteWizardFlows/ChoosePipette' +import { FLOWS } from '/app/organisms/PipetteWizardFlows/constants' +import { handlePipetteWizardFlows } from '/app/organisms/PipetteWizardFlows' import { DropTipWizardFlows, useDropTipWizardFlows, -} from '../../DropTipWizardFlows' +} from '/app/organisms/DropTipWizardFlows' import { AboutPipetteSlideout } from './AboutPipetteSlideout' @@ -39,7 +39,7 @@ import type { PipetteModelSpecs } from '@opentrons/shared-data' import type { PipetteWizardFlow, SelectablePipettes, -} from '../../PipetteWizardFlows/types' +} from '/app/organisms/PipetteWizardFlows/types' interface FlexPipetteCardProps { attachedPipette: PipetteData | BadPipette | null diff --git a/app/src/organisms/Devices/PipetteCard/PipetteOverflowMenu.tsx b/app/src/organisms/Desktop/Devices/PipetteCard/PipetteOverflowMenu.tsx similarity index 98% rename from app/src/organisms/Devices/PipetteCard/PipetteOverflowMenu.tsx rename to app/src/organisms/Desktop/Devices/PipetteCard/PipetteOverflowMenu.tsx index da8656dae94..58fc6aca8f0 100644 --- a/app/src/organisms/Devices/PipetteCard/PipetteOverflowMenu.tsx +++ b/app/src/organisms/Desktop/Devices/PipetteCard/PipetteOverflowMenu.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { diff --git a/app/src/organisms/Devices/PipetteCard/PipetteRecalibrationWarning.tsx b/app/src/organisms/Desktop/Devices/PipetteCard/PipetteRecalibrationWarning.tsx similarity index 89% rename from app/src/organisms/Devices/PipetteCard/PipetteRecalibrationWarning.tsx rename to app/src/organisms/Desktop/Devices/PipetteCard/PipetteRecalibrationWarning.tsx index 452d97766d3..10fcee0f08c 100644 --- a/app/src/organisms/Devices/PipetteCard/PipetteRecalibrationWarning.tsx +++ b/app/src/organisms/Desktop/Devices/PipetteCard/PipetteRecalibrationWarning.tsx @@ -1,18 +1,18 @@ -import * as React from 'react' +import { useState } from 'react' import { useTranslation } from 'react-i18next' import { Box, + Banner, DIRECTION_COLUMN, Flex, SPACING, LegacyStyledText, TYPOGRAPHY, } from '@opentrons/components' -import { Banner } from '/app/atoms/Banner' export const PipetteRecalibrationWarning = (): JSX.Element | null => { const { t } = useTranslation('device_details') - const [showBanner, setShowBanner] = React.useState(true) + const [showBanner, setShowBanner] = useState(true) if (!showBanner) return null return ( diff --git a/app/src/organisms/Devices/PipetteCard/PipetteSettingsSlideout.tsx b/app/src/organisms/Desktop/Devices/PipetteCard/PipetteSettingsSlideout.tsx similarity index 90% rename from app/src/organisms/Devices/PipetteCard/PipetteSettingsSlideout.tsx rename to app/src/organisms/Desktop/Devices/PipetteCard/PipetteSettingsSlideout.tsx index 9b6cdff72a7..9a8faa9c061 100644 --- a/app/src/organisms/Devices/PipetteCard/PipetteSettingsSlideout.tsx +++ b/app/src/organisms/Desktop/Devices/PipetteCard/PipetteSettingsSlideout.tsx @@ -1,10 +1,9 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { Flex } from '@opentrons/components' import { useUpdatePipetteSettingsMutation } from '@opentrons/react-api-client' import { Slideout } from '/app/atoms/Slideout' -import { ConfigFormSubmitButton } from '../../ConfigurePipette/ConfigFormSubmitButton' -import { ConfigurePipette } from '../../ConfigurePipette' +import { ConfigFormSubmitButton } from '../ConfigurePipette/ConfigFormSubmitButton' +import { ConfigurePipette } from '../ConfigurePipette' import type { PipetteModelSpecs } from '@opentrons/shared-data' import type { PipetteSettingsFieldsMap } from '@opentrons/api-client' diff --git a/app/src/organisms/Devices/PipetteCard/__tests__/AboutPipetteSlideout.test.tsx b/app/src/organisms/Desktop/Devices/PipetteCard/__tests__/AboutPipetteSlideout.test.tsx similarity index 97% rename from app/src/organisms/Devices/PipetteCard/__tests__/AboutPipetteSlideout.test.tsx rename to app/src/organisms/Desktop/Devices/PipetteCard/__tests__/AboutPipetteSlideout.test.tsx index 84d9fef2a9f..dd2274a3ab3 100644 --- a/app/src/organisms/Devices/PipetteCard/__tests__/AboutPipetteSlideout.test.tsx +++ b/app/src/organisms/Desktop/Devices/PipetteCard/__tests__/AboutPipetteSlideout.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, vi, beforeEach, expect } from 'vitest' import '@testing-library/jest-dom/vitest' import { renderWithProviders } from '/app/__testing-utils__' diff --git a/app/src/organisms/Devices/PipetteCard/__tests__/FlexPipetteCard.test.tsx b/app/src/organisms/Desktop/Devices/PipetteCard/__tests__/FlexPipetteCard.test.tsx similarity index 95% rename from app/src/organisms/Devices/PipetteCard/__tests__/FlexPipetteCard.test.tsx rename to app/src/organisms/Desktop/Devices/PipetteCard/__tests__/FlexPipetteCard.test.tsx index b10a0d2f446..1dd13e8f350 100644 --- a/app/src/organisms/Devices/PipetteCard/__tests__/FlexPipetteCard.test.tsx +++ b/app/src/organisms/Desktop/Devices/PipetteCard/__tests__/FlexPipetteCard.test.tsx @@ -1,23 +1,23 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, vi, beforeEach, afterEach, expect } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' import { useCurrentSubsystemUpdateQuery } from '@opentrons/react-api-client' import { i18n } from '/app/i18n' import { mockLeftSpecs } from '/app/redux/pipettes/__fixtures__' -import { handlePipetteWizardFlows } from '../../../PipetteWizardFlows' +import { handlePipetteWizardFlows } from '/app/organisms/PipetteWizardFlows' import { AboutPipetteSlideout } from '../AboutPipetteSlideout' import { FlexPipetteCard } from '../FlexPipetteCard' -import { ChoosePipette } from '../../../PipetteWizardFlows/ChoosePipette' -import { useDropTipWizardFlows } from '../../../DropTipWizardFlows' +import { ChoosePipette } from '/app/organisms/PipetteWizardFlows/ChoosePipette' +import { useDropTipWizardFlows } from '/app/organisms/DropTipWizardFlows' import type { PipetteData } from '@opentrons/api-client' import type { Mock } from 'vitest' -vi.mock('../../../PipetteWizardFlows') -vi.mock('../../../PipetteWizardFlows/ChoosePipette') +vi.mock('/app/organisms/PipetteWizardFlows') +vi.mock('/app/organisms/PipetteWizardFlows/ChoosePipette') vi.mock('../AboutPipetteSlideout') -vi.mock('../../../DropTipWizardFlows') +vi.mock('/app/organisms/DropTipWizardFlows') vi.mock('@opentrons/react-api-client') const render = (props: React.ComponentProps) => { diff --git a/app/src/organisms/Devices/PipetteCard/__tests__/PipetteCard.test.tsx b/app/src/organisms/Desktop/Devices/PipetteCard/__tests__/PipetteCard.test.tsx similarity index 96% rename from app/src/organisms/Devices/PipetteCard/__tests__/PipetteCard.test.tsx rename to app/src/organisms/Desktop/Devices/PipetteCard/__tests__/PipetteCard.test.tsx index 91380e8d7aa..80567d3f1b9 100644 --- a/app/src/organisms/Devices/PipetteCard/__tests__/PipetteCard.test.tsx +++ b/app/src/organisms/Desktop/Devices/PipetteCard/__tests__/PipetteCard.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { when } from 'vitest-when' import { fireEvent, screen } from '@testing-library/react' import { describe, it, vi, beforeEach, expect } from 'vitest' @@ -11,7 +11,7 @@ import { getHasCalibrationBlock } from '/app/redux/config' import { useDispatchApiRequest } from '/app/redux/robot-api' import { PipetteOverflowMenu } from '../PipetteOverflowMenu' import { PipetteCard } from '..' -import { useDropTipWizardFlows } from '../../../DropTipWizardFlows' +import { useDropTipWizardFlows } from '/app/organisms/DropTipWizardFlows' import { mockLeftSpecs, mockRightSpecs } from '/app/redux/pipettes/__fixtures__' @@ -22,7 +22,7 @@ vi.mock('/app/redux/config') vi.mock('/app/redux/robot-api') vi.mock('@opentrons/react-api-client') vi.mock('/app/redux/pipettes') -vi.mock('../../../DropTipWizardFlows') +vi.mock('/app/organisms/DropTipWizardFlows') const render = (props: React.ComponentProps) => { return renderWithProviders(, { diff --git a/app/src/organisms/Devices/PipetteCard/__tests__/PipetteOverflowMenu.test.tsx b/app/src/organisms/Desktop/Devices/PipetteCard/__tests__/PipetteOverflowMenu.test.tsx similarity index 98% rename from app/src/organisms/Devices/PipetteCard/__tests__/PipetteOverflowMenu.test.tsx rename to app/src/organisms/Desktop/Devices/PipetteCard/__tests__/PipetteOverflowMenu.test.tsx index 36eddad5674..155d955b6ea 100644 --- a/app/src/organisms/Devices/PipetteCard/__tests__/PipetteOverflowMenu.test.tsx +++ b/app/src/organisms/Desktop/Devices/PipetteCard/__tests__/PipetteOverflowMenu.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, vi, beforeEach, expect } from 'vitest' import '@testing-library/jest-dom/vitest' diff --git a/app/src/organisms/Devices/PipetteCard/__tests__/PipetteSettingsSlideout.test.tsx b/app/src/organisms/Desktop/Devices/PipetteCard/__tests__/PipetteSettingsSlideout.test.tsx similarity index 98% rename from app/src/organisms/Devices/PipetteCard/__tests__/PipetteSettingsSlideout.test.tsx rename to app/src/organisms/Desktop/Devices/PipetteCard/__tests__/PipetteSettingsSlideout.test.tsx index a1b0cdaa7ec..37b6f66b863 100644 --- a/app/src/organisms/Devices/PipetteCard/__tests__/PipetteSettingsSlideout.test.tsx +++ b/app/src/organisms/Desktop/Devices/PipetteCard/__tests__/PipetteSettingsSlideout.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { when } from 'vitest-when' import { fireEvent, waitFor, screen } from '@testing-library/react' import { describe, it, vi, beforeEach, expect } from 'vitest' diff --git a/app/src/organisms/Devices/PipetteCard/index.tsx b/app/src/organisms/Desktop/Devices/PipetteCard/index.tsx similarity index 95% rename from app/src/organisms/Devices/PipetteCard/index.tsx rename to app/src/organisms/Desktop/Devices/PipetteCard/index.tsx index 3e031da68e7..08488e98987 100644 --- a/app/src/organisms/Devices/PipetteCard/index.tsx +++ b/app/src/organisms/Desktop/Devices/PipetteCard/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { useTranslation } from 'react-i18next' import { @@ -22,14 +22,14 @@ import { OT2_ROBOT_TYPE } from '@opentrons/shared-data' import { usePipetteSettingsQuery } from '@opentrons/react-api-client' import { LEFT } from '/app/redux/pipettes' -import { ChangePipette } from '../../ChangePipette' +import { ChangePipette } from '../ChangePipette' import { PipetteOverflowMenu } from './PipetteOverflowMenu' import { PipetteSettingsSlideout } from './PipetteSettingsSlideout' import { AboutPipetteSlideout } from './AboutPipetteSlideout' import { DropTipWizardFlows, useDropTipWizardFlows, -} from '../../DropTipWizardFlows' +} from '/app/organisms/DropTipWizardFlows' import type { PipetteModelSpecs } from '@opentrons/shared-data' import type { AttachedPipette, Mount } from '/app/redux/pipettes/types' @@ -68,9 +68,9 @@ export const PipetteCard = (props: PipetteCardProps): JSX.Element => { setShowOverflowMenu(false) }, }) - const [showChangePipette, setChangePipette] = React.useState(false) - const [showSlideout, setShowSlideout] = React.useState(false) - const [showAboutSlideout, setShowAboutSlideout] = React.useState(false) + const [showChangePipette, setChangePipette] = useState(false) + const [showSlideout, setShowSlideout] = useState(false) + const [showAboutSlideout, setShowAboutSlideout] = useState(false) const { showDTWiz, toggleDTWiz } = useDropTipWizardFlows() diff --git a/app/src/organisms/Devices/ProtocolRun/BackToTopButton.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/BackToTopButton.tsx similarity index 97% rename from app/src/organisms/Devices/ProtocolRun/BackToTopButton.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/BackToTopButton.tsx index 385d6537272..a8524988bf2 100644 --- a/app/src/organisms/Devices/ProtocolRun/BackToTopButton.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/BackToTopButton.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useTranslation } from 'react-i18next' import { Link } from 'react-router-dom' import { useRobot } from '/app/redux-resources/robots' diff --git a/app/src/organisms/Devices/ProtocolRun/EmptySetupStep.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/EmptySetupStep.tsx similarity index 95% rename from app/src/organisms/Devices/ProtocolRun/EmptySetupStep.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/EmptySetupStep.tsx index eeca6dcf81a..24c2b449083 100644 --- a/app/src/organisms/Devices/ProtocolRun/EmptySetupStep.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/EmptySetupStep.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { COLORS, DIRECTION_COLUMN, diff --git a/app/src/organisms/Devices/ProtocolRun/LabwareInfoOverlay.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/LabwareInfoOverlay.tsx similarity index 99% rename from app/src/organisms/Devices/ProtocolRun/LabwareInfoOverlay.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/LabwareInfoOverlay.tsx index 1dc1b9526cb..c2d868af33f 100644 --- a/app/src/organisms/Devices/ProtocolRun/LabwareInfoOverlay.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/LabwareInfoOverlay.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { css } from 'styled-components' import { useTranslation } from 'react-i18next' import { getLabwareDisplayName } from '@opentrons/shared-data' diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/DisplayRunStatus.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/DisplayRunStatus.tsx similarity index 97% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/DisplayRunStatus.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/DisplayRunStatus.tsx index 70b388ec3ca..5b5624ffb4e 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/DisplayRunStatus.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/DisplayRunStatus.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderBannerContainer/ProtocolAnalysisErrorBanner.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderBannerContainer/ProtocolAnalysisErrorBanner.tsx similarity index 96% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderBannerContainer/ProtocolAnalysisErrorBanner.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderBannerContainer/ProtocolAnalysisErrorBanner.tsx index 183e51fb1eb..18a8f0e682a 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderBannerContainer/ProtocolAnalysisErrorBanner.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderBannerContainer/ProtocolAnalysisErrorBanner.tsx @@ -4,6 +4,7 @@ import { Trans, useTranslation } from 'react-i18next' import { ALIGN_CENTER, + Banner, Btn, Flex, JUSTIFY_FLEX_END, @@ -15,8 +16,7 @@ import { Modal, } from '@opentrons/components' -import { getTopPortalEl } from '../../../../../App/portal' -import { Banner } from '/app/atoms/Banner' +import { getTopPortalEl } from '/app/App/portal' import type { AnalysisError } from '@opentrons/shared-data' diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderBannerContainer/TerminalRunBannerContainer.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderBannerContainer/TerminalRunBannerContainer.tsx similarity index 98% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderBannerContainer/TerminalRunBannerContainer.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderBannerContainer/TerminalRunBannerContainer.tsx index 3df355a0b3c..c6428c2f385 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderBannerContainer/TerminalRunBannerContainer.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderBannerContainer/TerminalRunBannerContainer.tsx @@ -1,9 +1,9 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { SPACING, TYPOGRAPHY, + Banner, JUSTIFY_SPACE_BETWEEN, Flex, StyledText, @@ -11,8 +11,6 @@ import { ALIGN_CENTER, } from '@opentrons/components' import { RUN_STATUS_STOPPED, RUN_STATUS_SUCCEEDED } from '@opentrons/api-client' - -import { Banner } from '/app/atoms/Banner' import { useCloseCurrentRun, useIsRunCurrent, diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderBannerContainer/__tests__/ProtocolAnalysisErrorBanner.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderBannerContainer/__tests__/ProtocolAnalysisErrorBanner.test.tsx similarity index 97% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderBannerContainer/__tests__/ProtocolAnalysisErrorBanner.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderBannerContainer/__tests__/ProtocolAnalysisErrorBanner.test.tsx index 169dee8958a..5b60de044d7 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderBannerContainer/__tests__/ProtocolAnalysisErrorBanner.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderBannerContainer/__tests__/ProtocolAnalysisErrorBanner.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, beforeEach } from 'vitest' diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderBannerContainer/getShowGenericRunHeaderBanners.ts b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderBannerContainer/getShowGenericRunHeaderBanners.ts similarity index 100% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderBannerContainer/getShowGenericRunHeaderBanners.ts rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderBannerContainer/getShowGenericRunHeaderBanners.ts diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderBannerContainer/index.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderBannerContainer/index.tsx similarity index 93% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderBannerContainer/index.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderBannerContainer/index.tsx index d2e41230640..e05a11eb391 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderBannerContainer/index.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderBannerContainer/index.tsx @@ -1,10 +1,8 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' -import { Box, SPACING } from '@opentrons/components' +import { Box, SPACING, Banner } from '@opentrons/components' import { ProtocolAnalysisErrorBanner } from './ProtocolAnalysisErrorBanner' -import { Banner } from '/app/atoms/Banner' import { TerminalRunBannerContainer, useTerminalRunBannerContainer, @@ -66,7 +64,7 @@ export function RunHeaderBannerContainer( ) : null} {showDoorOpenDuringRunBanner ? ( - {t('close_door_to_resume')} + {t('close_door_to_resume_run')} ) : null} {terminalBannerType != null ? ( diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/ActionButton/hooks/index.ts b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/ActionButton/hooks/index.ts similarity index 100% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/ActionButton/hooks/index.ts rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/ActionButton/hooks/index.ts diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/ActionButton/hooks/useActionBtnDisabledUtils.ts b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/ActionButton/hooks/useActionBtnDisabledUtils.ts similarity index 93% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/ActionButton/hooks/useActionBtnDisabledUtils.ts rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/ActionButton/hooks/useActionBtnDisabledUtils.ts index 1af46b835d6..df418deda15 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/ActionButton/hooks/useActionBtnDisabledUtils.ts +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/ActionButton/hooks/useActionBtnDisabledUtils.ts @@ -19,6 +19,7 @@ interface UseActionButtonDisabledUtilsProps extends BaseActionButtonProps { isOtherRunCurrent: boolean isProtocolNotReady: boolean isRobotOnWrongVersionOfSoftware: boolean + isClosingCurrentRun: boolean } type UseActionButtonDisabledUtilsResult = @@ -41,6 +42,7 @@ export function useActionBtnDisabledUtils( robotName, runId, isResetRunLoadingRef, + isClosingCurrentRun, } = props const { t } = useTranslation('shared') @@ -57,6 +59,7 @@ export function useActionBtnDisabledUtils( isPlayRunActionLoading || isPauseRunActionLoading || isResetRunLoading || + isClosingCurrentRun || isOtherRunCurrent || isProtocolNotReady || isFixtureMismatch || @@ -82,6 +85,7 @@ type UseDisabledReasonProps = UseActionButtonDisabledUtilsProps & { isDoorOpen: boolean isFixtureMismatch: boolean isResetRunLoading: boolean + isClosingCurrentRun: boolean } // The user-facing disabled explanation for why the ActionButton is disabled, if any. @@ -95,6 +99,7 @@ function useDisabledReason({ isDoorOpen, runStatus, isResetRunLoading, + isClosingCurrentRun, }: UseDisabledReasonProps): string | null { const { t } = useTranslation(['run_details', 'shared']) @@ -110,6 +115,8 @@ function useDisabledReason({ return t('shared:a_software_update_is_available') } else if (isDoorOpen && isStartRunStatus(runStatus)) { return t('close_door') + } else if (isClosingCurrentRun) { + return t('shared:robot_is_busy') } else { return null } diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/ActionButton/hooks/useActionButtonProperties.ts b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/ActionButton/hooks/useActionButtonProperties.ts similarity index 94% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/ActionButton/hooks/useActionButtonProperties.ts rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/ActionButton/hooks/useActionButtonProperties.ts index d47788130c4..cd16d2467b6 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/ActionButton/hooks/useActionButtonProperties.ts +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/ActionButton/hooks/useActionButtonProperties.ts @@ -14,7 +14,7 @@ import { useTrackEvent, } from '/app/redux/analytics' import { useTrackProtocolRunEvent } from '/app/redux-resources/analytics' -import { useIsHeaterShakerInProtocol } from '../../../../../../ModuleCard/hooks' +import { useIsHeaterShakerInProtocol } from '/app/organisms/ModuleCard/hooks' import { isAnyHeaterShakerShaking } from '../../../RunHeaderModalContainer/modals' import { isRecoveryStatus, @@ -35,6 +35,7 @@ interface UseButtonPropertiesProps extends BaseActionButtonProps { isValidRunAgain: boolean isOtherRunCurrent: boolean isRobotOnWrongVersionOfSoftware: boolean + isClosingCurrentRun: boolean } // Returns ActionButton properties. @@ -52,6 +53,7 @@ export function useActionButtonProperties({ attachedModules, runHeaderModalContainerUtils, isResetRunLoadingRef, + isClosingCurrentRun, }: UseButtonPropertiesProps): { buttonText: string handleButtonClick: () => void @@ -72,6 +74,9 @@ export function useActionButtonProperties({ if (isProtocolNotReady) { buttonIconName = 'ot-spinner' buttonText = t('analyzing_on_robot') + } else if (isClosingCurrentRun) { + buttonIconName = 'ot-spinner' + buttonText = t('canceling_run') } else if (runStatus === RUN_STATUS_RUNNING || isRecoveryStatus(runStatus)) { buttonIconName = 'pause' buttonText = t('pause_run') diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/ActionButton/hooks/useIsFixtureMismatch.ts b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/ActionButton/hooks/useIsFixtureMismatch.ts similarity index 82% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/ActionButton/hooks/useIsFixtureMismatch.ts rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/ActionButton/hooks/useIsFixtureMismatch.ts index ebac2a7bec3..aa49528efa2 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/ActionButton/hooks/useIsFixtureMismatch.ts +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/ActionButton/hooks/useIsFixtureMismatch.ts @@ -1,4 +1,4 @@ -import { useMostRecentCompletedAnalysis } from '../../../../../../LabwarePositionCheck/useMostRecentCompletedAnalysis' +import { useMostRecentCompletedAnalysis } from '/app/resources/runs' import { useRobotType } from '/app/redux-resources/robots' import { getIsFixtureMismatch, diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/ActionButton/index.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/ActionButton/index.tsx similarity index 92% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/ActionButton/index.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/ActionButton/index.tsx index 00bca7d21b7..4b8c0f68076 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/ActionButton/index.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/ActionButton/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { RUN_STATUS_STOP_REQUESTED } from '@opentrons/api-client' import { @@ -14,14 +14,16 @@ import { useHoverTooltip, } from '@opentrons/components' +import { useRobot } from '/app/redux-resources/robots' +import { useRobotAnalyticsData } from '/app/redux-resources/analytics' import { - useModuleCalibrationStatus, + useCloseCurrentRun, + useCurrentRunId, + useProtocolDetailsForRun, useRunCalibrationStatus, useUnmatchedModulesForProtocol, -} from '../../../../hooks' -import { useRobot } from '/app/redux-resources/robots' -import { useRobotAnalyticsData } from '/app/redux-resources/analytics' -import { useCurrentRunId, useProtocolDetailsForRun } from '/app/resources/runs' + useModuleCalibrationStatus, +} from '/app/resources/runs' import { useActionBtnDisabledUtils, useActionButtonProperties } from './hooks' import { getFallbackRobotSerialNumber, isRunAgainStatus } from '../../utils' import { useIsRobotOnWrongVersionOfSoftware } from '/app/redux/robot-update' @@ -71,6 +73,7 @@ export function ActionButton(props: ActionButtonProps): JSX.Element { const isOtherRunCurrent = currentRunId != null && currentRunId !== runId const isProtocolNotReady = protocolData == null || !!isProtocolAnalyzing const isValidRunAgain = isRunAgainStatus(runStatus) + const { isClosingCurrentRun } = useCloseCurrentRun() const { isDisabled, disabledReason } = useActionBtnDisabledUtils({ isCurrentRun, @@ -79,6 +82,7 @@ export function ActionButton(props: ActionButtonProps): JSX.Element { isProtocolNotReady, isRobotOnWrongVersionOfSoftware, isValidRunAgain, + isClosingCurrentRun, ...props, }) @@ -102,6 +106,7 @@ export function ActionButton(props: ActionButtonProps): JSX.Element { isValidRunAgain, isOtherRunCurrent, isRobotOnWrongVersionOfSoftware, + isClosingCurrentRun, ...props, }) @@ -126,7 +131,8 @@ export function ActionButton(props: ActionButtonProps): JSX.Element { spin={ isProtocolNotReady || runStatus === RUN_STATUS_STOP_REQUESTED || - isResetRunLoadingRef.current + isResetRunLoadingRef.current || + isClosingCurrentRun } /> ) : null} diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/LabeledValue.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/LabeledValue.tsx similarity index 94% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/LabeledValue.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/LabeledValue.tsx index 0d839adbc93..135dd72bbae 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/LabeledValue.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/LabeledValue.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { DIRECTION_COLUMN, diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/RunHeaderSectionLower.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/RunHeaderSectionLower.tsx similarity index 93% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/RunHeaderSectionLower.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/RunHeaderSectionLower.tsx index 9c8168c7f11..d7757cd4fe9 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/RunHeaderSectionLower.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/RunHeaderSectionLower.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { css } from 'styled-components' @@ -14,8 +13,8 @@ import { } from '@opentrons/components' import { RUN_STATUS_RUNNING } from '@opentrons/api-client' -import { formatTimestamp } from '../../../utils' -import { useRunControls } from '../../../../RunTimeControl/hooks' +import { formatTimestamp } from '/app/transformations/runs' +import { useRunControls } from '/app/organisms/RunTimeControl/hooks' import { EMPTY_TIMESTAMP, useRunTimestamps, diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/RunHeaderSectionUpper.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/RunHeaderSectionUpper.tsx similarity index 88% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/RunHeaderSectionUpper.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/RunHeaderSectionUpper.tsx index df397d937d1..ecbee666819 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/RunHeaderSectionUpper.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/RunHeaderSectionUpper.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { css } from 'styled-components' @@ -11,10 +10,9 @@ import { import { LabeledValue } from './LabeledValue' import { DisplayRunStatus } from '../DisplayRunStatus' -import { RunTimer } from '../../RunTimer' +import { RunTimer } from '/app/molecules/RunTimer' import { ActionButton } from './ActionButton' -import { useRunCreatedAtTimestamp } from '../../../hooks' -import { useRunTimestamps } from '/app/resources/runs' +import { useRunTimestamps, useRunCreatedAtTimestamp } from '/app/resources/runs' import type { RunHeaderContentProps } from '.' diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/index.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/index.tsx similarity index 89% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/index.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/index.tsx index bb5f1779ea3..51908e4435d 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/index.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderContent/index.tsx @@ -1,11 +1,11 @@ -import * as React from 'react' +import type * as React from 'react' import { RunHeaderSectionUpper } from './RunHeaderSectionUpper' import { RunHeaderSectionLower } from './RunHeaderSectionLower' import type { ProtocolRunHeaderProps } from '..' import type { AttachedModule, RunStatus } from '@opentrons/api-client' -import type { RunControls } from '../../../../RunTimeControl/hooks' +import type { RunControls } from '/app/organisms/RunTimeControl' import type { UseRunHeaderModalContainerResult } from '../RunHeaderModalContainer' export type RunHeaderContentProps = ProtocolRunHeaderProps & { diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/RunHeaderModalContainer.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/RunHeaderModalContainer.tsx similarity index 86% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/RunHeaderModalContainer.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/RunHeaderModalContainer.tsx index 57d85a7e5c4..3be4f607208 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/RunHeaderModalContainer.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/RunHeaderModalContainer.tsx @@ -1,8 +1,6 @@ -import * as React from 'react' - -import { ErrorRecoveryFlows } from '../../../../ErrorRecoveryFlows' -import { DropTipWizardFlows } from '../../../../DropTipWizardFlows' -import { useMostRecentCompletedAnalysis } from '../../../../LabwarePositionCheck/useMostRecentCompletedAnalysis' +import { ErrorRecoveryFlows } from '/app/organisms/ErrorRecoveryFlows' +import { DropTipWizardFlows } from '/app/organisms/DropTipWizardFlows' +import { useMostRecentCompletedAnalysis } from '/app/resources/runs' import { ConfirmCancelModal, HeaterShakerIsRunningModal, @@ -11,10 +9,10 @@ import { RunFailedModal, ConfirmMissingStepsModal, } from './modals' -import { ConfirmAttachmentModal } from '../../../../ModuleCard/ConfirmAttachmentModal' +import { ConfirmAttachmentModal } from '/app/organisms/ModuleCard/ConfirmAttachmentModal' import type { RunStatus } from '@opentrons/api-client' -import type { RunControls } from '../../../../RunTimeControl/hooks' +import type { RunControls } from '/app/organisms/RunTimeControl' import type { UseRunErrorsResult } from '../hooks' import type { UseRunHeaderModalContainerResult } from '.' diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/hooks/index.ts b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/hooks/index.ts similarity index 100% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/hooks/index.ts rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/hooks/index.ts diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/hooks/useHeaterShakerConfirmationModal.ts b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/hooks/useHeaterShakerConfirmationModal.ts similarity index 95% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/hooks/useHeaterShakerConfirmationModal.ts rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/hooks/useHeaterShakerConfirmationModal.ts index 8939e734087..d8b001f3638 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/hooks/useHeaterShakerConfirmationModal.ts +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/hooks/useHeaterShakerConfirmationModal.ts @@ -5,7 +5,7 @@ import { useConditionalConfirm } from '@opentrons/components' import { getIsHeaterShakerAttached } from '/app/redux/config' import type { UseConditionalConfirmResult } from '@opentrons/components' -import type { ConfirmAttachmentModalProps } from '../../../../../ModuleCard/ConfirmAttachmentModal' +import type { ConfirmAttachmentModalProps } from '/app/organisms/ModuleCard/ConfirmAttachmentModal' export type UseHeaterShakerConfirmationModalResult = | { diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/hooks/useMissingStepsModal.ts b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/hooks/useMissingStepsModal.ts similarity index 96% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/hooks/useMissingStepsModal.ts rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/hooks/useMissingStepsModal.ts index a5d91e472ba..4bf28bc049f 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/hooks/useMissingStepsModal.ts +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/hooks/useMissingStepsModal.ts @@ -1,7 +1,7 @@ import { RUN_STATUS_IDLE, RUN_STATUS_STOPPED } from '@opentrons/api-client' import { useConditionalConfirm } from '@opentrons/components' -import { useIsHeaterShakerInProtocol } from '../../../../../ModuleCard/hooks' +import { useIsHeaterShakerInProtocol } from '/app/organisms/ModuleCard/hooks' import { isAnyHeaterShakerShaking } from '../modals' import type { UseConditionalConfirmResult } from '@opentrons/components' diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/hooks/useRunHeaderDropTip.ts b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/hooks/useRunHeaderDropTip.ts similarity index 96% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/hooks/useRunHeaderDropTip.ts rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/hooks/useRunHeaderDropTip.ts index 77f9c35ce8f..d30dc6af145 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/hooks/useRunHeaderDropTip.ts +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/hooks/useRunHeaderDropTip.ts @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useEffect } from 'react' import { useHost } from '@opentrons/react-api-client' import { RUN_STATUS_IDLE, RUN_STATUS_STOPPED } from '@opentrons/api-client' @@ -7,7 +7,7 @@ import { FLEX_ROBOT_TYPE, OT2_ROBOT_TYPE } from '@opentrons/shared-data' import { useDropTipWizardFlows, useTipAttachmentStatus, -} from '../../../../../DropTipWizardFlows' +} from '/app/organisms/DropTipWizardFlows' import { useProtocolDropTipModal } from '../modals' import { useCloseCurrentRun, useIsRunCurrent } from '/app/resources/runs' import { isTerminalRunStatus } from '../../utils' @@ -17,7 +17,7 @@ import type { Run, RunStatus } from '@opentrons/api-client' import type { DropTipWizardFlowsProps, PipetteWithTip, -} from '../../../../../DropTipWizardFlows' +} from '/app/organisms/DropTipWizardFlows' import type { UseProtocolDropTipModalResult } from '../modals' import type { PipetteDetails } from '/app/resources/maintenance_runs' @@ -103,7 +103,7 @@ export function useRunHeaderDropTip({ } // Manage tip checking - React.useEffect(() => { + useEffect(() => { // If a user begins a new run without navigating away from the run page, reset tip status. if (robotType === FLEX_ROBOT_TYPE) { if (runStatus === RUN_STATUS_IDLE) { @@ -122,7 +122,7 @@ export function useRunHeaderDropTip({ // If the run terminates with a "stopped" status, close the run if no tips are attached after running tip check at least once. // This marks the robot as "not busy" if drop tip CTAs are unnecessary. - React.useEffect(() => { + useEffect(() => { if ( runStatus === RUN_STATUS_STOPPED && isRunCurrent && diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/index.ts b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/index.ts similarity index 100% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/index.ts rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/index.ts diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/ConfirmCancelModal.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/ConfirmCancelModal.tsx similarity index 100% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/ConfirmCancelModal.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/ConfirmCancelModal.tsx diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/ConfirmMissingStepsModal.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/ConfirmMissingStepsModal.tsx similarity index 98% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/ConfirmMissingStepsModal.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/ConfirmMissingStepsModal.tsx index 708f07b3789..978efdbab48 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/ConfirmMissingStepsModal.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/ConfirmMissingStepsModal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { ALIGN_CENTER, diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/HeaterShakerIsRunningModal.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/HeaterShakerIsRunningModal.tsx similarity index 94% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/HeaterShakerIsRunningModal.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/HeaterShakerIsRunningModal.tsx index ff69b0f9102..696014ac8bc 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/HeaterShakerIsRunningModal.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/HeaterShakerIsRunningModal.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { useTranslation } from 'react-i18next' import { useCreateLiveCommandMutation } from '@opentrons/react-api-client' @@ -18,10 +18,10 @@ import { } from '@opentrons/components' import { HEATERSHAKER_MODULE_TYPE } from '@opentrons/shared-data' -import { useAttachedModules } from '../../../../../hooks' +import { useAttachedModules } from '/app/resources/modules' import { HeaterShakerModuleCard } from './HeaterShakerModuleCard' import { getActiveHeaterShaker } from './utils' -import { useIsHeaterShakerInProtocol } from '../../../../../../ModuleCard/hooks' +import { useIsHeaterShakerInProtocol } from '/app/organisms/ModuleCard/hooks' import type { HeaterShakerDeactivateShakerCreateCommand } from '@opentrons/shared-data' import type { AttachedModule } from '@opentrons/api-client' @@ -34,7 +34,7 @@ export type UseHeaterShakerIsRunningModalResult = export function useHeaterShakerIsRunningModal( attachedModules: AttachedModule[] ): UseHeaterShakerIsRunningModalResult { - const [showIsShakingModal, setShowIsShakingModal] = React.useState(false) + const [showIsShakingModal, setShowIsShakingModal] = useState(false) const activeHeaterShaker = getActiveHeaterShaker(attachedModules) const isHeaterShakerInProtocol = useIsHeaterShakerInProtocol() diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/HeaterShakerModuleCard.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/HeaterShakerModuleCard.tsx similarity index 94% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/HeaterShakerModuleCard.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/HeaterShakerModuleCard.tsx index 8e2305926c6..a0ae29ff7ec 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/HeaterShakerModuleCard.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/HeaterShakerModuleCard.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { @@ -16,7 +15,7 @@ import { import { getModuleDisplayName } from '@opentrons/shared-data' import heaterShakerModule from '/app/assets/images/heater_shaker_module_transparent.png' -import { HeaterShakerModuleData } from '../../../../../../ModuleCard/HeaterShakerModuleData' +import { HeaterShakerModuleData } from '/app/organisms/ModuleCard/HeaterShakerModuleData' import type { HeaterShakerModule } from '/app/redux/modules/types' diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/__tests__/HeaterShakerIsRunningModal.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/__tests__/HeaterShakerIsRunningModal.test.tsx similarity index 94% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/__tests__/HeaterShakerIsRunningModal.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/__tests__/HeaterShakerIsRunningModal.test.tsx index bcda9d52c3a..03b59af1b57 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/__tests__/HeaterShakerIsRunningModal.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/__tests__/HeaterShakerIsRunningModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, vi, beforeEach, expect } from 'vitest' @@ -9,8 +9,8 @@ import { renderWithProviders } from '/app/__testing-utils__' import { mockHeaterShaker } from '/app/redux/modules/__fixtures__' import { HeaterShakerIsRunningModal } from '../HeaterShakerIsRunningModal' import { HeaterShakerModuleCard } from '../HeaterShakerModuleCard' -import { useAttachedModules } from '../../../../../../hooks' -import { useMostRecentCompletedAnalysis } from '../../../../../../../LabwarePositionCheck/useMostRecentCompletedAnalysis' +import { useAttachedModules } from '/app/resources/modules' +import { useMostRecentCompletedAnalysis } from '/app/resources/runs' import type * as ReactApiClient from '@opentrons/react-api-client' @@ -21,10 +21,8 @@ vi.mock('@opentrons/react-api-client', async importOriginal => { useCreateLiveCommandMutation: vi.fn(), } }) -vi.mock('../../../../../../hooks') -vi.mock( - '../../../../../../../LabwarePositionCheck/useMostRecentCompletedAnalysis' -) +vi.mock('/app/resources/modules') +vi.mock('/app/resources/runs') vi.mock('../HeaterShakerModuleCard') const mockMovingHeaterShakerOne = { diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/__tests__/HeaterShakerModuleCard.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/__tests__/HeaterShakerModuleCard.test.tsx similarity index 85% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/__tests__/HeaterShakerModuleCard.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/__tests__/HeaterShakerModuleCard.test.tsx index b3ca63fb0c8..4cd20822890 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/__tests__/HeaterShakerModuleCard.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/__tests__/HeaterShakerModuleCard.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { screen } from '@testing-library/react' import { describe, it, vi, beforeEach } from 'vitest' @@ -6,9 +6,9 @@ import { renderWithProviders } from '/app/__testing-utils__' import { mockHeaterShaker } from '/app/redux/modules/__fixtures__' import { i18n } from '/app/i18n' import { HeaterShakerModuleCard } from '../HeaterShakerModuleCard' -import { HeaterShakerModuleData } from '../../../../../../../ModuleCard/HeaterShakerModuleData' +import { HeaterShakerModuleData } from '/app/organisms/ModuleCard/HeaterShakerModuleData' -vi.mock('../../../../../../../ModuleCard/HeaterShakerModuleData') +vi.mock('/app/organisms/ModuleCard/HeaterShakerModuleData') const render = (props: React.ComponentProps) => { return renderWithProviders(, { diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/__tests__/hooks.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/__tests__/hooks.test.tsx similarity index 94% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/__tests__/hooks.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/__tests__/hooks.test.tsx index 75941043fd3..c5028c6a821 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/__tests__/hooks.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/__tests__/hooks.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { Provider } from 'react-redux' import { describe, it, vi, beforeEach, expect } from 'vitest' import { createStore } from 'redux' @@ -7,15 +7,13 @@ import { renderHook } from '@testing-library/react' import { HEATERSHAKER_MODULE_V1 } from '@opentrons/shared-data' import { RUN_ID_1 } from '/app/resources/runs/__fixtures__' -import { useMostRecentCompletedAnalysis } from '../../../../../../../LabwarePositionCheck/useMostRecentCompletedAnalysis' +import { useMostRecentCompletedAnalysis } from '/app/resources/runs' import { useHeaterShakerModuleIdsFromRun } from '../hooks' import type { Store } from 'redux' import type { State } from '/app/redux/types' -vi.mock( - '../../../../../../../LabwarePositionCheck/useMostRecentCompletedAnalysis' -) +vi.mock('/app/resources/runs') describe('useHeaterShakerModuleIdsFromRun', () => { const store: Store = createStore(vi.fn(), {}) diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/hooks.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/hooks.tsx similarity index 82% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/hooks.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/hooks.tsx index 680077a1aa6..903327c8834 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/hooks.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/hooks.tsx @@ -1,4 +1,4 @@ -import { useMostRecentCompletedAnalysis } from '../../../../../../LabwarePositionCheck/useMostRecentCompletedAnalysis' +import { useMostRecentCompletedAnalysis } from '/app/resources/runs' export interface ModuleIdsFromRun { moduleIdsFromRun: string[] diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/index.ts b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/index.ts similarity index 100% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/index.ts rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/index.ts diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/utils.ts b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/utils.ts similarity index 100% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/utils.ts rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/HeaterShakerIsRunningModal/utils.ts diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/ProtocolAnalysisErrorModal.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/ProtocolAnalysisErrorModal.tsx similarity index 92% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/ProtocolAnalysisErrorModal.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/ProtocolAnalysisErrorModal.tsx index fbf911f229d..5a19c099a34 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/ProtocolAnalysisErrorModal.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/ProtocolAnalysisErrorModal.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, useEffect } from 'react' import { createPortal } from 'react-dom' import { useTranslation } from 'react-i18next' @@ -13,8 +13,8 @@ import { TYPOGRAPHY, } from '@opentrons/components' -import { getTopPortalEl } from '../../../../../../App/portal' -import { useProtocolAnalysisErrors } from '../../../../hooks' +import { getTopPortalEl } from '/app/App/portal' +import { useProtocolAnalysisErrors } from '/app/resources/runs' import type { AnalysisError } from '@opentrons/shared-data' @@ -34,9 +34,9 @@ export function useProtocolAnalysisErrorsModal({ runId, }: UseAnalysisErrorsModalProps): UseAnalysisErrorsModalResult { const { analysisErrors } = useProtocolAnalysisErrors(runId) - const [showModal, setShowModal] = React.useState(false) + const [showModal, setShowModal] = useState(false) - React.useEffect(() => { + useEffect(() => { if (analysisErrors != null && analysisErrors?.length > 0) { setShowModal(true) } diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/ProtocolDropTipModal.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/ProtocolDropTipModal.tsx similarity index 94% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/ProtocolDropTipModal.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/ProtocolDropTipModal.tsx index b4bad8d9c8d..7c4f9c3820e 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/ProtocolDropTipModal.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/ProtocolDropTipModal.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, useEffect } from 'react' import { Trans, useTranslation } from 'react-i18next' import { css } from 'styled-components' @@ -16,14 +16,14 @@ import { } from '@opentrons/components' import { TextOnlyButton } from '/app/atoms/buttons' -import { useHomePipettes } from '../../../../../DropTipWizardFlows' +import { useHomePipettes } from '/app/organisms/DropTipWizardFlows' import type { PipetteData } from '@opentrons/api-client' import type { IconProps } from '@opentrons/components' import type { UseHomePipettesProps, TipAttachmentStatusResult, -} from '../../../../../DropTipWizardFlows' +} from '/app/organisms/DropTipWizardFlows' type UseProtocolDropTipModalProps = Pick< UseHomePipettesProps, @@ -52,7 +52,7 @@ export function useProtocolDropTipModal({ onSkipAndHome, pipetteInfo, }: UseProtocolDropTipModalProps): UseProtocolDropTipModalResult { - const [showModal, setShowModal] = React.useState(areTipsAttached) + const [showModal, setShowModal] = useState(areTipsAttached) const { homePipettes, isHoming } = useHomePipettes({ pipetteInfo, @@ -62,7 +62,7 @@ export function useProtocolDropTipModal({ }) // Close the modal if a different app closes the run context. - React.useEffect(() => { + useEffect(() => { if (isRunCurrent && !isHoming) { setShowModal(areTipsAttached) } else if (!isRunCurrent) { diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/RunFailedModal.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/RunFailedModal.tsx similarity index 100% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/RunFailedModal.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/RunFailedModal.tsx diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/__fixtures__/analysis.json b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/__fixtures__/analysis.json similarity index 100% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/__fixtures__/analysis.json rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/__fixtures__/analysis.json diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/__fixtures__/runRecord.json b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/__fixtures__/runRecord.json similarity index 100% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/__fixtures__/runRecord.json rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/__fixtures__/runRecord.json diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/__tests__/ConfirmCancelModal.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/__tests__/ConfirmCancelModal.test.tsx similarity index 99% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/__tests__/ConfirmCancelModal.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/__tests__/ConfirmCancelModal.test.tsx index c12f6a150cf..c6421040e17 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/__tests__/ConfirmCancelModal.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/__tests__/ConfirmCancelModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { when } from 'vitest-when' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest' diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/__tests__/ProtocolAnalysisErrorModal.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/__tests__/ProtocolAnalysisErrorModal.test.tsx similarity index 97% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/__tests__/ProtocolAnalysisErrorModal.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/__tests__/ProtocolAnalysisErrorModal.test.tsx index 06d462abd1a..44fcb0278ad 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/__tests__/ProtocolAnalysisErrorModal.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/__tests__/ProtocolAnalysisErrorModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, beforeEach, expect, vi } from 'vitest' diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/__tests__/ProtocolDropTipModal.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/__tests__/ProtocolDropTipModal.test.tsx similarity index 96% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/__tests__/ProtocolDropTipModal.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/__tests__/ProtocolDropTipModal.test.tsx index 613b888a27b..8fb21ec5027 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/__tests__/ProtocolDropTipModal.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/__tests__/ProtocolDropTipModal.test.tsx @@ -1,10 +1,10 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, vi, expect, beforeEach } from 'vitest' import { renderHook, act, screen, fireEvent } from '@testing-library/react' import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' -import { useHomePipettes } from '../../../../../../DropTipWizardFlows' +import { useHomePipettes } from '/app/organisms/DropTipWizardFlows' import { useProtocolDropTipModal, ProtocolDropTipModal, @@ -12,7 +12,7 @@ import { import type { Mock } from 'vitest' -vi.mock('../../../../../../DropTipWizardFlows') +vi.mock('/app/organisms/DropTipWizardFlows') describe('useProtocolDropTipModal', () => { let props: Parameters[0] diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/__tests__/RunFailedModal.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/__tests__/RunFailedModal.test.tsx similarity index 98% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/__tests__/RunFailedModal.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/__tests__/RunFailedModal.test.tsx index 8664ce55b85..d49875a0859 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/__tests__/RunFailedModal.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/__tests__/RunFailedModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, beforeEach, vi, expect, afterEach } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/index.ts b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/index.ts similarity index 100% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/index.ts rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/modals/index.ts diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/useRunHeaderModalContainer.ts b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/useRunHeaderModalContainer.ts similarity index 94% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/useRunHeaderModalContainer.ts rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/useRunHeaderModalContainer.ts index 8cc270b9061..17d81c1f18e 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/useRunHeaderModalContainer.ts +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/useRunHeaderModalContainer.ts @@ -11,7 +11,7 @@ import { useMissingStepsModal, useRunHeaderDropTip, } from './hooks' -import { useErrorRecoveryFlows } from '../../../../ErrorRecoveryFlows' +import { useErrorRecoveryFlows } from '/app/organisms/ErrorRecoveryFlows' import { useProtocolDetailsForRun } from '/app/resources/runs' import { getFallbackRobotSerialNumber } from '../utils' import { @@ -20,7 +20,7 @@ import { } from '/app/redux/analytics' import { useRobot, useRobotType } from '/app/redux-resources/robots' import type { AttachedModule, RunStatus, Run } from '@opentrons/api-client' -import type { UseErrorRecoveryResult } from '../../../../ErrorRecoveryFlows' +import type { UseErrorRecoveryResult } from '/app/organisms/ErrorRecoveryFlows' import type { UseRunHeaderDropTipResult, UseMissingStepsModalResult, @@ -33,7 +33,7 @@ import type { UseRunFailedModalResult, } from './modals' import type { ProtocolRunHeaderProps } from '..' -import type { RunControls } from '../../../../RunTimeControl/hooks' +import type { RunControls } from '/app/organisms/RunTimeControl' import type { UseRunErrorsResult } from '../hooks' interface UseRunHeaderModalContainerProps extends ProtocolRunHeaderProps { diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderProtocolName.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderProtocolName.tsx similarity index 96% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderProtocolName.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderProtocolName.tsx index 9e3addadbc2..f08a157bba9 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderProtocolName.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/RunHeaderProtocolName.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { Link } from 'react-router-dom' import { diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/__tests__/ProtocolRunHeader.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/__tests__/ProtocolRunHeader.test.tsx similarity index 98% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/__tests__/ProtocolRunHeader.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/__tests__/ProtocolRunHeader.test.tsx index e06718390c6..9cc357d0565 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/__tests__/ProtocolRunHeader.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/__tests__/ProtocolRunHeader.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, vi, expect, beforeEach, afterEach } from 'vitest' import { screen } from '@testing-library/react' import { useNavigate } from 'react-router-dom' @@ -9,7 +9,7 @@ import { useModulesQuery } from '@opentrons/react-api-client' import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' import { ProtocolRunHeader } from '..' -import { useIsRobotViewable } from '../../../hooks' +import { useIsRobotViewable } from '/app/redux-resources/robots' import { useRunStatus, useProtocolDetailsForRun, @@ -29,7 +29,6 @@ import { vi.mock('react-router-dom') vi.mock('@opentrons/react-api-client') vi.mock('/app/redux-resources/robots') -vi.mock('../../../hooks') vi.mock('/app/resources/runs') vi.mock('../RunHeaderModalContainer') vi.mock('../RunHeaderBannerContainer') diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/constants.ts b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/constants.ts similarity index 100% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/constants.ts rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/constants.ts diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/hooks/index.ts b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/hooks/index.ts similarity index 100% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/hooks/index.ts rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/hooks/index.ts diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/hooks/useIsDoorOpen.ts b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/hooks/useIsDoorOpen.ts similarity index 100% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/hooks/useIsDoorOpen.ts rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/hooks/useIsDoorOpen.ts diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/hooks/useRunAnalytics.ts b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/hooks/useRunAnalytics.ts similarity index 94% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/hooks/useRunAnalytics.ts rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/hooks/useRunAnalytics.ts index 896f432336c..31399cbc541 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/hooks/useRunAnalytics.ts +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/hooks/useRunAnalytics.ts @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useEffect } from 'react' import { useRobotAnalyticsData, useTrackProtocolRunEvent, @@ -26,7 +26,7 @@ export function useRunAnalytics({ const runStatus = useRunStatus(runId) const isRunCurrent = useIsRunCurrent(runId) - React.useEffect(() => { + useEffect(() => { const areReportConditionsValid = isRunCurrent && runId != null && @@ -42,7 +42,7 @@ export function useRunAnalytics({ }, [runStatus, isRunCurrent, runId, robotAnalyticsData]) const { reportRecoveredRunResult } = useRecoveryAnalytics() - React.useEffect(() => { + useEffect(() => { if (isRunCurrent) { reportRecoveredRunResult(runStatus, enteredER) } diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/hooks/useRunErrors.ts b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/hooks/useRunErrors.ts similarity index 90% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/hooks/useRunErrors.ts rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/hooks/useRunErrors.ts index 302f23f0a1e..4d66b367a0e 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/hooks/useRunErrors.ts +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/hooks/useRunErrors.ts @@ -1,8 +1,8 @@ import { useRunCommandErrors } from '@opentrons/react-api-client' import { isTerminalRunStatus } from '../utils' -import { useMostRecentRunId } from '/app/resources/runs/useMostRecentRunId' -import { getHighestPriorityError } from '../../../../ODD/RunningProtocol' +import { useMostRecentRunId } from '/app/resources/runs' +import { getHighestPriorityError } from '/app/transformations/runs' import type { RunStatus, Run } from '@opentrons/api-client' import type { RunCommandError } from '@opentrons/shared-data' diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/hooks/useRunHeaderRunControls.ts b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/hooks/useRunHeaderRunControls.ts similarity index 80% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/hooks/useRunHeaderRunControls.ts rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/hooks/useRunHeaderRunControls.ts index dd8bdd916c3..1b5c76c644f 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/hooks/useRunHeaderRunControls.ts +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/hooks/useRunHeaderRunControls.ts @@ -1,8 +1,8 @@ import { useNavigate } from 'react-router-dom' -import { useRunControls } from '../../../../RunTimeControl/hooks' +import { useRunControls } from '/app/organisms/RunTimeControl' import type { Run } from '@opentrons/api-client' -import type { RunControls } from '../../../../RunTimeControl/hooks' +import type { RunControls } from '/app/organisms/RunTimeControl' // Provides desktop run controls, routing the user to the run preview tab after a "run again" action. export function useRunHeaderRunControls( diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/index.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/index.tsx similarity index 98% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/index.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/index.tsx index 9de0be2702b..b9641fcc96b 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/index.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/index.tsx @@ -12,7 +12,7 @@ import { import { useModulesQuery } from '@opentrons/react-api-client' import { RUN_STATUS_IDLE, RUN_STATUS_RUNNING } from '@opentrons/api-client' -import { useIsRobotViewable } from '../../hooks' +import { useIsRobotViewable } from '/app/redux-resources/robots' import { RunProgressMeter } from '../../../RunProgressMeter' import { useNotifyRunQuery, diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/utils.ts b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/utils.ts similarity index 100% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunHeader/utils.ts rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader/utils.ts diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunModuleControls.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunModuleControls.tsx similarity index 96% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunModuleControls.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunModuleControls.tsx index 1ed25b251c4..c92251cfea1 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunModuleControls.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunModuleControls.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useInstrumentsQuery } from '@opentrons/react-api-client' import { useTranslation } from 'react-i18next' import { @@ -9,9 +8,9 @@ import { InfoScreen, SPACING, } from '@opentrons/components' -import { ModuleCard } from '../../ModuleCard' -import { useModuleRenderInfoForProtocolById } from '../hooks' -import { useModuleApiRequests } from '../../ModuleCard/utils' +import { ModuleCard } from '/app/organisms/ModuleCard' +import { useModuleRenderInfoForProtocolById } from '/app/resources/runs' +import { useModuleApiRequests } from '/app/organisms/ModuleCard/utils' import type { BadPipette, PipetteData } from '@opentrons/api-client' diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunRunTimeParameters.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunRunTimeParameters.tsx similarity index 97% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunRunTimeParameters.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunRunTimeParameters.tsx index f5fc97c22e2..a284b044283 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunRunTimeParameters.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunRunTimeParameters.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import styled, { css } from 'styled-components' @@ -13,6 +12,7 @@ import { } from '@opentrons/shared-data' import { ALIGN_CENTER, + Banner, BORDERS, Chip, COLORS, @@ -31,10 +31,12 @@ import { useHoverTooltip, } from '@opentrons/components' -import { Banner } from '/app/atoms/Banner' import { Divider } from '/app/atoms/structure' -import { useMostRecentCompletedAnalysis } from '../../LabwarePositionCheck/useMostRecentCompletedAnalysis' -import { useNotifyRunQuery, useRunStatus } from '/app/resources/runs' +import { + useMostRecentCompletedAnalysis, + useNotifyRunQuery, + useRunStatus, +} from '/app/resources/runs' import type { RunTimeParameter } from '@opentrons/shared-data' import type { RunStatus } from '@opentrons/api-client' diff --git a/app/src/organisms/Devices/ProtocolRun/ProtocolRunSetup.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunSetup.tsx similarity index 98% rename from app/src/organisms/Devices/ProtocolRun/ProtocolRunSetup.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunSetup.tsx index e216298f07a..0f48d0bb833 100644 --- a/app/src/organisms/Devices/ProtocolRun/ProtocolRunSetup.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/ProtocolRunSetup.tsx @@ -32,14 +32,14 @@ import { useDeckConfigurationCompatibility } from '/app/resources/deck_configura import { useRobot, useIsFlex } from '/app/redux-resources/robots' import { useStoredProtocolAnalysis } from '/app/resources/analysis' import { - useModuleCalibrationStatus, - useProtocolAnalysisErrors, + useMostRecentCompletedAnalysis, + useRunPipetteInfoByMount, useRunCalibrationStatus, useRunHasStarted, - useRunPipetteInfoByMount, useUnmatchedModulesForProtocol, -} from '../hooks' -import { useMostRecentCompletedAnalysis } from '../../LabwarePositionCheck/useMostRecentCompletedAnalysis' + useModuleCalibrationStatus, + useProtocolAnalysisErrors, +} from '/app/resources/runs' import { SetupLabware } from './SetupLabware' import { SetupLabwarePositionCheck } from './SetupLabwarePositionCheck' import { SetupRobotCalibration } from './SetupRobotCalibration' @@ -184,8 +184,13 @@ export function ProtocolRunSetup({ setLabwareSetupComplete, ] = React.useState(false) const [liquidSetupComplete, setLiquidSetupComplete] = React.useState( - !hasLiquids + false ) + React.useEffect(() => { + if ((robotProtocolAnalysis || storedProtocolAnalysis) && !hasLiquids) { + setLiquidSetupComplete(true) + } + }, [robotProtocolAnalysis, storedProtocolAnalysis, hasLiquids]) if ( !hasLiquids && protocolAnalysis != null && diff --git a/app/src/organisms/Devices/ProtocolRun/SetupCalibrationItem.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupCalibrationItem.tsx similarity index 95% rename from app/src/organisms/Devices/ProtocolRun/SetupCalibrationItem.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupCalibrationItem.tsx index 89bec05607c..8ac68de4ff1 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupCalibrationItem.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupCalibrationItem.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { @@ -16,8 +15,8 @@ import { TYPOGRAPHY, } from '@opentrons/components' -import { useRunHasStarted } from '../hooks' -import { formatTimestamp } from '../utils' +import { useRunHasStarted } from '/app/resources/runs' +import { formatTimestamp } from '/app/transformations/runs' interface SetupCalibrationItemProps { calibratedDate: string | null diff --git a/app/src/organisms/Devices/ProtocolRun/SetupDeckCalibration.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupDeckCalibration.tsx similarity index 98% rename from app/src/organisms/Devices/ProtocolRun/SetupDeckCalibration.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupDeckCalibration.tsx index 9b0dd34479f..3ec0a03e72c 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupDeckCalibration.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupDeckCalibration.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { Link } from 'react-router-dom' diff --git a/app/src/organisms/Devices/ProtocolRun/SetupFlexPipetteCalibrationItem.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupFlexPipetteCalibrationItem.tsx similarity index 92% rename from app/src/organisms/Devices/ProtocolRun/SetupFlexPipetteCalibrationItem.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupFlexPipetteCalibrationItem.tsx index fda16d0fa2a..01b6f0303fb 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupFlexPipetteCalibrationItem.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupFlexPipetteCalibrationItem.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { useTranslation } from 'react-i18next' import { Flex, @@ -15,10 +15,10 @@ import { } from '@opentrons/shared-data' import { useInstrumentsQuery } from '@opentrons/react-api-client' import { TertiaryButton } from '/app/atoms/buttons' -import { useMostRecentCompletedAnalysis } from '../../LabwarePositionCheck/useMostRecentCompletedAnalysis' +import { useMostRecentCompletedAnalysis } from '/app/resources/runs' import { useStoredProtocolAnalysis } from '/app/resources/analysis' -import { PipetteWizardFlows } from '../../PipetteWizardFlows' -import { FLOWS } from '../../PipetteWizardFlows/constants' +import { PipetteWizardFlows } from '/app/organisms/PipetteWizardFlows' +import { FLOWS } from '/app/organisms/PipetteWizardFlows/constants' import { SetupCalibrationItem } from './SetupCalibrationItem' import type { PipetteData } from '@opentrons/api-client' import type { LoadPipetteRunTimeCommand } from '@opentrons/shared-data' @@ -36,9 +36,7 @@ export function SetupFlexPipetteCalibrationItem({ instrumentsRefetch, }: SetupInstrumentCalibrationItemProps): JSX.Element | null { const { t } = useTranslation(['protocol_setup', 'devices_landing']) - const [showFlexPipetteFlow, setShowFlexPipetteFlow] = React.useState( - false - ) + const [showFlexPipetteFlow, setShowFlexPipetteFlow] = useState(false) const { data: attachedInstruments } = useInstrumentsQuery() const mostRecentAnalysis = useMostRecentCompletedAnalysis(runId) const storedProtocolAnalysis = useStoredProtocolAnalysis(runId) diff --git a/app/src/organisms/Devices/ProtocolRun/SetupGripperCalibrationItem.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupGripperCalibrationItem.tsx similarity index 88% rename from app/src/organisms/Devices/ProtocolRun/SetupGripperCalibrationItem.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupGripperCalibrationItem.tsx index 3f75520fcff..2a106db20e2 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupGripperCalibrationItem.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupGripperCalibrationItem.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { useTranslation } from 'react-i18next' import { Flex, @@ -11,12 +11,12 @@ import { import { getGripperDisplayName } from '@opentrons/shared-data' import { TertiaryButton } from '/app/atoms/buttons' import { SetupCalibrationItem } from './SetupCalibrationItem' -import { GripperWizardFlows } from '../../GripperWizardFlows' -import { GRIPPER_FLOW_TYPES } from '../../GripperWizardFlows/constants' +import { GripperWizardFlows } from '/app/organisms/GripperWizardFlows' +import { GRIPPER_FLOW_TYPES } from '/app/organisms/GripperWizardFlows/constants' import type { GripperData } from '@opentrons/api-client' import type { GripperModel } from '@opentrons/shared-data' -import type { GripperWizardFlowType } from '../../GripperWizardFlows/types' +import type { GripperWizardFlowType } from '/app/organisms/GripperWizardFlows/types' interface SetupGripperCalibrationItemProps { gripperData: GripperData | null @@ -31,7 +31,7 @@ export function SetupGripperCalibrationItem({ const [ openWizardFlowType, setOpenWizardFlowType, - ] = React.useState(null) + ] = useState(null) const gripperCalLastModified = gripperData != null diff --git a/app/src/organisms/Devices/ProtocolRun/SetupInstrumentCalibration.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupInstrumentCalibration.tsx similarity index 92% rename from app/src/organisms/Devices/ProtocolRun/SetupInstrumentCalibration.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupInstrumentCalibration.tsx index e2ff193bcd9..0ce395e0e46 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupInstrumentCalibration.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupInstrumentCalibration.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { @@ -10,15 +9,17 @@ import { TYPOGRAPHY, } from '@opentrons/components' import * as PipetteConstants from '/app/redux/pipettes/constants' -import { getShowPipetteCalibrationWarning } from '../utils' +import { getShowPipetteCalibrationWarning } from '/app/transformations/instruments' import { PipetteRecalibrationWarning } from '../PipetteCard/PipetteRecalibrationWarning' -import { useRunPipetteInfoByMount } from '../hooks' import { useStoredProtocolAnalysis } from '/app/resources/analysis' import { useIsFlex } from '/app/redux-resources/robots' import { SetupPipetteCalibrationItem } from './SetupPipetteCalibrationItem' import { SetupFlexPipetteCalibrationItem } from './SetupFlexPipetteCalibrationItem' import { SetupGripperCalibrationItem } from './SetupGripperCalibrationItem' -import { useMostRecentCompletedAnalysis } from '../../LabwarePositionCheck/useMostRecentCompletedAnalysis' +import { + useRunPipetteInfoByMount, + useMostRecentCompletedAnalysis, +} from '/app/resources/runs' import { useInstrumentsQuery } from '@opentrons/react-api-client' import { isGripperInCommands } from '/app/resources/protocols/utils' diff --git a/app/src/organisms/Devices/ProtocolRun/SetupLabware/CurrentOffsetsModal.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/CurrentOffsetsModal.tsx similarity index 96% rename from app/src/organisms/Devices/ProtocolRun/SetupLabware/CurrentOffsetsModal.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/CurrentOffsetsModal.tsx index 6af52e06a3c..402c1e56dd1 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupLabware/CurrentOffsetsModal.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/CurrentOffsetsModal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import styled from 'styled-components' import { useTranslation } from 'react-i18next' import { useSelector } from 'react-redux' @@ -21,10 +20,10 @@ import { } from '@opentrons/components' import { getIsLabwareOffsetCodeSnippetsOn } from '/app/redux/config' -import { LabwareOffsetTabs } from '../../../LabwareOffsetTabs' +import { LabwareOffsetTabs } from '/app/organisms/LabwareOffsetTabs' import { OffsetVector } from '/app/molecules/OffsetVector' import { PythonLabwareOffsetSnippet } from '/app/molecules/PythonLabwareOffsetSnippet' -import { getLatestCurrentOffsets } from '../SetupLabwarePositionCheck/utils' +import { getLatestCurrentOffsets } from '/app/transformations/runs' import type { LabwareOffset } from '@opentrons/api-client' import type { diff --git a/app/src/organisms/Devices/ProtocolRun/SetupLabware/LabwareListItem.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/LabwareListItem.tsx similarity index 97% rename from app/src/organisms/Devices/ProtocolRun/SetupLabware/LabwareListItem.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/LabwareListItem.tsx index 0b950e16720..6269be78e83 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupLabware/LabwareListItem.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/LabwareListItem.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { useTranslation } from 'react-i18next' import styled, { css } from 'styled-components' @@ -50,10 +50,12 @@ import type { LoadModuleRunTimeCommand, LoadLabwareRunTimeCommand, } from '@opentrons/shared-data' -import type { ModuleRenderInfoForProtocol } from '../../hooks' -import type { LabwareSetupItem } from '/app/transformations/commands' +import type { ModuleRenderInfoForProtocol } from '/app/resources/runs' +import type { + LabwareSetupItem, + NestedLabwareInfo, +} from '/app/transformations/commands' import type { ModuleTypesThatRequireExtraAttention } from '../utils/getModuleTypesThatRequireExtraAttention' -import type { NestedLabwareInfo } from './getNestedLabwareInfo' const LabwareRow = styled.div` display: ${DISPLAY_GRID}; @@ -95,11 +97,11 @@ export function LabwareListItem( const [ secureLabwareModalType, setSecureLabwareModalType, - ] = React.useState(null) + ] = useState(null) const labwareDisplayName = getLabwareDisplayName(definition) const { createLiveCommand } = useCreateLiveCommandMutation() - const [isLatchLoading, setIsLatchLoading] = React.useState(false) - const [isLatchClosed, setIsLatchClosed] = React.useState(false) + const [isLatchLoading, setIsLatchLoading] = useState(false) + const [isLatchClosed, setIsLatchClosed] = useState(false) let slotInfo: string | null = null diff --git a/app/src/organisms/Devices/ProtocolRun/SetupLabware/OffDeckLabwareList.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/OffDeckLabwareList.tsx similarity index 97% rename from app/src/organisms/Devices/ProtocolRun/SetupLabware/OffDeckLabwareList.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/OffDeckLabwareList.tsx index 9216a1274da..66853d79579 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupLabware/OffDeckLabwareList.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/OffDeckLabwareList.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { SPACING, TYPOGRAPHY, LegacyStyledText } from '@opentrons/components' import { LabwareListItem } from './LabwareListItem' diff --git a/app/src/organisms/Devices/ProtocolRun/SetupLabware/SecureLabwareModal.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/SecureLabwareModal.tsx similarity index 97% rename from app/src/organisms/Devices/ProtocolRun/SetupLabware/SecureLabwareModal.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/SecureLabwareModal.tsx index d9d4ec14388..3ce61fb7f2d 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupLabware/SecureLabwareModal.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/SecureLabwareModal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { createPortal } from 'react-dom' import snakeCase from 'lodash/snakeCase' import { Trans, useTranslation } from 'react-i18next' @@ -14,7 +13,7 @@ import { TYPOGRAPHY, Modal, } from '@opentrons/components' -import { getTopPortalEl } from '../../../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import secureMagModBracketImage from '/app/assets/images/secure_mag_mod_bracket.png' import secureTCLatchImage from '/app/assets/images/secure_tc_latch.png' import { getModuleName } from '../utils/getModuleName' diff --git a/app/src/organisms/Devices/ProtocolRun/SetupLabware/SetupLabwareList.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/SetupLabwareList.tsx similarity index 91% rename from app/src/organisms/Devices/ProtocolRun/SetupLabware/SetupLabwareList.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/SetupLabwareList.tsx index 61f836dffd5..647f1543677 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupLabware/SetupLabwareList.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/SetupLabwareList.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { DIRECTION_COLUMN, @@ -7,12 +6,14 @@ import { StyledText, COLORS, } from '@opentrons/components' -import { getLabwareSetupItemGroups } from '/app/transformations/commands' +import { + getLabwareSetupItemGroups, + getNestedLabwareInfo, +} from '/app/transformations/commands' import { LabwareListItem } from './LabwareListItem' -import { getNestedLabwareInfo } from './getNestedLabwareInfo' import type { RunTimeCommand } from '@opentrons/shared-data' -import type { ModuleRenderInfoForProtocol } from '../../hooks' +import type { ModuleRenderInfoForProtocol } from '/app/resources/runs' import type { ModuleTypesThatRequireExtraAttention } from '../utils/getModuleTypesThatRequireExtraAttention' import type { LabwareSetupItem } from '/app/transformations/commands' diff --git a/app/src/organisms/Devices/ProtocolRun/SetupLabware/SetupLabwareMap.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/SetupLabwareMap.tsx similarity index 93% rename from app/src/organisms/Devices/ProtocolRun/SetupLabware/SetupLabwareMap.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/SetupLabwareMap.tsx index feb3b1be340..0334496fd6b 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupLabware/SetupLabwareMap.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/SetupLabwareMap.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import map from 'lodash/map' import { @@ -18,16 +18,18 @@ import { import { getLabwareSetupItemGroups } from '/app/transformations/commands' import { LabwareInfoOverlay } from '../LabwareInfoOverlay' -import { getLabwareRenderInfo } from '../utils/getLabwareRenderInfo' -import { getProtocolModulesInfo } from '../utils/getProtocolModulesInfo' -import { getStandardDeckViewLayerBlockList } from '../utils/getStandardDeckViewLayerBlockList' +import { + getProtocolModulesInfo, + getLabwareRenderInfo, +} from '/app/transformations/analysis' +import { getStandardDeckViewLayerBlockList } from '/app/local-resources/deck_configuration' import { OffDeckLabwareList } from './OffDeckLabwareList' import type { CompletedProtocolAnalysis, ProtocolAnalysisOutput, } from '@opentrons/shared-data' -import { LabwareStackModal } from './LabwareStackModal' +import { LabwareStackModal } from '/app/molecules/LabwareStackModal' interface SetupLabwareMapProps { runId: string @@ -42,10 +44,8 @@ export function SetupLabwareMap({ const [ labwareStackDetailsLabwareId, setLabwareStackDetailsLabwareId, - ] = React.useState(null) - const [hoverLabwareId, setHoverLabwareId] = React.useState( - null - ) + ] = useState(null) + const [hoverLabwareId, setHoverLabwareId] = useState(null) if (protocolAnalysis == null) return null diff --git a/app/src/organisms/Devices/ProtocolRun/SetupLabware/__tests__/LabwareListItem.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/__tests__/LabwareListItem.test.tsx similarity index 98% rename from app/src/organisms/Devices/ProtocolRun/SetupLabware/__tests__/LabwareListItem.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/__tests__/LabwareListItem.test.tsx index 172257ecc8e..904395f7c98 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupLabware/__tests__/LabwareListItem.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/__tests__/LabwareListItem.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, beforeEach, vi, expect } from 'vitest' import { MemoryRouter } from 'react-router-dom' @@ -14,7 +14,7 @@ import { mockTemperatureModule, mockThermocycler, } from '/app/redux/modules/__fixtures__' -import { mockLabwareDef } from '../../../../LabwarePositionCheck/__fixtures__/mockLabwareDef' +import { mockLabwareDef } from '/app/organisms/LabwarePositionCheck/__fixtures__/mockLabwareDef' import { SecureLabwareModal } from '../SecureLabwareModal' import { LabwareListItem } from '../LabwareListItem' import type { @@ -25,7 +25,7 @@ import type { LoadModuleRunTimeCommand, } from '@opentrons/shared-data' import type { AttachedModule } from '/app/redux/modules/types' -import type { ModuleRenderInfoForProtocol } from '../../../hooks' +import type { ModuleRenderInfoForProtocol } from '/app/resources/runs' vi.mock('../SecureLabwareModal') vi.mock('@opentrons/react-api-client') diff --git a/app/src/organisms/Devices/ProtocolRun/SetupLabware/__tests__/OffDeckLabwareList.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/__tests__/OffDeckLabwareList.test.tsx similarity index 91% rename from app/src/organisms/Devices/ProtocolRun/SetupLabware/__tests__/OffDeckLabwareList.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/__tests__/OffDeckLabwareList.test.tsx index 163d7e8871b..7c6c839dbaf 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupLabware/__tests__/OffDeckLabwareList.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/__tests__/OffDeckLabwareList.test.tsx @@ -1,11 +1,11 @@ -import * as React from 'react' +import type * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { screen } from '@testing-library/react' import { describe, it, beforeEach, vi, expect } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' -import { mockLabwareDef } from '../../../../LabwarePositionCheck/__fixtures__/mockLabwareDef' +import { mockLabwareDef } from '/app/organisms/LabwarePositionCheck/__fixtures__/mockLabwareDef' import { LabwareListItem } from '../LabwareListItem' import { OffDeckLabwareList } from '../OffDeckLabwareList' diff --git a/app/src/organisms/Devices/ProtocolRun/SetupLabware/__tests__/SecureLabwareModal.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/__tests__/SecureLabwareModal.test.tsx similarity index 98% rename from app/src/organisms/Devices/ProtocolRun/SetupLabware/__tests__/SecureLabwareModal.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/__tests__/SecureLabwareModal.test.tsx index d346c397d87..80147006dc1 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupLabware/__tests__/SecureLabwareModal.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/__tests__/SecureLabwareModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, beforeEach, vi, expect } from 'vitest' diff --git a/app/src/organisms/Devices/ProtocolRun/SetupLabware/__tests__/SetupLabware.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/__tests__/SetupLabware.test.tsx similarity index 91% rename from app/src/organisms/Devices/ProtocolRun/SetupLabware/__tests__/SetupLabware.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/__tests__/SetupLabware.test.tsx index fee5fe31dae..9aa6b7cee22 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupLabware/__tests__/SetupLabware.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/__tests__/SetupLabware.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { fireEvent, screen } from '@testing-library/react' import { describe, it, beforeEach, vi, afterEach, expect } from 'vitest' @@ -7,27 +6,26 @@ import { when } from 'vitest-when' import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' import { useLPCSuccessToast } from '../../../hooks/useLPCSuccessToast' -import { LabwarePositionCheck } from '../../../../LabwarePositionCheck' +import { LabwarePositionCheck } from '/app/organisms/LabwarePositionCheck' import { getModuleTypesThatRequireExtraAttention } from '../../utils/getModuleTypesThatRequireExtraAttention' import { getIsLabwareOffsetCodeSnippetsOn } from '/app/redux/config' +import { SetupLabwareList } from '../SetupLabwareList' +import { SetupLabwareMap } from '../SetupLabwareMap' +import { SetupLabware } from '..' import { - useLPCDisabledReason, + useNotifyRunQuery, useRunCalibrationStatus, useRunHasStarted, + useLPCDisabledReason, useUnmatchedModulesForProtocol, -} from '../../../hooks' -import { SetupLabwareList } from '../SetupLabwareList' -import { SetupLabwareMap } from '../SetupLabwareMap' -import { SetupLabware } from '..' -import { useNotifyRunQuery } from '/app/resources/runs' +} from '/app/resources/runs' vi.mock('../SetupLabwareList') vi.mock('../SetupLabwareMap') -vi.mock('../../../../LabwarePositionCheck') +vi.mock('/app/organisms/LabwarePositionCheck') vi.mock('../../utils/getModuleTypesThatRequireExtraAttention') -vi.mock('../../../../RunTimeControl/hooks') +vi.mock('/app/organisms/RunTimeControl/hooks') vi.mock('/app/redux/config') -vi.mock('../../../hooks') vi.mock('../../../hooks/useLPCSuccessToast') vi.mock('/app/resources/runs') vi.mock('/app/redux-resources/robots') diff --git a/app/src/organisms/Devices/ProtocolRun/SetupLabware/__tests__/SetupLabwareList.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/__tests__/SetupLabwareList.test.tsx similarity index 97% rename from app/src/organisms/Devices/ProtocolRun/SetupLabware/__tests__/SetupLabwareList.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/__tests__/SetupLabwareList.test.tsx index f1993f5b1ed..85068d39a1b 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupLabware/__tests__/SetupLabwareList.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/__tests__/SetupLabwareList.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { describe, it, beforeEach, vi } from 'vitest' import { screen } from '@testing-library/react' diff --git a/app/src/organisms/Devices/ProtocolRun/SetupLabware/__tests__/SetupLabwareMap.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/__tests__/SetupLabwareMap.test.tsx similarity index 94% rename from app/src/organisms/Devices/ProtocolRun/SetupLabware/__tests__/SetupLabwareMap.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/__tests__/SetupLabwareMap.test.tsx index 288a73b2a6e..40f63cbc170 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupLabware/__tests__/SetupLabwareMap.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/__tests__/SetupLabwareMap.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { when } from 'vitest-when' import { MemoryRouter } from 'react-router-dom' import { describe, it, beforeEach, vi, afterEach, expect } from 'vitest' @@ -13,9 +13,11 @@ import { import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' -import { getAttachedProtocolModuleMatches } from '../../../../ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/utils' import { LabwareInfoOverlay } from '../../LabwareInfoOverlay' -import { getLabwareRenderInfo } from '../../utils/getLabwareRenderInfo' +import { + getLabwareRenderInfo, + getAttachedProtocolModuleMatches, +} from '/app/transformations/analysis' import { SetupLabwareMap } from '../SetupLabwareMap' import type { @@ -40,11 +42,11 @@ vi.mock('@opentrons/shared-data', async importOriginal => { } }) -vi.mock('../../../../ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/utils') vi.mock('../../LabwareInfoOverlay') -vi.mock('../../utils/getLabwareRenderInfo') +vi.mock('/app/transformations/analysis/getLabwareRenderInfo') +vi.mock('/app/transformations/analysis/getAttachedProtocolModuleMatches') vi.mock('../../utils/getModuleTypesThatRequireExtraAttention') -vi.mock('../../../../RunTimeControl/hooks') +vi.mock('/app/organisms/RunTimeControl') vi.mock('../../../hooks') // TODO(jh 03-06-24): We need to rethink this test as we are testing components several layers deep across top-level imports. diff --git a/app/src/organisms/Devices/ProtocolRun/SetupLabware/index.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/index.tsx similarity index 92% rename from app/src/organisms/Devices/ProtocolRun/SetupLabware/index.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/index.tsx index 502d2dd5c8a..38963d79dda 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupLabware/index.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabware/index.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import map from 'lodash/map' import { @@ -10,10 +9,12 @@ import { } from '@opentrons/components' import { useToggleGroup } from '/app/molecules/ToggleGroup/useToggleGroup' import { getModuleTypesThatRequireExtraAttention } from '../utils/getModuleTypesThatRequireExtraAttention' -import { useMostRecentCompletedAnalysis } from '../../../LabwarePositionCheck/useMostRecentCompletedAnalysis' +import { + useMostRecentCompletedAnalysis, + useModuleRenderInfoForProtocolById, +} from '/app/resources/runs' import { useIsFlex } from '/app/redux-resources/robots' import { useStoredProtocolAnalysis } from '/app/resources/analysis' -import { useModuleRenderInfoForProtocolById } from '../../hooks' import { SetupLabwareMap } from './SetupLabwareMap' import { SetupLabwareList } from './SetupLabwareList' diff --git a/app/src/organisms/Devices/ProtocolRun/SetupLabwarePositionCheck/CurrentOffsetsTable.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabwarePositionCheck/CurrentOffsetsTable.tsx similarity index 96% rename from app/src/organisms/Devices/ProtocolRun/SetupLabwarePositionCheck/CurrentOffsetsTable.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabwarePositionCheck/CurrentOffsetsTable.tsx index 6ea34c38386..849464deee4 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupLabwarePositionCheck/CurrentOffsetsTable.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabwarePositionCheck/CurrentOffsetsTable.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import styled from 'styled-components' import { useTranslation } from 'react-i18next' import { useSelector } from 'react-redux' @@ -20,10 +19,10 @@ import { } from '@opentrons/components' import { getIsLabwareOffsetCodeSnippetsOn } from '/app/redux/config' -import { LabwareOffsetTabs } from '../../../LabwareOffsetTabs' +import { LabwareOffsetTabs } from '/app/organisms/LabwareOffsetTabs' import { OffsetVector } from '/app/molecules/OffsetVector' import { PythonLabwareOffsetSnippet } from '/app/molecules/PythonLabwareOffsetSnippet' -import { getDisplayLocation } from '../../../LabwarePositionCheck/utils/getDisplayLocation' +import { getDisplayLocation } from '/app/organisms/LabwarePositionCheck/utils/getDisplayLocation' import { getLabwareDefinitionsFromCommands } from '/app/molecules/Command/utils/getLabwareDefinitionsFromCommands' import type { LabwareOffset } from '@opentrons/api-client' import type { diff --git a/app/src/organisms/Devices/ProtocolRun/SetupLabwarePositionCheck/HowLPCWorksModal.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabwarePositionCheck/HowLPCWorksModal.tsx similarity index 95% rename from app/src/organisms/Devices/ProtocolRun/SetupLabwarePositionCheck/HowLPCWorksModal.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabwarePositionCheck/HowLPCWorksModal.tsx index 55397d219eb..cdc882a38e5 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupLabwarePositionCheck/HowLPCWorksModal.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabwarePositionCheck/HowLPCWorksModal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { createPortal } from 'react-dom' import { useTranslation } from 'react-i18next' import { @@ -13,7 +12,7 @@ import { TYPOGRAPHY, Modal, } from '@opentrons/components' -import { getTopPortalEl } from '../../../../App/portal' +import { getTopPortalEl } from '/app/App/portal' const OFFSET_DATA_HELP_ARTICLE = 'https://support.opentrons.com/s/article/How-Labware-Offsets-work-on-the-OT-2' diff --git a/app/src/organisms/Devices/ProtocolRun/SetupLabwarePositionCheck/__tests__/CurrentOffsetsTable.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabwarePositionCheck/__tests__/CurrentOffsetsTable.test.tsx similarity index 93% rename from app/src/organisms/Devices/ProtocolRun/SetupLabwarePositionCheck/__tests__/CurrentOffsetsTable.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabwarePositionCheck/__tests__/CurrentOffsetsTable.test.tsx index 69e0b7ed44f..622d649bb04 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupLabwarePositionCheck/__tests__/CurrentOffsetsTable.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabwarePositionCheck/__tests__/CurrentOffsetsTable.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, beforeEach, vi, expect, afterEach } from 'vitest' import { screen } from '@testing-library/react' @@ -10,18 +10,18 @@ import { import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' import { getIsLabwareOffsetCodeSnippetsOn } from '/app/redux/config' -import { LabwarePositionCheck } from '../../../../LabwarePositionCheck' -import { useLPCDisabledReason } from '../../../hooks' -import { getLatestCurrentOffsets } from '../utils' +import { LabwarePositionCheck } from '/app/organisms/LabwarePositionCheck' +import { useLPCDisabledReason } from '/app/resources/runs' +import { getLatestCurrentOffsets } from '/app/transformations/runs' import { CurrentOffsetsTable } from '../CurrentOffsetsTable' import type { CompletedProtocolAnalysis } from '@opentrons/shared-data' import type { LabwareOffset } from '@opentrons/api-client' -vi.mock('../../../hooks') -vi.mock('../../../../LabwarePositionCheck') +vi.mock('/app/resources/runs') +vi.mock('/app/organisms/LabwarePositionCheck') vi.mock('/app/redux/config') -vi.mock('../utils') +vi.mock('/app/transformations/runs') vi.mock('@opentrons/shared-data', async importOriginal => { const actual = await importOriginal() diff --git a/app/src/organisms/Devices/ProtocolRun/SetupLabwarePositionCheck/__tests__/HowLPCWorksModal.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabwarePositionCheck/__tests__/HowLPCWorksModal.test.tsx similarity index 98% rename from app/src/organisms/Devices/ProtocolRun/SetupLabwarePositionCheck/__tests__/HowLPCWorksModal.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabwarePositionCheck/__tests__/HowLPCWorksModal.test.tsx index cb9224e132f..5dd3d15db69 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupLabwarePositionCheck/__tests__/HowLPCWorksModal.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabwarePositionCheck/__tests__/HowLPCWorksModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, vi, beforeEach, expect } from 'vitest' diff --git a/app/src/organisms/Devices/ProtocolRun/SetupLabwarePositionCheck/__tests__/SetupLabwarePositionCheck.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabwarePositionCheck/__tests__/SetupLabwarePositionCheck.test.tsx similarity index 94% rename from app/src/organisms/Devices/ProtocolRun/SetupLabwarePositionCheck/__tests__/SetupLabwarePositionCheck.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabwarePositionCheck/__tests__/SetupLabwarePositionCheck.test.tsx index 59b78ba440c..03ec9d990fb 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupLabwarePositionCheck/__tests__/SetupLabwarePositionCheck.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabwarePositionCheck/__tests__/SetupLabwarePositionCheck.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { when } from 'vitest-when' import { MemoryRouter } from 'react-router-dom' import { screen, fireEvent } from '@testing-library/react' @@ -14,25 +13,24 @@ import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' import { useLPCSuccessToast } from '../../../hooks/useLPCSuccessToast' import { getModuleTypesThatRequireExtraAttention } from '../../utils/getModuleTypesThatRequireExtraAttention' -import { useLaunchLPC } from '../../../../LabwarePositionCheck/useLaunchLPC' +import { useLaunchLPC } from '/app/organisms/LabwarePositionCheck/useLaunchLPC' import { getIsLabwareOffsetCodeSnippetsOn } from '/app/redux/config' +import { SetupLabwarePositionCheck } from '..' import { - useLPCDisabledReason, + useNotifyRunQuery, useRunCalibrationStatus, useRunHasStarted, + useLPCDisabledReason, useUnmatchedModulesForProtocol, -} from '../../../hooks' -import { SetupLabwarePositionCheck } from '..' -import { useNotifyRunQuery } from '/app/resources/runs' +} from '/app/resources/runs' import { useRobotType } from '/app/redux-resources/robots' import type { Mock } from 'vitest' -vi.mock('../../../../LabwarePositionCheck/useLaunchLPC') +vi.mock('/app/organisms/LabwarePositionCheck/useLaunchLPC') vi.mock('../../utils/getModuleTypesThatRequireExtraAttention') vi.mock('/app/redux-resources/robots') vi.mock('/app/redux/config') -vi.mock('../../../hooks') vi.mock('../../../hooks/useLPCSuccessToast') vi.mock('@opentrons/react-api-client') vi.mock('/app/resources/runs') diff --git a/app/src/organisms/Devices/ProtocolRun/SetupLabwarePositionCheck/index.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabwarePositionCheck/index.tsx similarity index 93% rename from app/src/organisms/Devices/ProtocolRun/SetupLabwarePositionCheck/index.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabwarePositionCheck/index.tsx index c0813f5b36d..9d2c6223373 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupLabwarePositionCheck/index.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLabwarePositionCheck/index.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { @@ -19,14 +18,16 @@ import { } from '@opentrons/components' import { useProtocolQuery } from '@opentrons/react-api-client' -import { useMostRecentCompletedAnalysis } from '../../../LabwarePositionCheck/useMostRecentCompletedAnalysis' import { useLPCSuccessToast } from '../../hooks/useLPCSuccessToast' -import { useLPCDisabledReason } from '../../hooks' import { useStoredProtocolAnalysis } from '/app/resources/analysis' import { CurrentOffsetsTable } from './CurrentOffsetsTable' -import { useLaunchLPC } from '../../../LabwarePositionCheck/useLaunchLPC' -import { getLatestCurrentOffsets } from './utils' -import { useNotifyRunQuery } from '/app/resources/runs' +import { useLaunchLPC } from '/app/organisms/LabwarePositionCheck/useLaunchLPC' +import { getLatestCurrentOffsets } from '/app/transformations/runs' +import { + useNotifyRunQuery, + useMostRecentCompletedAnalysis, + useLPCDisabledReason, +} from '/app/resources/runs' import { useRobotType } from '/app/redux-resources/robots' import type { LabwareOffset } from '@opentrons/api-client' diff --git a/app/src/organisms/Devices/ProtocolRun/SetupLiquids/SetupLiquidsList.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLiquids/SetupLiquidsList.tsx similarity index 95% rename from app/src/organisms/Devices/ProtocolRun/SetupLiquids/SetupLiquidsList.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupLiquids/SetupLiquidsList.tsx index 82bddc9685f..c362101df85 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupLiquids/SetupLiquidsList.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLiquids/SetupLiquidsList.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { useTranslation } from 'react-i18next' import { css } from 'styled-components' @@ -33,10 +33,13 @@ import { ANALYTICS_OPEN_LIQUID_LABWARE_DETAIL_MODAL, } from '/app/redux/analytics' import { useIsFlex } from '/app/redux-resources/robots' -import { useMostRecentCompletedAnalysis } from '../../../LabwarePositionCheck/useMostRecentCompletedAnalysis' -import { getLocationInfoNames } from '../utils/getLocationInfoNames' -import { LiquidsLabwareDetailsModal } from './LiquidsLabwareDetailsModal' -import { getTotalVolumePerLiquidId, getVolumePerWell } from './utils' +import { useMostRecentCompletedAnalysis } from '/app/resources/runs' +import { getLocationInfoNames } from '/app/transformations/commands' +import { LiquidsLabwareDetailsModal } from '/app/organisms/LiquidsLabwareDetailsModal' +import { + getTotalVolumePerLiquidId, + getVolumePerWell, +} from '/app/transformations/analysis' import type { LabwareByLiquidId } from '@opentrons/shared-data' @@ -136,8 +139,8 @@ export function LiquidsListItem(props: LiquidsListItemProps): JSX.Element { isFlex, } = props const { t } = useTranslation('protocol_setup') - const [openItem, setOpenItem] = React.useState(false) - const [liquidDetailsLabwareId, setLiquidDetailsLabwareId] = React.useState< + const [openItem, setOpenItem] = useState(false) + const [liquidDetailsLabwareId, setLiquidDetailsLabwareId] = useState< string | null >(null) const commands = useMostRecentCompletedAnalysis(runId)?.commands diff --git a/app/src/organisms/Devices/ProtocolRun/SetupLiquids/SetupLiquidsMap.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLiquids/SetupLiquidsMap.tsx similarity index 90% rename from app/src/organisms/Devices/ProtocolRun/SetupLiquids/SetupLiquidsMap.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupLiquids/SetupLiquidsMap.tsx index fa964eb8535..5338a9ce055 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupLiquids/SetupLiquidsMap.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLiquids/SetupLiquidsMap.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, Fragment } from 'react' import map from 'lodash/map' import isEmpty from 'lodash/isEmpty' @@ -21,11 +21,13 @@ import { } from '@opentrons/shared-data' import { LabwareInfoOverlay } from '../LabwareInfoOverlay' -import { LiquidsLabwareDetailsModal } from './LiquidsLabwareDetailsModal' -import { getWellFillFromLabwareId } from './utils' -import { getLabwareRenderInfo } from '../utils/getLabwareRenderInfo' -import { getStandardDeckViewLayerBlockList } from '../utils/getStandardDeckViewLayerBlockList' -import { getProtocolModulesInfo } from '../utils/getProtocolModulesInfo' +import { LiquidsLabwareDetailsModal } from '/app/organisms/LiquidsLabwareDetailsModal' +import { getStandardDeckViewLayerBlockList } from '/app/local-resources/deck_configuration' +import { + getProtocolModulesInfo, + getLabwareRenderInfo, + getWellFillFromLabwareId, +} from '/app/transformations/analysis' import type { CompletedProtocolAnalysis, @@ -41,8 +43,8 @@ export function SetupLiquidsMap( props: SetupLiquidsMapProps ): JSX.Element | null { const { runId, protocolAnalysis } = props - const [hoverLabwareId, setHoverLabwareId] = React.useState('') - const [liquidDetailsLabwareId, setLiquidDetailsLabwareId] = React.useState< + const [hoverLabwareId, setHoverLabwareId] = useState('') + const [liquidDetailsLabwareId, setLiquidDetailsLabwareId] = useState< string | null >(null) @@ -157,9 +159,7 @@ export function SetupLiquidsMap( ) const labwareHasLiquid = !isEmpty(wellFill) return ( - + { @@ -189,7 +189,7 @@ export function SetupLiquidsMap( labwareHasLiquid={labwareHasLiquid} /> - + ) } )} diff --git a/app/src/organisms/Devices/ProtocolRun/SetupLiquids/__tests__/SetupLiquids.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLiquids/__tests__/SetupLiquids.test.tsx similarity index 98% rename from app/src/organisms/Devices/ProtocolRun/SetupLiquids/__tests__/SetupLiquids.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupLiquids/__tests__/SetupLiquids.test.tsx index ce2848ab841..097f30447ee 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupLiquids/__tests__/SetupLiquids.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLiquids/__tests__/SetupLiquids.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, beforeEach, vi } from 'vitest' import { screen, fireEvent } from '@testing-library/react' diff --git a/app/src/organisms/Devices/ProtocolRun/SetupLiquids/__tests__/SetupLiquidsList.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLiquids/__tests__/SetupLiquidsList.test.tsx similarity index 91% rename from app/src/organisms/Devices/ProtocolRun/SetupLiquids/__tests__/SetupLiquidsList.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupLiquids/__tests__/SetupLiquidsList.test.tsx index 80a3384dd24..b9f2c60be0f 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupLiquids/__tests__/SetupLiquidsList.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLiquids/__tests__/SetupLiquidsList.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { when } from 'vitest-when' import { describe, it, beforeEach, vi, expect } from 'vitest' @@ -16,10 +16,13 @@ import { ANALYTICS_OPEN_LIQUID_LABWARE_DETAIL_MODAL, } from '/app/redux/analytics' import { useIsFlex } from '/app/redux-resources/robots' -import { getLocationInfoNames } from '../../utils/getLocationInfoNames' +import { getLocationInfoNames } from '/app/transformations/commands' import { SetupLiquidsList } from '../SetupLiquidsList' -import { getTotalVolumePerLiquidId, getVolumePerWell } from '../utils' -import { LiquidsLabwareDetailsModal } from '../LiquidsLabwareDetailsModal' +import { + getTotalVolumePerLiquidId, + getVolumePerWell, +} from '/app/transformations/analysis' +import { LiquidsLabwareDetailsModal } from '/app/organisms/LiquidsLabwareDetailsModal' import { useNotifyRunQuery } from '/app/resources/runs' import type { Mock } from 'vitest' @@ -52,10 +55,10 @@ const MOCK_LABWARE_INFO_BY_LIQUID_ID = { ], } -vi.mock('../utils') -vi.mock('../../utils/getLocationInfoNames') +vi.mock('/app/transformations/analysis') +vi.mock('/app/transformations/commands') vi.mock('/app/redux-resources/robots') -vi.mock('../LiquidsLabwareDetailsModal') +vi.mock('/app/organisms/LiquidsLabwareDetailsModal') vi.mock('@opentrons/shared-data', async importOriginal => { const actualSharedData = await importOriginal() return { diff --git a/app/src/organisms/Devices/ProtocolRun/SetupLiquids/__tests__/SetupLiquidsMap.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLiquids/__tests__/SetupLiquidsMap.test.tsx similarity index 93% rename from app/src/organisms/Devices/ProtocolRun/SetupLiquids/__tests__/SetupLiquidsMap.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupLiquids/__tests__/SetupLiquidsMap.test.tsx index 4276aa5dd6f..023e73af09c 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupLiquids/__tests__/SetupLiquidsMap.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLiquids/__tests__/SetupLiquidsMap.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { when } from 'vitest-when' import { screen } from '@testing-library/react' import { describe, it, beforeEach, vi, afterEach, expect } from 'vitest' @@ -21,13 +21,16 @@ import { import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' -import { useAttachedModules } from '../../../hooks' +import { useAttachedModules } from '/app/resources/modules' import { LabwareInfoOverlay } from '../../LabwareInfoOverlay' -import { getLabwareRenderInfo } from '../../utils/getLabwareRenderInfo' -import { getStandardDeckViewLayerBlockList } from '../../utils/getStandardDeckViewLayerBlockList' -import { getAttachedProtocolModuleMatches } from '../../../../ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/utils' -import { getProtocolModulesInfo } from '../../utils/getProtocolModulesInfo' -import { mockProtocolModuleInfo } from '../../../../ODD/ProtocolSetup/ProtocolSetupLabware/__fixtures__' +import { getStandardDeckViewLayerBlockList } from '/app/local-resources/deck_configuration' +import { + getAttachedProtocolModuleMatches, + getProtocolModulesInfo, + getLabwareRenderInfo, +} from '/app/transformations/analysis' +/* eslint-disable-next-line opentrons/no-imports-across-applications */ +import { mockProtocolModuleInfo } from '/app/organisms/ODD/ProtocolSetup/ProtocolSetupLabware/__fixtures__' import { mockFetchModulesSuccessActionPayloadModules } from '/app/redux/modules/__fixtures__' import { SetupLiquidsMap } from '../SetupLiquidsMap' @@ -49,11 +52,9 @@ vi.mock('@opentrons/components', async importOriginal => { vi.mock('@opentrons/components/src/hardware-sim/BaseDeck') vi.mock('../../LabwareInfoOverlay') -vi.mock('../../../hooks') -vi.mock('../utils') -vi.mock('../../utils/getLabwareRenderInfo') -vi.mock('../../../../ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/utils') -vi.mock('../../utils/getProtocolModulesInfo') +vi.mock('/app/resources/modules') +vi.mock('/app/transformations/analysis') +vi.mock('/app/transformations/analysis') vi.mock('/app/resources/deck_configuration/utils') vi.mock('@opentrons/shared-data', async importOriginal => { const actual = await importOriginal() diff --git a/app/src/organisms/Devices/ProtocolRun/SetupLiquids/index.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLiquids/index.tsx similarity index 98% rename from app/src/organisms/Devices/ProtocolRun/SetupLiquids/index.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupLiquids/index.tsx index 3dcbbbe7e13..28a6f84e2d4 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupLiquids/index.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupLiquids/index.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { JUSTIFY_CENTER, diff --git a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/NotConfiguredModal.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/NotConfiguredModal.tsx similarity index 96% rename from app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/NotConfiguredModal.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/NotConfiguredModal.tsx index ca5151763fc..e3966e8856a 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/NotConfiguredModal.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/NotConfiguredModal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { createPortal } from 'react-dom' import { useTranslation } from 'react-i18next' import { useUpdateDeckConfigurationMutation } from '@opentrons/react-api-client' @@ -19,7 +18,7 @@ import { getFixtureDisplayName, } from '@opentrons/shared-data' import { TertiaryButton } from '/app/atoms/buttons/TertiaryButton' -import { getTopPortalEl } from '../../../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import { useNotifyDeckConfigurationQuery } from '/app/resources/deck_configuration' import type { CutoutFixtureId, CutoutId } from '@opentrons/shared-data' diff --git a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/OT2MultipleModulesHelp.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/OT2MultipleModulesHelp.tsx similarity index 95% rename from app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/OT2MultipleModulesHelp.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/OT2MultipleModulesHelp.tsx index 4661052add2..6533828d803 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/OT2MultipleModulesHelp.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/OT2MultipleModulesHelp.tsx @@ -1,8 +1,9 @@ -import * as React from 'react' +import { useState } from 'react' import { createPortal } from 'react-dom' import { useTranslation } from 'react-i18next' import { ALIGN_FLEX_END, + Banner, Box, DIRECTION_COLUMN, DIRECTION_ROW, @@ -15,8 +16,7 @@ import { LegacyStyledText, TYPOGRAPHY, } from '@opentrons/components' -import { getTopPortalEl } from '../../../../App/portal' -import { Banner } from '/app/atoms/Banner' +import { getTopPortalEl } from '/app/App/portal' import multipleModuleHelp from '/app/assets/images/Moam_modal_image.png' const HOW_TO_MULTIPLE_MODULES_HREF = @@ -27,7 +27,7 @@ export function OT2MultipleModulesHelp(): JSX.Element { const [ showMultipleModulesModal, setShowMultipleModulesModal, - ] = React.useState(false) + ] = useState(false) const onCloseClick = (): void => { setShowMultipleModulesModal(false) diff --git a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/SetupFixtureList.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/SetupFixtureList.tsx similarity index 80% rename from app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/SetupFixtureList.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/SetupFixtureList.tsx index 192340c4342..2999895da91 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/SetupFixtureList.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/SetupFixtureList.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { css } from 'styled-components' import { useTranslation } from 'react-i18next' import { @@ -23,13 +23,16 @@ import { getCutoutDisplayName, getDeckDefFromRobotType, getFixtureDisplayName, + TC_MODULE_LOCATION_OT3, + THERMOCYCLER_V2_FRONT_FIXTURE, + THERMOCYCLER_V2_REAR_FIXTURE, } from '@opentrons/shared-data' import { StatusLabel } from '/app/atoms/StatusLabel' import { TertiaryButton } from '/app/atoms/buttons/TertiaryButton' -import { LocationConflictModal } from './LocationConflictModal' +import { LocationConflictModal } from '/app/organisms/LocationConflictModal' import { NotConfiguredModal } from './NotConfiguredModal' import { getFixtureImage } from './utils' -import { DeckFixtureSetupInstructionsModal } from '../../../DeviceDetailsDeckConfiguration/DeckFixtureSetupInstructionsModal' +import { DeckFixtureSetupInstructionsModal } from '/app/organisms/DeviceDetailsDeckConfiguration/DeckFixtureSetupInstructionsModal' import type { DeckDefinition } from '@opentrons/shared-data' import type { CutoutConfigAndCompatibility } from '/app/resources/deck_configuration/hooks' @@ -47,9 +50,32 @@ interface SetupFixtureListProps { export const SetupFixtureList = (props: SetupFixtureListProps): JSX.Element => { const { deckConfigCompatibility, robotName } = props const deckDef = getDeckDefFromRobotType(FLEX_ROBOT_TYPE) + + const hasTwoLabwareThermocyclerConflicts = + deckConfigCompatibility.some( + ({ cutoutFixtureId, missingLabwareDisplayName }) => + cutoutFixtureId === THERMOCYCLER_V2_FRONT_FIXTURE && + missingLabwareDisplayName != null + ) && + deckConfigCompatibility.some( + ({ cutoutFixtureId, missingLabwareDisplayName }) => + cutoutFixtureId === THERMOCYCLER_V2_REAR_FIXTURE && + missingLabwareDisplayName != null + ) + + // if there are two labware conflicts with the thermocycler, don't show the conflict with the thermocycler rear fixture + const filteredDeckConfigCompatibility = deckConfigCompatibility.filter( + ({ cutoutFixtureId }) => { + return ( + !hasTwoLabwareThermocyclerConflicts || + !(cutoutFixtureId === THERMOCYCLER_V2_REAR_FIXTURE) + ) + } + ) + return ( <> - {deckConfigCompatibility.map(cutoutConfigAndCompatibility => { + {filteredDeckConfigCompatibility.map(cutoutConfigAndCompatibility => { // filter out all fixtures that only provide usb module addressable areas // (i.e. everything but MagBlockV1 and StagingAreaWithMagBlockV1) // as they're handled in the Modules Table @@ -89,6 +115,11 @@ export function FixtureListItem({ const isRequiredSingleSlotMissing = missingLabwareDisplayName != null const isConflictingFixtureConfigured = cutoutFixtureId != null && !SINGLE_SLOT_FIXTURES.includes(cutoutFixtureId) + + const isThermocyclerCurrentFixture = + cutoutFixtureId === THERMOCYCLER_V2_FRONT_FIXTURE || + cutoutFixtureId === THERMOCYCLER_V2_REAR_FIXTURE + let statusLabel if (!isCurrentFixtureCompatible) { statusLabel = ( @@ -117,16 +148,15 @@ export function FixtureListItem({ const [ showLocationConflictModal, setShowLocationConflictModal, - ] = React.useState(false) - const [ - showNotConfiguredModal, - setShowNotConfiguredModal, - ] = React.useState(false) + ] = useState(false) + const [showNotConfiguredModal, setShowNotConfiguredModal] = useState( + false + ) const [ showSetupInstructionsModal, setShowSetupInstructionsModal, - ] = React.useState(false) + ] = useState(false) return ( <> @@ -215,7 +245,9 @@ export function FixtureListItem({ - {getCutoutDisplayName(cutoutId)} + {isThermocyclerCurrentFixture && isRequiredSingleSlotMissing + ? TC_MODULE_LOCATION_OT3 + : getCutoutDisplayName(cutoutId)} (false) + const [showModuleSetupModal, setShowModuleSetupModal] = useState( + false + ) const [ showLocationConflictModal, setShowLocationConflictModal, - ] = React.useState(false) + ] = useState(false) - const [showModuleWizard, setShowModuleWizard] = React.useState(false) + const [showModuleWizard, setShowModuleWizard] = useState(false) const { chainLiveCommands, isCommandMutationLoading } = useChainLiveCommands() const [ prepCommandErrorMessage, setPrepCommandErrorMessage, - ] = React.useState('') + ] = useState('') const handleCalibrateClick = (): void => { if (attachedModuleMatch != null) { diff --git a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/SetupModulesMap.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/SetupModulesMap.tsx similarity index 83% rename from app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/SetupModulesMap.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/SetupModulesMap.tsx index cbf220b8d8a..f9b44ea23bd 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/SetupModulesMap.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/SetupModulesMap.tsx @@ -1,5 +1,3 @@ -import * as React from 'react' - import { BaseDeck, Box, @@ -13,12 +11,14 @@ import { getSimplestDeckConfigForProtocol, } from '@opentrons/shared-data' -import { useMostRecentCompletedAnalysis } from '../../../LabwarePositionCheck/useMostRecentCompletedAnalysis' -import { getAttachedProtocolModuleMatches } from '../../../ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/utils' -import { ModuleInfo } from '../../ModuleInfo' -import { useAttachedModules } from '../../hooks' -import { getProtocolModulesInfo } from '../utils/getProtocolModulesInfo' -import { getStandardDeckViewLayerBlockList } from '../utils/getStandardDeckViewLayerBlockList' +import { useMostRecentCompletedAnalysis } from '/app/resources/runs' +import { ModuleInfo } from '/app/molecules/ModuleInfo' +import { useAttachedModules } from '/app/resources/modules' +import { + getProtocolModulesInfo, + getAttachedProtocolModuleMatches, +} from '/app/transformations/analysis' +import { getStandardDeckViewLayerBlockList } from '/app/local-resources/deck_configuration' import { useNotifyDeckConfigurationQuery } from '/app/resources/deck_configuration' import { useStoredProtocolAnalysis } from '/app/resources/analysis' diff --git a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/UnMatchedModuleWarning.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/UnMatchedModuleWarning.tsx similarity index 87% rename from app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/UnMatchedModuleWarning.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/UnMatchedModuleWarning.tsx index f2151f2626c..6ebc96dc3c8 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/UnMatchedModuleWarning.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/UnMatchedModuleWarning.tsx @@ -1,17 +1,17 @@ -import * as React from 'react' +import { useState } from 'react' import { useTranslation } from 'react-i18next' import { DIRECTION_COLUMN, + Banner, Flex, SPACING, LegacyStyledText, TYPOGRAPHY, } from '@opentrons/components' -import { Banner } from '/app/atoms/Banner' export const UnMatchedModuleWarning = (): JSX.Element | null => { const { t } = useTranslation('protocol_setup') - const [showBanner, setShowBanner] = React.useState(true) + const [showBanner, setShowBanner] = useState(true) if (!showBanner) return null return ( diff --git a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/NotConfiguredModal.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/NotConfiguredModal.test.tsx similarity index 98% rename from app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/NotConfiguredModal.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/NotConfiguredModal.test.tsx index ff95c11cee6..9f371faaa64 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/NotConfiguredModal.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/NotConfiguredModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, beforeEach, vi, expect } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' diff --git a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/OT2MultipleModulesHelp.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/OT2MultipleModulesHelp.test.tsx similarity index 98% rename from app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/OT2MultipleModulesHelp.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/OT2MultipleModulesHelp.test.tsx index 3689c8ce2b4..27efa17e029 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/OT2MultipleModulesHelp.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/OT2MultipleModulesHelp.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import '@testing-library/jest-dom/vitest' import { describe, it, beforeEach, vi, expect } from 'vitest' diff --git a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/SetupFixtureList.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/SetupFixtureList.test.tsx similarity index 92% rename from app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/SetupFixtureList.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/SetupFixtureList.test.tsx index 7e8f3c1fe56..dd0236ac96d 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/SetupFixtureList.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/SetupFixtureList.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, beforeEach, vi } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' @@ -13,16 +13,16 @@ import { import { i18n } from '/app/i18n' import { SetupFixtureList } from '../SetupFixtureList' import { NotConfiguredModal } from '../NotConfiguredModal' -import { LocationConflictModal } from '../LocationConflictModal' -import { DeckFixtureSetupInstructionsModal } from '../../../../DeviceDetailsDeckConfiguration/DeckFixtureSetupInstructionsModal' +import { LocationConflictModal } from '/app/organisms/LocationConflictModal' +import { DeckFixtureSetupInstructionsModal } from '/app/organisms/DeviceDetailsDeckConfiguration/DeckFixtureSetupInstructionsModal' import type { CutoutConfigAndCompatibility } from '/app/resources/deck_configuration/hooks' vi.mock('/app/resources/deck_configuration/hooks') -vi.mock('../LocationConflictModal') +vi.mock('/app/organisms/LocationConflictModal') vi.mock('../NotConfiguredModal') vi.mock( - '../../../../DeviceDetailsDeckConfiguration/DeckFixtureSetupInstructionsModal' + '/app/organisms/DeviceDetailsDeckConfiguration/DeckFixtureSetupInstructionsModal' ) const mockDeckConfigCompatibility: CutoutConfigAndCompatibility[] = [ diff --git a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/SetupModulesAndDeck.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/SetupModulesAndDeck.test.tsx similarity index 98% rename from app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/SetupModulesAndDeck.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/SetupModulesAndDeck.test.tsx index 4ba84391917..21926d3c823 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/SetupModulesAndDeck.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/SetupModulesAndDeck.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { when } from 'vitest-when' import { describe, it, beforeEach, expect, vi } from 'vitest' import { fireEvent, screen } from '@testing-library/react' @@ -11,22 +11,22 @@ import { } from '/app/resources/deck_configuration/utils' import { useRunHasStarted, - useUnmatchedModulesForProtocol, useModuleCalibrationStatus, -} from '../../../hooks' + useUnmatchedModulesForProtocol, +} from '/app/resources/runs' import { useIsFlex } from '/app/redux-resources/robots' import { SetupModuleAndDeck } from '../index' import { SetupModulesList } from '../SetupModulesList' import { SetupModulesMap } from '../SetupModulesMap' import { SetupFixtureList } from '../SetupFixtureList' -vi.mock('../../../hooks') vi.mock('/app/redux-resources/robots') vi.mock('../SetupModulesList') vi.mock('../SetupModulesMap') vi.mock('../SetupFixtureList') vi.mock('/app/redux/config') vi.mock('/app/resources/deck_configuration/utils') +vi.mock('/app/resources/runs') const MOCK_ROBOT_NAME = 'otie' const MOCK_RUN_ID = '1' diff --git a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/SetupModulesList.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/SetupModulesList.test.tsx similarity index 96% rename from app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/SetupModulesList.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/SetupModulesList.test.tsx index 0be86e2df3b..3beea61588a 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/SetupModulesList.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/SetupModulesList.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { when } from 'vitest-when' import { fireEvent, screen, waitFor } from '@testing-library/react' import { describe, it, beforeEach, expect, vi } from 'vitest' @@ -14,29 +14,28 @@ import { mockThermocycler, } from '/app/redux/modules/__fixtures__' import { useRobot, useIsFlex } from '/app/redux-resources/robots' -import { useChainLiveCommands } from '/app/resources/runs' -import { ModuleSetupModal } from '../../../../ModuleCard/ModuleSetupModal' -import { ModuleWizardFlows } from '../../../../ModuleWizardFlows' import { + useChainLiveCommands, + useRunCalibrationStatus, useModuleRenderInfoForProtocolById, useUnmatchedModulesForProtocol, - useRunCalibrationStatus, -} from '../../../hooks' +} from '/app/resources/runs' +import { ModuleSetupModal } from '/app/organisms/ModuleCard/ModuleSetupModal' +import { ModuleWizardFlows } from '/app/organisms/ModuleWizardFlows' import { OT2MultipleModulesHelp } from '../OT2MultipleModulesHelp' import { UnMatchedModuleWarning } from '../UnMatchedModuleWarning' import { SetupModulesList } from '../SetupModulesList' -import { LocationConflictModal } from '../LocationConflictModal' +import { LocationConflictModal } from '/app/organisms/LocationConflictModal' import type { ModuleModel, ModuleType } from '@opentrons/shared-data' import type { DiscoveredRobot } from '/app/redux/discovery/types' vi.mock('@opentrons/react-api-client') -vi.mock('../../../hooks') vi.mock('/app/redux-resources/robots') -vi.mock('../LocationConflictModal') +vi.mock('/app/organisms/LocationConflictModal') vi.mock('../UnMatchedModuleWarning') -vi.mock('../../../../ModuleCard/ModuleSetupModal') -vi.mock('../../../../ModuleWizardFlows') +vi.mock('/app/organisms/ModuleCard/ModuleSetupModal') +vi.mock('/app/organisms/ModuleWizardFlows') vi.mock('../OT2MultipleModulesHelp') vi.mock('/app/resources/runs') vi.mock('/app/redux/config') diff --git a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/SetupModulesMap.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/SetupModulesMap.test.tsx similarity index 94% rename from app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/SetupModulesMap.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/SetupModulesMap.test.tsx index 8fac42d8ed1..9d9449283dc 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/SetupModulesMap.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/SetupModulesMap.test.tsx @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/no-unsafe-argument */ -import * as React from 'react' +import type * as React from 'react' import { when } from 'vitest-when' import { MemoryRouter } from 'react-router-dom' import { describe, it, beforeEach, vi, afterEach, expect } from 'vitest' @@ -14,11 +14,10 @@ import { mockThermocycler as mockThermocyclerFixture, mockMagneticModule as mockMagneticModuleFixture, } from '/app/redux/modules/__fixtures__/index' -import { useMostRecentCompletedAnalysis } from '../../../../LabwarePositionCheck/useMostRecentCompletedAnalysis' -import { getAttachedProtocolModuleMatches } from '../../../../ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/utils' -import { ModuleInfo } from '../../../ModuleInfo' +import { useMostRecentCompletedAnalysis } from '/app/resources/runs' +import { ModuleInfo } from '/app/molecules/ModuleInfo' import { SetupModulesMap } from '../SetupModulesMap' - +import { getAttachedProtocolModuleMatches } from '/app/transformations/analysis' import type { CompletedProtocolAnalysis, ModuleModel, @@ -43,10 +42,10 @@ vi.mock('@opentrons/shared-data', async importOriginal => { inferModuleOrientationFromXCoordinate: vi.fn(), } }) -vi.mock('../../../../LabwarePositionCheck/useMostRecentCompletedAnalysis') -vi.mock('../../../../ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/utils') -vi.mock('../../../ModuleInfo') -vi.mock('../../../hooks') +vi.mock('/app/resources/runs/useMostRecentCompletedAnalysis') +vi.mock('/app/transformations/analysis') +vi.mock('/app/molecules/ModuleInfo') +vi.mock('/app/resources/modules') const render = (props: React.ComponentProps) => { return renderWithProviders( diff --git a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/UnMatchedModuleWarning.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/UnMatchedModuleWarning.test.tsx similarity index 97% rename from app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/UnMatchedModuleWarning.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/UnMatchedModuleWarning.test.tsx index ada660cd2c8..eb73c0955bf 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/UnMatchedModuleWarning.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/UnMatchedModuleWarning.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect } from 'vitest' import '@testing-library/jest-dom/vitest' diff --git a/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/utils.test.ts b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/utils.test.ts new file mode 100644 index 00000000000..98e3dade58a --- /dev/null +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/utils.test.ts @@ -0,0 +1,25 @@ +import { describe, it, expect } from 'vitest' +import { getFixtureImage } from '../utils' + +describe('getFixtureImage', () => { + it('should render the staging area image', () => { + const result = getFixtureImage('stagingAreaRightSlot') + expect(result).toEqual('/app/src/assets/images/staging_area_slot.png') + }) + it('should render the waste chute image', () => { + const result = getFixtureImage('wasteChuteRightAdapterNoCover') + expect(result).toEqual('/app/src/assets/images/waste_chute.png') + }) + it('should render the waste chute staging area image', () => { + const result = getFixtureImage( + 'stagingAreaSlotWithWasteChuteRightAdapterCovered' + ) + expect(result).toEqual( + '/app/src/assets/images/waste_chute_with_staging_area.png' + ) + }) + it('should render the trash bin image', () => { + const result = getFixtureImage('trashBinAdapter') + expect(result).toEqual('/app/src/assets/images/flex_trash_bin.png') + }) +}) diff --git a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/index.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/index.tsx similarity index 98% rename from app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/index.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/index.tsx index 9af9469f322..3d42a645853 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/index.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/index.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { @@ -26,7 +25,7 @@ import { useRunHasStarted, useUnmatchedModulesForProtocol, useModuleCalibrationStatus, -} from '../../hooks' +} from '/app/resources/runs' import { SetupModulesMap } from './SetupModulesMap' import { SetupModulesList } from './SetupModulesList' import { SetupFixtureList } from './SetupFixtureList' diff --git a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/utils.ts b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/utils.ts similarity index 61% rename from app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/utils.ts rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/utils.ts index e3c4329ca44..a6b47b7ff9d 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/utils.ts +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/utils.ts @@ -11,14 +11,8 @@ import { WASTE_CHUTE_STAGING_AREA_FIXTURES, } from '@opentrons/shared-data' -import magneticModule from '/app/assets/images/magnetic_module_gen_2_transparent.png' import temperatureModule from '/app/assets/images/temp_deck_gen_2_transparent.png' -import thermoModuleGen1 from '/app/assets/images/thermocycler_closed.png' import heaterShakerModule from '/app/assets/images/heater_shaker_module_transparent.png' -import magneticModuleHighRes from '/app/assets/images/modules/magneticModuleV2@3x.png' -import temperatureModuleHighRes from '/app/assets/images/modules/temperatureModuleV2@3x.png' -import thermoModuleGen1HighRes from '/app/assets/images/modules/thermocyclerModuleV1@3x.png' -import heaterShakerModuleHighRes from '/app/assets/images/modules/heaterShakerModuleV1@3x.png' import thermoModuleGen2 from '/app/assets/images/thermocycler_gen_2_closed.png' import magneticBlockGen1 from '/app/assets/images/magnetic_block_gen_1.png' import stagingAreaMagneticBlockGen1 from '/app/assets/images/staging_area_magnetic_block_gen_1.png' @@ -27,31 +21,7 @@ import stagingArea from '/app/assets/images/staging_area_slot.png' import wasteChute from '/app/assets/images/waste_chute.png' import wasteChuteStagingArea from '/app/assets/images/waste_chute_with_staging_area.png' -import type { CutoutFixtureId, ModuleModel } from '@opentrons/shared-data' - -export function getModuleImage( - model: ModuleModel, - highRes: boolean = false -): string { - switch (model) { - case 'magneticModuleV1': - case 'magneticModuleV2': - return highRes ? magneticModuleHighRes : magneticModule - case 'temperatureModuleV1': - case 'temperatureModuleV2': - return highRes ? temperatureModuleHighRes : temperatureModule - case 'heaterShakerModuleV1': - return highRes ? heaterShakerModuleHighRes : heaterShakerModule - case 'thermocyclerModuleV1': - return highRes ? thermoModuleGen1HighRes : thermoModuleGen1 - case 'thermocyclerModuleV2': - return thermoModuleGen2 - case 'magneticBlockV1': - return magneticBlockGen1 - default: - return 'Error: unknown module model' - } -} +import type { CutoutFixtureId } from '@opentrons/shared-data' export function getFixtureImage(cutoutFixtureId: CutoutFixtureId): string { if (cutoutFixtureId === STAGING_AREA_RIGHT_SLOT_FIXTURE) { diff --git a/app/src/organisms/Devices/ProtocolRun/SetupPipetteCalibrationItem.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupPipetteCalibrationItem.tsx similarity index 96% rename from app/src/organisms/Devices/ProtocolRun/SetupPipetteCalibrationItem.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupPipetteCalibrationItem.tsx index 1e5f271fe57..f42066c77d0 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupPipetteCalibrationItem.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupPipetteCalibrationItem.tsx @@ -1,7 +1,7 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { Link as RRDLink } from 'react-router-dom' import { + Banner, Box, Flex, LegacyTooltip, @@ -19,13 +19,11 @@ import { WRAP, } from '@opentrons/components' import { TertiaryButton } from '/app/atoms/buttons' -import { Banner } from '/app/atoms/Banner' import * as PipetteConstants from '/app/redux/pipettes/constants' import { useDeckCalibrationData } from '../hooks' import { SetupCalibrationItem } from './SetupCalibrationItem' -import type { Mount } from '/app/redux/pipettes/types' -import type { PipetteInfo } from '../hooks' +import type { Mount, PipetteInfo } from '/app/redux/pipettes' const inexactPipetteSupportArticle = 'https://support.opentrons.com/s/article/GEN2-pipette-compatibility' diff --git a/app/src/organisms/Devices/ProtocolRun/SetupRobotCalibration.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupRobotCalibration.tsx similarity index 95% rename from app/src/organisms/Devices/ProtocolRun/SetupRobotCalibration.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupRobotCalibration.tsx index ff0e2bd4f99..90745500149 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupRobotCalibration.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupRobotCalibration.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { @@ -16,11 +15,10 @@ import { ANALYTICS_PROCEED_TO_MODULE_SETUP_STEP, ANALYTICS_PROCEED_TO_LABWARE_SETUP_STEP, } from '/app/redux/analytics' -import { useRunHasStarted } from '../hooks' import { SetupDeckCalibration } from './SetupDeckCalibration' import { SetupInstrumentCalibration } from './SetupInstrumentCalibration' import { SetupTipLengthCalibration } from './SetupTipLengthCalibration' -import { useRunStatus } from '/app/resources/runs' +import { useRunStatus, useRunHasStarted } from '/app/resources/runs' import { RUN_STATUS_STOPPED } from '@opentrons/api-client' import { useIsFlex } from '/app/redux-resources/robots' diff --git a/app/src/organisms/Devices/ProtocolRun/SetupStep.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupStep.tsx similarity index 98% rename from app/src/organisms/Devices/ProtocolRun/SetupStep.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupStep.tsx index 4aefec39518..25f2baf1d64 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupStep.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupStep.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { css } from 'styled-components' import { diff --git a/app/src/organisms/Devices/ProtocolRun/SetupTipLengthCalibration.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupTipLengthCalibration.tsx similarity index 94% rename from app/src/organisms/Devices/ProtocolRun/SetupTipLengthCalibration.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupTipLengthCalibration.tsx index c8d45d15ad3..c01b79c3a34 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupTipLengthCalibration.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupTipLengthCalibration.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { Fragment } from 'react' import { useTranslation } from 'react-i18next' import { @@ -11,7 +11,7 @@ import { } from '@opentrons/components' import * as PipetteConstants from '/app/redux/pipettes/constants' -import { useRunPipetteInfoByMount } from '../hooks' +import { useRunPipetteInfoByMount } from '/app/resources/runs' import { SetupCalibrationItem } from './SetupCalibrationItem' import { SetupTipLengthCalibrationButton } from './SetupTipLengthCalibrationButton' interface SetupTipLengthCalibrationProps { @@ -41,7 +41,7 @@ export function SetupTipLengthCalibration({ return null } else { return ( - + {pipetteInfo.tipRacksForPipette.map((tipRackInfo, index) => { const pipetteNotAttached = pipetteInfo.requestedPipetteMatch === 'incompatible' @@ -71,7 +71,7 @@ export function SetupTipLengthCalibration({ /> ) })} - + ) } })} diff --git a/app/src/organisms/Devices/ProtocolRun/SetupTipLengthCalibrationButton.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupTipLengthCalibrationButton.tsx similarity index 94% rename from app/src/organisms/Devices/ProtocolRun/SetupTipLengthCalibrationButton.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/SetupTipLengthCalibrationButton.tsx index 2060c0eca87..bc4ad701f72 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupTipLengthCalibrationButton.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupTipLengthCalibrationButton.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { @@ -21,11 +20,10 @@ import { import { getLabwareDefURI } from '@opentrons/shared-data' import { TertiaryButton } from '/app/atoms/buttons' -import { - useAttachedPipettes, - useDeckCalibrationData, - useRunHasStarted, -} from '../hooks' +import { useAttachedPipettes } from '/app/resources/instruments' +import { useRunHasStarted } from '/app/resources/runs' +import { useDeckCalibrationData } from '../hooks' +// eslint-disable-next-line opentrons/no-imports-up-the-tree-of-life import { useDashboardCalibrateTipLength } from '/app/pages/Desktop/Devices/CalibrationDashboard/hooks/useDashboardCalibrateTipLength' import type { Mount } from '@opentrons/components' diff --git a/app/src/organisms/Devices/ProtocolRun/__tests__/BackToTopButton.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/BackToTopButton.test.tsx similarity index 98% rename from app/src/organisms/Devices/ProtocolRun/__tests__/BackToTopButton.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/BackToTopButton.test.tsx index 8c2c3f79038..0293c0ae5b2 100644 --- a/app/src/organisms/Devices/ProtocolRun/__tests__/BackToTopButton.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/BackToTopButton.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { when } from 'vitest-when' import { MemoryRouter } from 'react-router-dom' diff --git a/app/src/organisms/Devices/ProtocolRun/__tests__/EmptySetupStep.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/EmptySetupStep.test.tsx similarity index 95% rename from app/src/organisms/Devices/ProtocolRun/__tests__/EmptySetupStep.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/EmptySetupStep.test.tsx index eee0f6fb90b..673d8b4806c 100644 --- a/app/src/organisms/Devices/ProtocolRun/__tests__/EmptySetupStep.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/EmptySetupStep.test.tsx @@ -1,4 +1,4 @@ -import React from 'react' +import type * as React from 'react' import { describe, it, beforeEach } from 'vitest' import { screen } from '@testing-library/react' diff --git a/app/src/organisms/Devices/ProtocolRun/__tests__/LabwareInfoOverlay.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/LabwareInfoOverlay.test.tsx similarity index 93% rename from app/src/organisms/Devices/ProtocolRun/__tests__/LabwareInfoOverlay.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/LabwareInfoOverlay.test.tsx index 629c60e9209..0198aa9e448 100644 --- a/app/src/organisms/Devices/ProtocolRun/__tests__/LabwareInfoOverlay.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/LabwareInfoOverlay.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { when } from 'vitest-when' import { screen } from '@testing-library/react' import { describe, it, beforeEach, vi, afterEach, expect } from 'vitest' @@ -9,9 +9,9 @@ import { import { nestedTextMatcher, renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' import { useCurrentRun } from '/app/resources/runs' -import { getLabwareLocation } from '../utils/getLabwareLocation' +import { getLabwareLocation } from '/app/transformations/commands' import { LabwareInfoOverlay } from '../LabwareInfoOverlay' -import { getLabwareDefinitionUri } from '../utils/getLabwareDefinitionUri' +import { getLabwareDefinitionUri } from '/app/transformations/protocols' import { useLabwareOffsetForLabware } from '../useLabwareOffsetForLabware' import type { LabwareDefinition2, @@ -20,9 +20,9 @@ import type { } from '@opentrons/shared-data' vi.mock('/app/resources/runs') -vi.mock('../utils/getLabwareLocation') +vi.mock('/app/transformations/commands') vi.mock('../../hooks') -vi.mock('../utils/getLabwareDefinitionUri') +vi.mock('/app/transformations/protocols') vi.mock('../useLabwareOffsetForLabware') vi.mock('@opentrons/shared-data', async importOriginal => { diff --git a/app/src/organisms/Devices/ProtocolRun/__tests__/ProtocolRunModuleControls.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/ProtocolRunModuleControls.test.tsx similarity index 95% rename from app/src/organisms/Devices/ProtocolRun/__tests__/ProtocolRunModuleControls.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/ProtocolRunModuleControls.test.tsx index d7de570a2cc..5dd1507f893 100644 --- a/app/src/organisms/Devices/ProtocolRun/__tests__/ProtocolRunModuleControls.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/ProtocolRunModuleControls.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { when } from 'vitest-when' import { describe, it, beforeEach, vi, afterEach } from 'vitest' import { screen } from '@testing-library/react' @@ -7,8 +7,8 @@ import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' import { useInstrumentsQuery } from '@opentrons/react-api-client' import { ProtocolRunModuleControls } from '../ProtocolRunModuleControls' -import { ModuleCard } from '../../../ModuleCard' -import { useModuleRenderInfoForProtocolById } from '../../hooks' +import { ModuleCard } from '/app/organisms/ModuleCard' +import { useModuleRenderInfoForProtocolById } from '/app/resources/runs' import { mockMagneticModuleGen2, mockTemperatureModuleGen2, @@ -18,8 +18,8 @@ import { import type { ModuleModel, ModuleType } from '@opentrons/shared-data' vi.mock('@opentrons/react-api-client') -vi.mock('../../../ModuleCard') -vi.mock('../../hooks') +vi.mock('/app/organisms/ModuleCard') +vi.mock('/app/resources/runs') const RUN_ID = 'test123' const mockTempMod = { diff --git a/app/src/organisms/Devices/ProtocolRun/__tests__/ProtocolRunRuntimeParameters.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/ProtocolRunRuntimeParameters.test.tsx similarity index 96% rename from app/src/organisms/Devices/ProtocolRun/__tests__/ProtocolRunRuntimeParameters.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/ProtocolRunRuntimeParameters.test.tsx index 5e295c6b7a6..59425f6ff6b 100644 --- a/app/src/organisms/Devices/ProtocolRun/__tests__/ProtocolRunRuntimeParameters.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/ProtocolRunRuntimeParameters.test.tsx @@ -1,12 +1,15 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, vi, beforeEach, afterEach, expect } from 'vitest' import { screen } from '@testing-library/react' import { when } from 'vitest-when' import { InfoScreen } from '@opentrons/components' import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' -import { useMostRecentCompletedAnalysis } from '../../../LabwarePositionCheck/useMostRecentCompletedAnalysis' -import { useNotifyRunQuery, useRunStatus } from '/app/resources/runs' +import { + useMostRecentCompletedAnalysis, + useNotifyRunQuery, + useRunStatus, +} from '/app/resources/runs' import { mockSucceededRun, mockIdleUnstartedRun, @@ -27,7 +30,6 @@ vi.mock('@opentrons/components', async importOriginal => { InfoScreen: vi.fn(), } }) -vi.mock('../../../LabwarePositionCheck/useMostRecentCompletedAnalysis') vi.mock('/app/resources/runs') vi.mock('/app/redux/config') diff --git a/app/src/organisms/Devices/ProtocolRun/__tests__/ProtocolRunSetup.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/ProtocolRunSetup.test.tsx similarity index 97% rename from app/src/organisms/Devices/ProtocolRun/__tests__/ProtocolRunSetup.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/ProtocolRunSetup.test.tsx index 9dfd04b716f..64aa0d094ae 100644 --- a/app/src/organisms/Devices/ProtocolRun/__tests__/ProtocolRunSetup.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/ProtocolRunSetup.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { when } from 'vitest-when' import { fireEvent, screen } from '@testing-library/react' import { describe, it, beforeEach, vi, afterEach, expect } from 'vitest' @@ -19,18 +18,19 @@ import { getIsFixtureMismatch, getRequiredDeckConfig, } from '/app/resources/deck_configuration/utils' -import { useMostRecentCompletedAnalysis } from '../../../LabwarePositionCheck/useMostRecentCompletedAnalysis' -import { useDeckConfigurationCompatibility } from '/app/resources/deck_configuration/hooks' -import { useRobot, useIsFlex } from '/app/redux-resources/robots' -import { useStoredProtocolAnalysis } from '/app/resources/analysis' import { - useModuleCalibrationStatus, - useProtocolAnalysisErrors, + useMostRecentCompletedAnalysis, useRunCalibrationStatus, - useRunHasStarted, useRunPipetteInfoByMount, + useNotifyRunQuery, + useRunHasStarted, useUnmatchedModulesForProtocol, -} from '../../hooks' + useModuleCalibrationStatus, + useProtocolAnalysisErrors, +} from '/app/resources/runs' +import { useDeckConfigurationCompatibility } from '/app/resources/deck_configuration/hooks' +import { useRobot, useIsFlex } from '/app/redux-resources/robots' +import { useStoredProtocolAnalysis } from '/app/resources/analysis' import { SetupLabware } from '../SetupLabware' import { SetupRobotCalibration } from '../SetupRobotCalibration' @@ -39,21 +39,25 @@ import { SetupModuleAndDeck } from '../SetupModuleAndDeck' import { EmptySetupStep } from '../EmptySetupStep' import { ProtocolRunSetup } from '../ProtocolRunSetup' import type { MissingSteps } from '../ProtocolRunSetup' -import { useNotifyRunQuery } from '/app/resources/runs' import type * as SharedData from '@opentrons/shared-data' -vi.mock('../../hooks') vi.mock('../SetupLabware') vi.mock('../SetupRobotCalibration') vi.mock('../SetupModuleAndDeck') vi.mock('../SetupLiquids') vi.mock('../EmptySetupStep') -vi.mock('../../../LabwarePositionCheck/useMostRecentCompletedAnalysis') +vi.mock('/app/resources/runs/useNotifyRunQuery') +vi.mock('/app/resources/runs/useMostRecentCompletedAnalysis') +vi.mock('/app/resources/runs/useRunCalibrationStatus') +vi.mock('/app/resources/runs/useRunPipetteInfoByMount') +vi.mock('/app/resources/runs/useRunHasStarted') +vi.mock('/app/resources/runs/useUnmatchedModulesForProtocol') +vi.mock('/app/resources/runs/useModuleCalibrationStatus') +vi.mock('/app/resources/runs/useProtocolAnalysisErrors') vi.mock('/app/redux/config') vi.mock('/app/resources/deck_configuration/utils') vi.mock('/app/resources/deck_configuration/hooks') -vi.mock('/app/resources/runs/useNotifyRunQuery') vi.mock('/app/redux-resources/robots') vi.mock('/app/resources/analysis') vi.mock('@opentrons/shared-data', async importOriginal => { diff --git a/app/src/organisms/Devices/ProtocolRun/__tests__/SetupCalibrationItem.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/SetupCalibrationItem.test.tsx similarity index 89% rename from app/src/organisms/Devices/ProtocolRun/__tests__/SetupCalibrationItem.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/SetupCalibrationItem.test.tsx index 3ffb0438173..e39e5d7c83c 100644 --- a/app/src/organisms/Devices/ProtocolRun/__tests__/SetupCalibrationItem.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/SetupCalibrationItem.test.tsx @@ -1,16 +1,16 @@ -import * as React from 'react' +import type * as React from 'react' import { screen } from '@testing-library/react' import { when } from 'vitest-when' import { describe, it, beforeEach, vi, afterEach } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' -import { useRunHasStarted } from '../../hooks' -import { formatTimestamp } from '../../utils' +import { useRunHasStarted } from '/app/resources/runs' +import { formatTimestamp } from '/app/transformations/runs' import { SetupCalibrationItem } from '../SetupCalibrationItem' -vi.mock('../../hooks') -vi.mock('../../utils') +vi.mock('/app/resources/runs') +vi.mock('/app/transformations/runs') const RUN_ID = '1' diff --git a/app/src/organisms/Devices/ProtocolRun/__tests__/SetupDeckCalibration.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/SetupDeckCalibration.test.tsx similarity index 98% rename from app/src/organisms/Devices/ProtocolRun/__tests__/SetupDeckCalibration.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/SetupDeckCalibration.test.tsx index 7b8f54191a1..05e43c3a41f 100644 --- a/app/src/organisms/Devices/ProtocolRun/__tests__/SetupDeckCalibration.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/SetupDeckCalibration.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { when } from 'vitest-when' import { MemoryRouter } from 'react-router-dom' import { describe, it, beforeEach, afterEach, vi, expect } from 'vitest' diff --git a/app/src/organisms/Devices/ProtocolRun/__tests__/SetupFlexPipetteCalibrationItem.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/SetupFlexPipetteCalibrationItem.test.tsx similarity index 88% rename from app/src/organisms/Devices/ProtocolRun/__tests__/SetupFlexPipetteCalibrationItem.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/SetupFlexPipetteCalibrationItem.test.tsx index c957030ad73..0719c0c13b6 100644 --- a/app/src/organisms/Devices/ProtocolRun/__tests__/SetupFlexPipetteCalibrationItem.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/SetupFlexPipetteCalibrationItem.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { fireEvent, screen } from '@testing-library/react' import { describe, it, beforeEach, vi, afterEach } from 'vitest' @@ -7,16 +7,15 @@ import { useInstrumentsQuery } from '@opentrons/react-api-client' import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' -import { useMostRecentCompletedAnalysis } from '../../../LabwarePositionCheck/useMostRecentCompletedAnalysis' -import { PipetteWizardFlows } from '../../../PipetteWizardFlows' +import { useMostRecentCompletedAnalysis } from '/app/resources/runs' +import { PipetteWizardFlows } from '/app/organisms/PipetteWizardFlows' import { SetupFlexPipetteCalibrationItem } from '../SetupFlexPipetteCalibrationItem' -import _uncastedModifiedSimpleV6Protocol from '../../hooks/__fixtures__/modifiedSimpleV6.json' +import { modifiedSimpleV6Protocol as _uncastedModifiedSimpleV6Protocol } from '/app/resources/runs/__fixtures__' import type { CompletedProtocolAnalysis } from '@opentrons/shared-data' vi.mock('@opentrons/react-api-client') -vi.mock('../../../PipetteWizardFlows') -vi.mock('../../../LabwarePositionCheck/useMostRecentCompletedAnalysis') -vi.mock('../../hooks') +vi.mock('/app/organisms/PipetteWizardFlows') +vi.mock('/app/resources/runs') vi.mock('/app/resources/analysis') const RUN_ID = '1' diff --git a/app/src/organisms/Devices/ProtocolRun/__tests__/SetupPipetteCalibration.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/SetupPipetteCalibration.test.tsx similarity index 91% rename from app/src/organisms/Devices/ProtocolRun/__tests__/SetupPipetteCalibration.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/SetupPipetteCalibration.test.tsx index 2848c2b578f..ee59da5370b 100644 --- a/app/src/organisms/Devices/ProtocolRun/__tests__/SetupPipetteCalibration.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/SetupPipetteCalibration.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { when } from 'vitest-when' import { describe, it, beforeEach, vi, afterEach, expect } from 'vitest' import { screen } from '@testing-library/react' @@ -6,14 +5,15 @@ import { screen } from '@testing-library/react' import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' import { mockTipRackDefinition } from '/app/redux/custom-labware/__fixtures__' -import { useRunPipetteInfoByMount } from '../../hooks' import { SetupPipetteCalibrationItem } from '../SetupPipetteCalibrationItem' import { SetupInstrumentCalibration } from '../SetupInstrumentCalibration' -import { useNotifyRunQuery } from '/app/resources/runs' +import { + useNotifyRunQuery, + useRunPipetteInfoByMount, +} from '/app/resources/runs' -import type { PipetteInfo } from '../../hooks' +import type { PipetteInfo } from '/app/redux/pipettes' -vi.mock('../../hooks') vi.mock('../SetupPipetteCalibrationItem') vi.mock('/app/redux-resources/robots') vi.mock('/app/resources/runs') diff --git a/app/src/organisms/Devices/ProtocolRun/__tests__/SetupPipetteCalibrationItem.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/SetupPipetteCalibrationItem.test.tsx similarity index 98% rename from app/src/organisms/Devices/ProtocolRun/__tests__/SetupPipetteCalibrationItem.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/SetupPipetteCalibrationItem.test.tsx index f2857d5e6e8..effcb32b60f 100644 --- a/app/src/organisms/Devices/ProtocolRun/__tests__/SetupPipetteCalibrationItem.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/SetupPipetteCalibrationItem.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { when } from 'vitest-when' import { describe, it, beforeEach, vi, afterEach, expect } from 'vitest' import { screen } from '@testing-library/react' diff --git a/app/src/organisms/Devices/ProtocolRun/__tests__/SetupRobotCalibration.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/SetupRobotCalibration.test.tsx similarity index 96% rename from app/src/organisms/Devices/ProtocolRun/__tests__/SetupRobotCalibration.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/SetupRobotCalibration.test.tsx index 5b364dfc99a..8d737f26452 100644 --- a/app/src/organisms/Devices/ProtocolRun/__tests__/SetupRobotCalibration.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/SetupRobotCalibration.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { when } from 'vitest-when' import { fireEvent, screen } from '@testing-library/react' import { describe, it, beforeEach, vi, afterEach, expect } from 'vitest' @@ -11,7 +11,8 @@ import { } from '/app/redux/analytics' import { useIsFlex } from '/app/redux-resources/robots' import { mockDeckCalData } from '/app/redux/calibration/__fixtures__' -import { useDeckCalibrationData, useRunHasStarted } from '../../hooks' +import { useDeckCalibrationData } from '../../hooks' +import { useRunHasStarted } from '/app/resources/runs' import { SetupDeckCalibration } from '../SetupDeckCalibration' import { SetupInstrumentCalibration } from '../SetupInstrumentCalibration' diff --git a/app/src/organisms/Devices/ProtocolRun/__tests__/SetupStep.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/SetupStep.test.tsx similarity index 97% rename from app/src/organisms/Devices/ProtocolRun/__tests__/SetupStep.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/SetupStep.test.tsx index 51be9501e09..705866c51b2 100644 --- a/app/src/organisms/Devices/ProtocolRun/__tests__/SetupStep.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/SetupStep.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, beforeEach, vi, afterEach, expect } from 'vitest' diff --git a/app/src/organisms/Devices/ProtocolRun/__tests__/SetupTipLengthCalibration.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/SetupTipLengthCalibration.test.tsx similarity index 96% rename from app/src/organisms/Devices/ProtocolRun/__tests__/SetupTipLengthCalibration.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/SetupTipLengthCalibration.test.tsx index daaf804c60a..2c6783f0d0e 100644 --- a/app/src/organisms/Devices/ProtocolRun/__tests__/SetupTipLengthCalibration.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/SetupTipLengthCalibration.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { when } from 'vitest-when' import { describe, it, beforeEach, vi, afterEach, expect } from 'vitest' import { screen } from '@testing-library/react' @@ -6,14 +5,14 @@ import { screen } from '@testing-library/react' import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' import { mockTipRackDefinition } from '/app/redux/custom-labware/__fixtures__' -import { useRunPipetteInfoByMount } from '../../hooks' +import { useRunPipetteInfoByMount } from '/app/resources/runs' import { SetupTipLengthCalibrationButton } from '../SetupTipLengthCalibrationButton' import { SetupTipLengthCalibration } from '../SetupTipLengthCalibration' -import type { PipetteInfo } from '../../hooks' +import type { PipetteInfo } from '/app/redux/pipettes' vi.mock('/app/redux/config') -vi.mock('../../hooks') +vi.mock('/app/resources/runs') vi.mock('../SetupTipLengthCalibrationButton') const ROBOT_NAME = 'otie' diff --git a/app/src/organisms/Devices/ProtocolRun/__tests__/SetupTipLengthCalibrationButton.test.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/SetupTipLengthCalibrationButton.test.tsx similarity index 93% rename from app/src/organisms/Devices/ProtocolRun/__tests__/SetupTipLengthCalibrationButton.test.tsx rename to app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/SetupTipLengthCalibrationButton.test.tsx index bafe7c5d662..4dac2e3c8d5 100644 --- a/app/src/organisms/Devices/ProtocolRun/__tests__/SetupTipLengthCalibrationButton.test.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/__tests__/SetupTipLengthCalibrationButton.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { when } from 'vitest-when' import { screen, fireEvent } from '@testing-library/react' import { describe, it, beforeEach, vi, afterEach, expect } from 'vitest' @@ -9,7 +9,9 @@ import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' import { mockDeckCalData } from '/app/redux/calibration/__fixtures__' import { mockTipLengthCalLauncher } from '../../hooks/__fixtures__/taskListFixtures' -import { useDeckCalibrationData, useRunHasStarted } from '../../hooks' +import { useDeckCalibrationData } from '../../hooks' +import { useRunHasStarted } from '/app/resources/runs' +// eslint-disable-next-line opentrons/no-imports-up-the-tree-of-life import { useDashboardCalibrateTipLength } from '/app/pages/Desktop/Devices/CalibrationDashboard/hooks/useDashboardCalibrateTipLength' import { SetupTipLengthCalibrationButton } from '../SetupTipLengthCalibrationButton' @@ -23,6 +25,7 @@ vi.mock( vi.mock('/app/redux/config') vi.mock('/app/redux/sessions/selectors') vi.mock('../../hooks') +vi.mock('/app/resources/runs') const ROBOT_NAME = 'otie' const RUN_ID = '1' diff --git a/app/src/organisms/Devices/ProtocolRun/useLabwareOffsetForLabware.ts b/app/src/organisms/Desktop/Devices/ProtocolRun/useLabwareOffsetForLabware.ts similarity index 73% rename from app/src/organisms/Devices/ProtocolRun/useLabwareOffsetForLabware.ts rename to app/src/organisms/Desktop/Devices/ProtocolRun/useLabwareOffsetForLabware.ts index 826dc739421..d2ba3c19058 100644 --- a/app/src/organisms/Devices/ProtocolRun/useLabwareOffsetForLabware.ts +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/useLabwareOffsetForLabware.ts @@ -1,12 +1,16 @@ import { getLoadedLabwareDefinitionsByUri } from '@opentrons/shared-data' -import { getCurrentOffsetForLabwareInLocation } from './utils/getCurrentOffsetForLabwareInLocation' -import { getLabwareDefinitionUri } from './utils/getLabwareDefinitionUri' -import { getLabwareOffsetLocation } from './utils/getLabwareOffsetLocation' -import { useNotifyRunQuery } from '/app/resources/runs' +import { getLabwareDefinitionUri } from '/app/transformations/protocols' +import { + getLabwareOffsetLocation, + getCurrentOffsetForLabwareInLocation, +} from '/app/transformations/analysis' +import { + useNotifyRunQuery, + useMostRecentCompletedAnalysis, +} from '/app/resources/runs' import type { LabwareOffset } from '@opentrons/api-client' -import { useMostRecentCompletedAnalysis } from '../../LabwarePositionCheck/useMostRecentCompletedAnalysis' export function useLabwareOffsetForLabware( runId: string, diff --git a/app/src/organisms/Devices/ProtocolRun/utils/__tests__/getModuleTypesThatRequireExtraAttention.test.ts b/app/src/organisms/Desktop/Devices/ProtocolRun/utils/__tests__/getModuleTypesThatRequireExtraAttention.test.ts similarity index 100% rename from app/src/organisms/Devices/ProtocolRun/utils/__tests__/getModuleTypesThatRequireExtraAttention.test.ts rename to app/src/organisms/Desktop/Devices/ProtocolRun/utils/__tests__/getModuleTypesThatRequireExtraAttention.test.ts diff --git a/app/src/organisms/Devices/ProtocolRun/utils/getInitialLabwareLocation.ts b/app/src/organisms/Desktop/Devices/ProtocolRun/utils/getInitialLabwareLocation.ts similarity index 100% rename from app/src/organisms/Devices/ProtocolRun/utils/getInitialLabwareLocation.ts rename to app/src/organisms/Desktop/Devices/ProtocolRun/utils/getInitialLabwareLocation.ts diff --git a/app/src/organisms/Devices/ProtocolRun/utils/getModuleName.ts b/app/src/organisms/Desktop/Devices/ProtocolRun/utils/getModuleName.ts similarity index 100% rename from app/src/organisms/Devices/ProtocolRun/utils/getModuleName.ts rename to app/src/organisms/Desktop/Devices/ProtocolRun/utils/getModuleName.ts diff --git a/app/src/organisms/Devices/ProtocolRun/utils/getModuleTypesThatRequireExtraAttention.ts b/app/src/organisms/Desktop/Devices/ProtocolRun/utils/getModuleTypesThatRequireExtraAttention.ts similarity index 100% rename from app/src/organisms/Devices/ProtocolRun/utils/getModuleTypesThatRequireExtraAttention.ts rename to app/src/organisms/Desktop/Devices/ProtocolRun/utils/getModuleTypesThatRequireExtraAttention.ts diff --git a/app/src/organisms/Devices/ProtocolRun/utils/getPipetteMount.ts b/app/src/organisms/Desktop/Devices/ProtocolRun/utils/getPipetteMount.ts similarity index 100% rename from app/src/organisms/Devices/ProtocolRun/utils/getPipetteMount.ts rename to app/src/organisms/Desktop/Devices/ProtocolRun/utils/getPipetteMount.ts diff --git a/app/src/organisms/Devices/ReachableBanner.tsx b/app/src/organisms/Desktop/Devices/ReachableBanner.tsx similarity index 84% rename from app/src/organisms/Devices/ReachableBanner.tsx rename to app/src/organisms/Desktop/Devices/ReachableBanner.tsx index d729203c5d9..8e278092393 100644 --- a/app/src/organisms/Devices/ReachableBanner.tsx +++ b/app/src/organisms/Desktop/Devices/ReachableBanner.tsx @@ -1,7 +1,5 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' -import { SPACING } from '@opentrons/components' -import { Banner } from '/app/atoms/Banner' +import { SPACING, Banner } from '@opentrons/components' import { REACHABLE } from '/app/redux/discovery' import type { DiscoveredRobot } from '/app/redux/discovery/types' diff --git a/app/src/organisms/Devices/RecentProtocolRuns.tsx b/app/src/organisms/Desktop/Devices/RecentProtocolRuns.tsx similarity index 96% rename from app/src/organisms/Devices/RecentProtocolRuns.tsx rename to app/src/organisms/Desktop/Devices/RecentProtocolRuns.tsx index 9afce240cf5..48d566be520 100644 --- a/app/src/organisms/Devices/RecentProtocolRuns.tsx +++ b/app/src/organisms/Desktop/Devices/RecentProtocolRuns.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { useAllProtocolsQuery } from '@opentrons/react-api-client' import { @@ -17,8 +16,12 @@ import { } from '@opentrons/components' import { HistoricalProtocolRun } from './HistoricalProtocolRun' -import { useIsRobotViewable, useRunStatuses } from './hooks' -import { useNotifyAllRunsQuery, useCurrentRunId } from '/app/resources/runs' +import { useIsRobotViewable } from '/app/redux-resources/robots' +import { + useNotifyAllRunsQuery, + useCurrentRunId, + useRunStatuses, +} from '/app/resources/runs' interface RecentProtocolRunsProps { robotName: string diff --git a/app/src/organisms/Devices/RobotCard.tsx b/app/src/organisms/Desktop/Devices/RobotCard.tsx similarity index 99% rename from app/src/organisms/Devices/RobotCard.tsx rename to app/src/organisms/Desktop/Devices/RobotCard.tsx index bf70a6f2ead..a375a2cfa1c 100644 --- a/app/src/organisms/Devices/RobotCard.tsx +++ b/app/src/organisms/Desktop/Devices/RobotCard.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useSelector } from 'react-redux' import { useTranslation } from 'react-i18next' import { useNavigate } from 'react-router-dom' @@ -44,7 +43,7 @@ import { RobotStatusHeader } from './RobotStatusHeader' import { ErrorRecoveryBanner, useErrorRecoveryBanner, -} from '../ErrorRecoveryBanner' +} from './ErrorRecoveryBanner' import type { GripperData } from '@opentrons/api-client' import type { GripperModel } from '@opentrons/shared-data' diff --git a/app/src/organisms/Devices/RobotOverflowMenu.tsx b/app/src/organisms/Desktop/Devices/RobotOverflowMenu.tsx similarity index 97% rename from app/src/organisms/Devices/RobotOverflowMenu.tsx rename to app/src/organisms/Desktop/Devices/RobotOverflowMenu.tsx index 0152fe3a11a..287c2ff032f 100644 --- a/app/src/organisms/Devices/RobotOverflowMenu.tsx +++ b/app/src/organisms/Desktop/Devices/RobotOverflowMenu.tsx @@ -25,11 +25,11 @@ import { import { CONNECTABLE, removeRobot } from '/app/redux/discovery' import { useIsRobotOnWrongVersionOfSoftware } from '/app/redux/robot-update' import { Divider } from '/app/atoms/structure' -import { getTopPortalEl } from '../../App/portal' -import { ChooseProtocolSlideout } from '../ChooseProtocolSlideout' +import { getTopPortalEl } from '/app/App/portal' +import { ChooseProtocolSlideout } from '/app/organisms/Desktop/ChooseProtocolSlideout' import { useCurrentRunId } from '/app/resources/runs' import { ConnectionTroubleshootingModal } from './ConnectionTroubleshootingModal' -import { useIsRobotBusy } from './hooks' +import { useIsRobotBusy } from '/app/redux-resources/robots' import type { StyleProps } from '@opentrons/components' import type { DiscoveredRobot } from '/app/redux/discovery/types' diff --git a/app/src/organisms/Devices/RobotOverview.tsx b/app/src/organisms/Desktop/Devices/RobotOverview.tsx similarity index 96% rename from app/src/organisms/Devices/RobotOverview.tsx rename to app/src/organisms/Desktop/Devices/RobotOverview.tsx index 6a69961a199..591cb34379c 100644 --- a/app/src/organisms/Devices/RobotOverview.tsx +++ b/app/src/organisms/Desktop/Devices/RobotOverview.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useSelector } from 'react-redux' import { useTranslation } from 'react-i18next' @@ -24,7 +23,11 @@ import OT2_PNG from '/app/assets/images/OT2-R_HERO.png' import FLEX_PNG from '/app/assets/images/FLEX.png' import { ToggleButton } from '/app/atoms/buttons' import { getConfig } from '/app/redux/config' -import { useRobot } from '/app/redux-resources/robots' +import { + useRobot, + useIsRobotBusy, + useIsRobotViewable, +} from '/app/redux-resources/robots' import { CONNECTABLE, getRobotAddressesByName, @@ -35,12 +38,12 @@ import { UpdateRobotBanner } from '../UpdateRobotBanner' import { RobotStatusHeader } from './RobotStatusHeader' import { ReachableBanner } from './ReachableBanner' import { RobotOverviewOverflowMenu } from './RobotOverviewOverflowMenu' -import { useIsRobotBusy, useIsRobotViewable, useLights } from './hooks' +import { useLights } from '/app/resources/devices' import { CalibrationStatusBanner } from './CalibrationStatusBanner' import { ErrorRecoveryBanner, useErrorRecoveryBanner, -} from '../ErrorRecoveryBanner' +} from './ErrorRecoveryBanner' import type { State } from '/app/redux/types' diff --git a/app/src/organisms/Devices/RobotOverviewOverflowMenu.tsx b/app/src/organisms/Desktop/Devices/RobotOverviewOverflowMenu.tsx similarity index 95% rename from app/src/organisms/Devices/RobotOverviewOverflowMenu.tsx rename to app/src/organisms/Desktop/Devices/RobotOverviewOverflowMenu.tsx index 66b0f58a23a..3b6dda678ca 100644 --- a/app/src/organisms/Devices/RobotOverviewOverflowMenu.tsx +++ b/app/src/organisms/Desktop/Devices/RobotOverviewOverflowMenu.tsx @@ -21,17 +21,17 @@ import { useMountEffect, } from '@opentrons/components' -import { getTopPortalEl } from '../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import { Divider } from '/app/atoms/structure' -import { ChooseProtocolSlideout } from '/app/organisms/ChooseProtocolSlideout' -import { DisconnectModal } from '/app/organisms/Devices/RobotSettings/ConnectNetwork/DisconnectModal' -import { handleUpdateBuildroot } from '/app/organisms/Devices/RobotSettings/UpdateBuildroot' +import { ChooseProtocolSlideout } from '/app/organisms/Desktop/ChooseProtocolSlideout' +import { DisconnectModal } from './RobotSettings/ConnectNetwork/DisconnectModal' +import { handleUpdateBuildroot } from './RobotSettings/UpdateBuildroot' import { useIsRobotOnWrongVersionOfSoftware } from '/app/redux/robot-update' import { UNREACHABLE, CONNECTABLE, REACHABLE } from '/app/redux/discovery' import { checkShellUpdate } from '/app/redux/shell' import { restartRobot } from '/app/redux/robot-admin' import { home, ROBOT } from '/app/redux/robot-controls' -import { useIsRobotBusy } from './hooks' +import { useIsRobotBusy } from '/app/redux-resources/robots' import { useCanDisconnect } from '/app/resources/networking/hooks' import { useIsEstopNotDisengaged } from '/app/resources/devices/hooks/useIsEstopNotDisengaged' import { useCurrentRunId } from '/app/resources/runs' diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/DeviceResetModal.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/DeviceResetModal.tsx similarity index 98% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/DeviceResetModal.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/DeviceResetModal.tsx index 5b3497f3d89..49a6531c302 100644 --- a/app/src/organisms/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/DeviceResetModal.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/DeviceResetModal.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useEffect } from 'react' import { useSelector } from 'react-redux' import { useTranslation } from 'react-i18next' import last from 'lodash/last' @@ -80,7 +80,7 @@ export function DeviceResetModal({ } } - React.useEffect(() => { + useEffect(() => { if (resetRequestStatus === SUCCESS) closeModal() }, [resetRequestStatus, closeModal]) diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/DeviceResetSlideout.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/DeviceResetSlideout.tsx similarity index 100% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/DeviceResetSlideout.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/DeviceResetSlideout.tsx diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/FactoryModeSlideout.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/FactoryModeSlideout.tsx similarity index 100% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/FactoryModeSlideout.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/FactoryModeSlideout.tsx diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/RenameRobotSlideout.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/RenameRobotSlideout.tsx similarity index 99% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/RenameRobotSlideout.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/RenameRobotSlideout.tsx index 1ae6e89a5ff..5c02dc8eb95 100644 --- a/app/src/organisms/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/RenameRobotSlideout.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/RenameRobotSlideout.tsx @@ -5,6 +5,7 @@ import { useForm, Controller } from 'react-hook-form' import { useTranslation } from 'react-i18next' import { COLORS, + Banner, DIRECTION_COLUMN, Flex, InputField, @@ -21,7 +22,6 @@ import { } from '/app/redux/discovery' import { useTrackEvent, ANALYTICS_RENAME_ROBOT } from '/app/redux/analytics' import { Slideout } from '/app/atoms/Slideout' -import { Banner } from '/app/atoms/Banner' import { useIsFlex } from '/app/redux-resources/robots' import type { Resolver, FieldError } from 'react-hook-form' diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/__tests__/DeviceResetModal.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/__tests__/DeviceResetModal.test.tsx similarity index 99% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/__tests__/DeviceResetModal.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/__tests__/DeviceResetModal.test.tsx index a74236888fa..a5a3a91d219 100644 --- a/app/src/organisms/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/__tests__/DeviceResetModal.test.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/__tests__/DeviceResetModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { fireEvent, screen } from '@testing-library/react' import { describe, it, vi, expect, beforeEach } from 'vitest' diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/__tests__/DeviceResetSlideout.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/__tests__/DeviceResetSlideout.test.tsx similarity index 99% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/__tests__/DeviceResetSlideout.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/__tests__/DeviceResetSlideout.test.tsx index c42b289f7b0..7cc668503dc 100644 --- a/app/src/organisms/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/__tests__/DeviceResetSlideout.test.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/__tests__/DeviceResetSlideout.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { fireEvent, screen } from '@testing-library/react' import { describe, it, vi, expect, beforeEach } from 'vitest' diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/__tests__/RenameRobotSlideout.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/__tests__/RenameRobotSlideout.test.tsx similarity index 99% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/__tests__/RenameRobotSlideout.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/__tests__/RenameRobotSlideout.test.tsx index 7a121176b11..6f7b1b4ab28 100644 --- a/app/src/organisms/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/__tests__/RenameRobotSlideout.test.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/AdvancedTabSlideouts/__tests__/RenameRobotSlideout.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { fireEvent, screen, waitFor } from '@testing-library/react' import { describe, it, vi, expect, beforeEach } from 'vitest' diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/DeviceReset.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/DeviceReset.tsx similarity index 97% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/DeviceReset.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/DeviceReset.tsx index 5a6aed28894..2249e453fe6 100644 --- a/app/src/organisms/Devices/RobotSettings/AdvancedTab/DeviceReset.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/DeviceReset.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useTranslation } from 'react-i18next' import { diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/DisplayRobotName.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/DisplayRobotName.tsx similarity index 97% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/DisplayRobotName.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/DisplayRobotName.tsx index e71a87124b1..c6a380cd6e5 100644 --- a/app/src/organisms/Devices/RobotSettings/AdvancedTab/DisplayRobotName.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/DisplayRobotName.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useTranslation } from 'react-i18next' import { diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/EnableStatusLight.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/EnableStatusLight.tsx similarity index 95% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/EnableStatusLight.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/EnableStatusLight.tsx index 0c0475d5d3a..4e3c7fcc0f0 100644 --- a/app/src/organisms/Devices/RobotSettings/AdvancedTab/EnableStatusLight.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/EnableStatusLight.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { @@ -12,7 +11,7 @@ import { LegacyStyledText, } from '@opentrons/components' import { ToggleButton } from '/app/atoms/buttons' -import { useLEDLights } from '../../hooks' +import { useLEDLights } from '/app/resources/robot-settings' interface EnableStatusLightProps { robotName: string diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/FactoryMode.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/FactoryMode.tsx similarity index 96% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/FactoryMode.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/FactoryMode.tsx index 89a7b9b0597..14cb3766040 100644 --- a/app/src/organisms/Devices/RobotSettings/AdvancedTab/FactoryMode.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/FactoryMode.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useTranslation } from 'react-i18next' import { diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/GantryHoming.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/GantryHoming.tsx similarity index 97% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/GantryHoming.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/GantryHoming.tsx index a47fcb8d537..96ea82a59cf 100644 --- a/app/src/organisms/Devices/RobotSettings/AdvancedTab/GantryHoming.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/GantryHoming.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useDispatch } from 'react-redux' import { useTranslation } from 'react-i18next' diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/LegacySettings.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/LegacySettings.tsx similarity index 98% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/LegacySettings.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/LegacySettings.tsx index 8b2a9fb61b2..5ea0ae6e5ec 100644 --- a/app/src/organisms/Devices/RobotSettings/AdvancedTab/LegacySettings.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/LegacySettings.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useDispatch } from 'react-redux' import { useTranslation } from 'react-i18next' diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/OpenJupyterControl.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/OpenJupyterControl.tsx similarity index 98% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/OpenJupyterControl.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/OpenJupyterControl.tsx index 5653e750ab4..1fae3e17676 100644 --- a/app/src/organisms/Devices/RobotSettings/AdvancedTab/OpenJupyterControl.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/OpenJupyterControl.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { ALIGN_CENTER, diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/RobotInformation.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/RobotInformation.tsx similarity index 98% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/RobotInformation.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/RobotInformation.tsx index 9e7528bbcdc..05d492261ba 100644 --- a/app/src/organisms/Devices/RobotSettings/AdvancedTab/RobotInformation.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/RobotInformation.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { Box, diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/RobotServerVersion.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/RobotServerVersion.tsx similarity index 99% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/RobotServerVersion.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/RobotServerVersion.tsx index 650b4d0bb3c..1353131e794 100644 --- a/app/src/organisms/Devices/RobotSettings/AdvancedTab/RobotServerVersion.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/RobotServerVersion.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useSelector } from 'react-redux' import { useTranslation } from 'react-i18next' import { diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/ShortTrashBin.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/ShortTrashBin.tsx similarity index 97% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/ShortTrashBin.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/ShortTrashBin.tsx index da928b01721..5bc00476406 100644 --- a/app/src/organisms/Devices/RobotSettings/AdvancedTab/ShortTrashBin.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/ShortTrashBin.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useDispatch } from 'react-redux' import { useTranslation } from 'react-i18next' diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/Troubleshooting.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/Troubleshooting.tsx similarity index 100% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/Troubleshooting.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/Troubleshooting.tsx diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/UpdateRobotSoftware.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/UpdateRobotSoftware.tsx similarity index 98% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/UpdateRobotSoftware.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/UpdateRobotSoftware.tsx index bb480e9a140..afe1481e68f 100644 --- a/app/src/organisms/Devices/RobotSettings/AdvancedTab/UpdateRobotSoftware.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/UpdateRobotSoftware.tsx @@ -5,6 +5,7 @@ import { css } from 'styled-components' import { ALIGN_CENTER, + Banner, Box, Flex, JUSTIFY_SPACE_BETWEEN, @@ -22,7 +23,6 @@ import { ExternalLink } from '/app/atoms/Link/ExternalLink' import { TertiaryButton } from '/app/atoms/buttons' import { getRobotUpdateDisplayInfo } from '/app/redux/robot-update' import { useDispatchStartRobotUpdate } from '/app/redux/robot-update/hooks' -import { Banner } from '/app/atoms/Banner' import type { State } from '/app/redux/types' diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/UsageSettings.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/UsageSettings.tsx similarity index 98% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/UsageSettings.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/UsageSettings.tsx index 491a5d8becd..e8843af6019 100644 --- a/app/src/organisms/Devices/RobotSettings/AdvancedTab/UsageSettings.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/UsageSettings.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useDispatch } from 'react-redux' import { useTranslation } from 'react-i18next' diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/UseOlderAspirateBehavior.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/UseOlderAspirateBehavior.tsx similarity index 98% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/UseOlderAspirateBehavior.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/UseOlderAspirateBehavior.tsx index 3f8bc946976..c3496621f18 100644 --- a/app/src/organisms/Devices/RobotSettings/AdvancedTab/UseOlderAspirateBehavior.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/UseOlderAspirateBehavior.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useDispatch } from 'react-redux' import { useTranslation } from 'react-i18next' diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/DeviceReset.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/DeviceReset.test.tsx similarity index 98% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/DeviceReset.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/DeviceReset.test.tsx index 986e966c13d..fae578451ba 100644 --- a/app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/DeviceReset.test.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/DeviceReset.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { fireEvent, screen } from '@testing-library/react' import { describe, it, vi, expect } from 'vitest' diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/DisplayRobotName.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/DisplayRobotName.test.tsx similarity index 97% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/DisplayRobotName.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/DisplayRobotName.test.tsx index 8b817df27ba..8a4cc86e293 100644 --- a/app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/DisplayRobotName.test.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/DisplayRobotName.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { fireEvent, screen } from '@testing-library/react' import { describe, it, vi, expect } from 'vitest' diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/EnableStatusLight.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/EnableStatusLight.test.tsx similarity index 92% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/EnableStatusLight.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/EnableStatusLight.test.tsx index 38560808cff..2e2cc956bde 100644 --- a/app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/EnableStatusLight.test.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/EnableStatusLight.test.tsx @@ -1,14 +1,14 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, vi, expect, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' -import { useLEDLights } from '../../../hooks' +import { useLEDLights } from '/app/resources/robot-settings' import { EnableStatusLight } from '../EnableStatusLight' -vi.mock('../../../hooks') +vi.mock('/app/resources/robot-settings') const ROBOT_NAME = 'otie' const mockToggleLights = vi.fn() diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/GantryHoming.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/GantryHoming.test.tsx similarity index 98% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/GantryHoming.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/GantryHoming.test.tsx index 49402e00c97..87c43f494f9 100644 --- a/app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/GantryHoming.test.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/GantryHoming.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { fireEvent, screen } from '@testing-library/react' import { describe, it, vi, expect, beforeEach } from 'vitest' diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/LegacySettings.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/LegacySettings.test.tsx similarity index 98% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/LegacySettings.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/LegacySettings.test.tsx index 7da47c95e67..14237d9e738 100644 --- a/app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/LegacySettings.test.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/LegacySettings.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { fireEvent, screen } from '@testing-library/react' import { describe, it, vi, expect, beforeEach } from 'vitest' diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/OpenJupyterControl.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/OpenJupyterControl.test.tsx similarity index 98% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/OpenJupyterControl.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/OpenJupyterControl.test.tsx index fe323a5667b..57a01e25680 100644 --- a/app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/OpenJupyterControl.test.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/OpenJupyterControl.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { fireEvent, screen } from '@testing-library/react' import { describe, it, vi, beforeEach, expect } from 'vitest' diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/RobotInformation.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/RobotInformation.test.tsx similarity index 98% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/RobotInformation.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/RobotInformation.test.tsx index 985e8b970f0..51769c2b7e5 100644 --- a/app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/RobotInformation.test.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/RobotInformation.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { screen } from '@testing-library/react' import { describe, it, vi, beforeEach, expect } from 'vitest' diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/RobotServerVersion.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/RobotServerVersion.test.tsx similarity index 99% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/RobotServerVersion.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/RobotServerVersion.test.tsx index face0f2e2c7..07f2877ec43 100644 --- a/app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/RobotServerVersion.test.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/RobotServerVersion.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { MemoryRouter } from 'react-router-dom' import { describe, it, vi, beforeEach, expect } from 'vitest' diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/ShortTrashBin.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/ShortTrashBin.test.tsx similarity index 98% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/ShortTrashBin.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/ShortTrashBin.test.tsx index 8d1ee357b9f..3465535546b 100644 --- a/app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/ShortTrashBin.test.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/ShortTrashBin.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { fireEvent, screen } from '@testing-library/react' import { describe, it, vi, beforeEach, expect } from 'vitest' diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/Troubleshooting.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/Troubleshooting.test.tsx similarity index 96% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/Troubleshooting.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/Troubleshooting.test.tsx index 6c690e4b114..a5f28ee7da2 100644 --- a/app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/Troubleshooting.test.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/Troubleshooting.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { act, waitFor, screen } from '@testing-library/react' import { when } from 'vitest-when' @@ -17,7 +17,7 @@ import { useRobot } from '/app/redux-resources/robots' import { Troubleshooting } from '../Troubleshooting' import type { HostConfig } from '@opentrons/api-client' -import type { ToasterContextType } from '../../../../ToasterOven/ToasterContext' +import type { ToasterContextType } from '/app/organisms/ToasterOven/ToasterContext' vi.mock('@opentrons/react-api-client') vi.mock('/app/organisms/ToasterOven') diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/UpdateRobotSoftware.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/UpdateRobotSoftware.test.tsx similarity index 98% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/UpdateRobotSoftware.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/UpdateRobotSoftware.test.tsx index ab56af2567e..d8845e81d06 100644 --- a/app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/UpdateRobotSoftware.test.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/UpdateRobotSoftware.test.tsx @@ -1,5 +1,4 @@ /* eslint-disable testing-library/no-node-access */ -import * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { screen } from '@testing-library/react' import { describe, it, vi, beforeEach, expect } from 'vitest' diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/UsageSettings.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/UsageSettings.test.tsx similarity index 98% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/UsageSettings.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/UsageSettings.test.tsx index 1543209d00d..98790f1b3bc 100644 --- a/app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/UsageSettings.test.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/UsageSettings.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { screen, fireEvent } from '@testing-library/react' import { describe, it, vi, beforeEach, expect } from 'vitest' diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/UseOlderAspirateBehavior.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/UseOlderAspirateBehavior.test.tsx similarity index 98% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/UseOlderAspirateBehavior.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/UseOlderAspirateBehavior.test.tsx index aeee92b4cd5..a44111c1c11 100644 --- a/app/src/organisms/Devices/RobotSettings/AdvancedTab/__tests__/UseOlderAspirateBehavior.test.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/__tests__/UseOlderAspirateBehavior.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { screen, fireEvent } from '@testing-library/react' import { describe, it, vi, beforeEach, expect } from 'vitest' diff --git a/app/src/organisms/Devices/RobotSettings/AdvancedTab/index.ts b/app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/index.ts similarity index 100% rename from app/src/organisms/Devices/RobotSettings/AdvancedTab/index.ts rename to app/src/organisms/Desktop/Devices/RobotSettings/AdvancedTab/index.ts diff --git a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/FormModal.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/FormModal.tsx similarity index 99% rename from app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/FormModal.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/FormModal.tsx index 3e62f53acaf..60ce3d2a88e 100644 --- a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/FormModal.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/FormModal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { Controller } from 'react-hook-form' import styled, { css } from 'styled-components' diff --git a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/FormRow.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/FormRow.tsx similarity index 96% rename from app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/FormRow.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/FormRow.tsx index 40a67ff2c68..1481d3f40f9 100644 --- a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/FormRow.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/FormRow.tsx @@ -1,5 +1,5 @@ // presentational components for the wifi connect form -import * as React from 'react' +import type * as React from 'react' import styled from 'styled-components' import { FONT_WEIGHT_SEMIBOLD, SPACING } from '@opentrons/components' diff --git a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/KeyFileField.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/KeyFileField.tsx similarity index 95% rename from app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/KeyFileField.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/KeyFileField.tsx index da4e9d4db4b..376048ba420 100644 --- a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/KeyFileField.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/KeyFileField.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useRef } from 'react' import { SelectField } from '@opentrons/components' import { FormRow } from './FormRow' @@ -53,7 +53,7 @@ export const KeyFileField = (props: KeyFileFieldProps): JSX.Element => { fieldState ) const options = [makeKeyOptions(wifiKeys), ADD_NEW_KEY_OPTION_GROUP] - const uploadKeyRef = React.useRef(null) + const uploadKeyRef = useRef(null) const handleValueChange = (_: string, value: string): void => { if (value === ADD_NEW_KEY_VALUE) { diff --git a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/SecurityField.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/SecurityField.tsx similarity index 98% rename from app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/SecurityField.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/SecurityField.tsx index 142a5e6d624..c9fa4e0c069 100644 --- a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/SecurityField.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/SecurityField.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { SelectField } from '@opentrons/components' import { SECURITY_NONE, SECURITY_WPA_PSK } from '../constants' diff --git a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/TextField.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/TextField.tsx similarity index 92% rename from app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/TextField.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/TextField.tsx index 4cfa4c0c48c..2242dabea91 100644 --- a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/TextField.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/TextField.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useReducer } from 'react' import { LegacyInputField, @@ -32,7 +32,7 @@ export const TextField = (props: TextFieldProps): JSX.Element => { field, fieldState ) - const [showPw, toggleShowPw] = React.useReducer(show => !show, false) + const [showPw, toggleShowPw] = useReducer(show => !show, false) const type = isPassword && !showPw ? INPUT_TYPE_PASSWORD : INPUT_TYPE_TEXT return ( diff --git a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/UploadKeyInput.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/UploadKeyInput.tsx similarity index 100% rename from app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/UploadKeyInput.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/UploadKeyInput.tsx diff --git a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/__tests__/ConnectModal.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/__tests__/ConnectModal.test.tsx similarity index 100% rename from app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/__tests__/ConnectModal.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/__tests__/ConnectModal.test.tsx diff --git a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/__tests__/FormModal.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/__tests__/FormModal.test.tsx similarity index 100% rename from app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/__tests__/FormModal.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/__tests__/FormModal.test.tsx diff --git a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/__tests__/KeyFileField.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/__tests__/KeyFileField.test.tsx similarity index 100% rename from app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/__tests__/KeyFileField.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/__tests__/KeyFileField.test.tsx diff --git a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/__tests__/SecurityField.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/__tests__/SecurityField.test.tsx similarity index 100% rename from app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/__tests__/SecurityField.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/__tests__/SecurityField.test.tsx diff --git a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/__tests__/TextField.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/__tests__/TextField.test.tsx similarity index 100% rename from app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/__tests__/TextField.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/__tests__/TextField.test.tsx diff --git a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/__tests__/UploadKeyInput.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/__tests__/UploadKeyInput.test.tsx similarity index 100% rename from app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/__tests__/UploadKeyInput.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/__tests__/UploadKeyInput.test.tsx diff --git a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/__tests__/form-fields.test.ts b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/__tests__/form-fields.test.ts similarity index 100% rename from app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/__tests__/form-fields.test.ts rename to app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/__tests__/form-fields.test.ts diff --git a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/__tests__/form-state.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/__tests__/form-state.test.tsx similarity index 100% rename from app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/__tests__/form-state.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/__tests__/form-state.test.tsx diff --git a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/form-fields.ts b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/form-fields.ts similarity index 100% rename from app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/form-fields.ts rename to app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/form-fields.ts diff --git a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/form-state.ts b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/form-state.ts similarity index 100% rename from app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/form-state.ts rename to app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/form-state.ts diff --git a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/index.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/index.tsx similarity index 98% rename from app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/index.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/index.tsx index c9f726dcb76..3e1c731d33e 100644 --- a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/ConnectModal/index.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ConnectModal/index.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useForm } from 'react-hook-form' import { useResetFormOnSecurityChange } from './form-state' diff --git a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/DisconnectModal.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/DisconnectModal.tsx similarity index 98% rename from app/src/organisms/Devices/RobotSettings/ConnectNetwork/DisconnectModal.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/DisconnectModal.tsx index 251c40a26e0..d5efae7a976 100644 --- a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/DisconnectModal.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/DisconnectModal.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useEffect } from 'react' import { useTranslation } from 'react-i18next' import { useDispatch, useSelector } from 'react-redux' import last from 'lodash/last' @@ -113,7 +113,7 @@ export const DisconnectModal = ({ disconnectModalBody = t('disconnect_from_wifi_network_failure', { ssid }) } - React.useEffect(() => { + useEffect(() => { if (isDisconnected) { dispatch(clearWifiStatus(robotName)) } diff --git a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/ResultModal.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ResultModal.tsx similarity index 98% rename from app/src/organisms/Devices/RobotSettings/ConnectNetwork/ResultModal.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ResultModal.tsx index c929e4bf14b..6628c35dfc5 100644 --- a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/ResultModal.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/ResultModal.tsx @@ -1,5 +1,3 @@ -import * as React from 'react' - import { AlertModal, SpinnerModal } from '@opentrons/components' import * as Copy from './i18n' diff --git a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/SelectSsid/NetworkOptionLabel.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/SelectSsid/NetworkOptionLabel.tsx similarity index 98% rename from app/src/organisms/Devices/RobotSettings/ConnectNetwork/SelectSsid/NetworkOptionLabel.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/SelectSsid/NetworkOptionLabel.tsx index 61a78da004e..0a982be826f 100644 --- a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/SelectSsid/NetworkOptionLabel.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/SelectSsid/NetworkOptionLabel.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import styled from 'styled-components' import { Icon, FONT_BODY_1_DARK, SPACING } from '@opentrons/components' import { SECURITY_NONE } from '/app/redux/networking' diff --git a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/SelectSsid/__tests__/NetworkOptionLabel.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/SelectSsid/__tests__/NetworkOptionLabel.test.tsx similarity index 100% rename from app/src/organisms/Devices/RobotSettings/ConnectNetwork/SelectSsid/__tests__/NetworkOptionLabel.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/SelectSsid/__tests__/NetworkOptionLabel.test.tsx diff --git a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/SelectSsid/__tests__/SelectSsid.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/SelectSsid/__tests__/SelectSsid.test.tsx similarity index 100% rename from app/src/organisms/Devices/RobotSettings/ConnectNetwork/SelectSsid/__tests__/SelectSsid.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/SelectSsid/__tests__/SelectSsid.test.tsx diff --git a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/SelectSsid/index.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/SelectSsid/index.tsx similarity index 98% rename from app/src/organisms/Devices/RobotSettings/ConnectNetwork/SelectSsid/index.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/SelectSsid/index.tsx index 6e9aecd7ee8..b85cc72d563 100644 --- a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/SelectSsid/index.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/SelectSsid/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { CONTEXT_MENU } from '@opentrons/components' import { SelectField } from '/app/atoms/SelectField' import * as Copy from '../i18n' diff --git a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/__tests__/DisconnectModal.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/__tests__/DisconnectModal.test.tsx similarity index 99% rename from app/src/organisms/Devices/RobotSettings/ConnectNetwork/__tests__/DisconnectModal.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/__tests__/DisconnectModal.test.tsx index 5a6b46acdc7..7976784878d 100644 --- a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/__tests__/DisconnectModal.test.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/__tests__/DisconnectModal.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, vi, beforeEach, expect } from 'vitest' import '@testing-library/jest-dom/vitest' diff --git a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/__tests__/ResultModal.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/__tests__/ResultModal.test.tsx similarity index 100% rename from app/src/organisms/Devices/RobotSettings/ConnectNetwork/__tests__/ResultModal.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/__tests__/ResultModal.test.tsx diff --git a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/constants.ts b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/constants.ts similarity index 100% rename from app/src/organisms/Devices/RobotSettings/ConnectNetwork/constants.ts rename to app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/constants.ts diff --git a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/i18n.ts b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/i18n.ts similarity index 100% rename from app/src/organisms/Devices/RobotSettings/ConnectNetwork/i18n.ts rename to app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/i18n.ts diff --git a/app/src/organisms/Devices/RobotSettings/ConnectNetwork/types.ts b/app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/types.ts similarity index 100% rename from app/src/organisms/Devices/RobotSettings/ConnectNetwork/types.ts rename to app/src/organisms/Desktop/Devices/RobotSettings/ConnectNetwork/types.ts diff --git a/app/src/organisms/Devices/RobotSettings/RobotSettingsAdvanced.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/RobotSettingsAdvanced.tsx similarity index 98% rename from app/src/organisms/Devices/RobotSettings/RobotSettingsAdvanced.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/RobotSettingsAdvanced.tsx index 1d33e4dd41d..5d8ee694784 100644 --- a/app/src/organisms/Devices/RobotSettings/RobotSettingsAdvanced.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/RobotSettingsAdvanced.tsx @@ -14,7 +14,6 @@ import { import { Divider } from '/app/atoms/structure' import { ToggleButton } from '/app/atoms/buttons' -import { useIsRobotBusy } from '../hooks' import { DeviceReset, DisplayRobotName, @@ -31,7 +30,11 @@ import { UsageSettings, UseOlderAspirateBehavior, } from './AdvancedTab' -import { useRobot, useIsFlex } from '/app/redux-resources/robots' +import { + useRobot, + useIsFlex, + useIsRobotBusy, +} from '/app/redux-resources/robots' import { updateSetting, getRobotSettings, @@ -43,7 +46,7 @@ import { DeviceResetModal } from './AdvancedTab/AdvancedTabSlideouts/DeviceReset import { FactoryModeSlideout } from './AdvancedTab/AdvancedTabSlideouts/FactoryModeSlideout' import { handleUpdateBuildroot } from './UpdateBuildroot' import { getRobotSerialNumber, UNREACHABLE } from '/app/redux/discovery' -import { getTopPortalEl } from '../../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import { useIsEstopNotDisengaged } from '/app/resources/devices/hooks/useIsEstopNotDisengaged' import type { State, Dispatch } from '/app/redux/types' diff --git a/app/src/organisms/Devices/RobotSettings/RobotSettingsFeatureFlags.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/RobotSettingsFeatureFlags.tsx similarity index 100% rename from app/src/organisms/Devices/RobotSettings/RobotSettingsFeatureFlags.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/RobotSettingsFeatureFlags.tsx diff --git a/app/src/organisms/Devices/RobotSettings/RobotSettingsNetworking.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/RobotSettingsNetworking.tsx similarity index 97% rename from app/src/organisms/Devices/RobotSettings/RobotSettingsNetworking.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/RobotSettingsNetworking.tsx index 0ad19fff922..f51f90bbb03 100644 --- a/app/src/organisms/Devices/RobotSettings/RobotSettingsNetworking.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/RobotSettingsNetworking.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, useEffect } from 'react' import { createPortal } from 'react-dom' import { useTranslation } from 'react-i18next' import { useSelector, useDispatch } from 'react-redux' @@ -28,14 +28,13 @@ import { OPENTRONS_USB, } from '/app/redux/discovery' import { fetchStatus, getNetworkInterfaces } from '/app/redux/networking' -import { useIsFlex } from '/app/redux-resources/robots' -import { useIsRobotBusy } from '../hooks' +import { useIsFlex, useIsRobotBusy } from '/app/redux-resources/robots' import { DisconnectModal } from './ConnectNetwork/DisconnectModal' import { SelectNetwork } from './SelectNetwork' import { useIsEstopNotDisengaged } from '/app/resources/devices/hooks/useIsEstopNotDisengaged' import type { State, Dispatch } from '/app/redux/types' -import { getModalPortalEl } from '../../../App/portal' +import { getModalPortalEl } from '/app/App/portal' interface NetworkingProps { robotName: string updateRobotStatus: (isRobotBusy: boolean) => void @@ -56,9 +55,7 @@ export function RobotSettingsNetworking({ const isRobotBusy = useIsRobotBusy({ poll: true }) const isFlex = useIsFlex(robotName) - const [showDisconnectModal, setShowDisconnectModal] = React.useState( - false - ) + const [showDisconnectModal, setShowDisconnectModal] = useState(false) const canDisconnect = useCanDisconnect(robotName) @@ -90,7 +87,7 @@ export function RobotSettingsNetworking({ useInterval(() => dispatch(fetchStatus(robotName)), STATUS_REFRESH_MS, true) - React.useEffect(() => { + useEffect(() => { updateRobotStatus(isRobotBusy) }, [isRobotBusy, updateRobotStatus]) diff --git a/app/src/organisms/Devices/RobotSettings/SelectNetwork.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/SelectNetwork.tsx similarity index 95% rename from app/src/organisms/Devices/RobotSettings/SelectNetwork.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/SelectNetwork.tsx index 31994df4f74..403c88a04bd 100644 --- a/app/src/organisms/Devices/RobotSettings/SelectNetwork.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/SelectNetwork.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, useEffect } from 'react' import { createPortal } from 'react-dom' import { useDispatch, useSelector } from 'react-redux' import last from 'lodash/last' @@ -6,7 +6,7 @@ import last from 'lodash/last' import { useWifiList } from '/app/resources/networking/hooks' import * as RobotApi from '/app/redux/robot-api' import * as Networking from '/app/redux/networking' -import { getModalPortalEl } from '../../../App/portal' +import { getModalPortalEl } from '/app/App/portal' import { SelectSsid } from './ConnectNetwork/SelectSsid' import { ConnectModal } from './ConnectNetwork/ConnectModal' import { ResultModal } from './ConnectNetwork/ResultModal' @@ -35,7 +35,7 @@ export const SelectNetwork = ({ const eapOptions = useSelector((state: State) => Networking.getEapOptions(state, robotName) ) - const [changeState, setChangeState] = React.useState({ + const [changeState, setChangeState] = useState({ type: null, }) const dispatch = useDispatch() @@ -53,7 +53,7 @@ export const SelectNetwork = ({ } } - React.useEffect(() => { + useEffect(() => { // if we're connecting to a network, ensure we get the info needed to // populate the configuration forms if (changeState.type === CONNECT || changeState.type === JOIN_OTHER) { diff --git a/app/src/organisms/Devices/RobotSettings/SettingToggle.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/SettingToggle.tsx similarity index 97% rename from app/src/organisms/Devices/RobotSettings/SettingToggle.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/SettingToggle.tsx index dc3bd18a48a..4407779d888 100644 --- a/app/src/organisms/Devices/RobotSettings/SettingToggle.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/SettingToggle.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useDispatch } from 'react-redux' import { diff --git a/app/src/organisms/Devices/RobotSettings/UpdateBuildroot/MigrationWarningModal.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/UpdateBuildroot/MigrationWarningModal.tsx similarity index 98% rename from app/src/organisms/Devices/RobotSettings/UpdateBuildroot/MigrationWarningModal.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/UpdateBuildroot/MigrationWarningModal.tsx index 38d684555f3..cf41e3efe8a 100644 --- a/app/src/organisms/Devices/RobotSettings/UpdateBuildroot/MigrationWarningModal.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/UpdateBuildroot/MigrationWarningModal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { css } from 'styled-components' import { useTranslation } from 'react-i18next' diff --git a/app/src/organisms/Devices/RobotSettings/UpdateBuildroot/RobotUpdateProgressModal.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/UpdateBuildroot/RobotUpdateProgressModal.tsx similarity index 100% rename from app/src/organisms/Devices/RobotSettings/UpdateBuildroot/RobotUpdateProgressModal.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/UpdateBuildroot/RobotUpdateProgressModal.tsx diff --git a/app/src/organisms/Devices/RobotSettings/UpdateBuildroot/UpdateRobotModal.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/UpdateBuildroot/UpdateRobotModal.tsx similarity index 97% rename from app/src/organisms/Devices/RobotSettings/UpdateBuildroot/UpdateRobotModal.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/UpdateBuildroot/UpdateRobotModal.tsx index 0f01f83e33d..4b2225fe868 100644 --- a/app/src/organisms/Devices/RobotSettings/UpdateBuildroot/UpdateRobotModal.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/UpdateBuildroot/UpdateRobotModal.tsx @@ -1,10 +1,11 @@ -import * as React from 'react' +import { useEffect } from 'react' import { useTranslation } from 'react-i18next' import { useDispatch, useSelector } from 'react-redux' import styled, { css } from 'styled-components' import { ALIGN_CENTER, + Banner, BORDERS, DIRECTION_COLUMN, Flex, @@ -29,8 +30,7 @@ import { } from '/app/redux/robot-update' import { ExternalLink } from '/app/atoms/Link/ExternalLink' import { ReleaseNotes } from '/app/molecules/ReleaseNotes' -import { useIsRobotBusy } from '../../hooks' -import { Banner } from '/app/atoms/Banner' +import { useIsRobotBusy } from '/app/redux-resources/robots' import { useDispatchStartRobotUpdate } from '/app/redux/robot-update/hooks' import type { State, Dispatch } from '/app/redux/types' @@ -91,7 +91,7 @@ export function UpdateRobotModal({ disabledReason = updateFromFileDisabledReason else if (isRobotBusy) disabledReason = t('robot_busy_protocol') - React.useEffect(() => { + useEffect(() => { dispatch(robotUpdateChangelogSeen(robotName)) }, [robotName]) diff --git a/app/src/organisms/Devices/RobotSettings/UpdateBuildroot/ViewUpdateModal.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/UpdateBuildroot/ViewUpdateModal.tsx similarity index 86% rename from app/src/organisms/Devices/RobotSettings/UpdateBuildroot/ViewUpdateModal.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/UpdateBuildroot/ViewUpdateModal.tsx index 2a243063d28..dceeb7672f5 100644 --- a/app/src/organisms/Devices/RobotSettings/UpdateBuildroot/ViewUpdateModal.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/UpdateBuildroot/ViewUpdateModal.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { createPortal } from 'react-dom' import { useSelector } from 'react-redux' @@ -10,8 +10,8 @@ import { getRobotUpdateAvailable, } from '/app/redux/robot-update' import { getAvailableShellUpdate } from '/app/redux/shell' -import { getTopPortalEl } from '../../../../App/portal' -import { UpdateAppModal } from '/app/organisms/UpdateAppModal' +import { getTopPortalEl } from '/app/App/portal' +import { UpdateAppModal } from '/app/organisms/Desktop/UpdateAppModal' import { MigrationWarningModal } from './MigrationWarningModal' import { UpdateRobotModal } from './UpdateRobotModal' @@ -28,7 +28,7 @@ export function ViewUpdateModal( props: ViewUpdateModalProps ): JSX.Element | null { const { robotName, robot, closeModal } = props - const [showAppUpdateModal, setShowAppUpdateModal] = React.useState(true) + const [showAppUpdateModal, setShowAppUpdateModal] = useState(true) const updateInfo = useSelector((state: State) => getRobotUpdateInfo(state, robotName) @@ -44,10 +44,9 @@ export function ViewUpdateModal( useSelector(getAvailableShellUpdate) ) - const [ - showMigrationWarning, - setShowMigrationWarning, - ] = React.useState(robotSystemType === OT2_BALENA) + const [showMigrationWarning, setShowMigrationWarning] = useState( + robotSystemType === OT2_BALENA + ) const notNowButton = { onClick: closeModal, diff --git a/app/src/organisms/Devices/RobotSettings/UpdateBuildroot/__tests__/RobotUpdateProgressModal.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/UpdateBuildroot/__tests__/RobotUpdateProgressModal.test.tsx similarity index 99% rename from app/src/organisms/Devices/RobotSettings/UpdateBuildroot/__tests__/RobotUpdateProgressModal.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/UpdateBuildroot/__tests__/RobotUpdateProgressModal.test.tsx index 6d86f67d831..a2139f636bd 100644 --- a/app/src/organisms/Devices/RobotSettings/UpdateBuildroot/__tests__/RobotUpdateProgressModal.test.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/UpdateBuildroot/__tests__/RobotUpdateProgressModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { i18n } from '/app/i18n' import { act, fireEvent, screen } from '@testing-library/react' import { describe, it, vi, beforeEach, expect } from 'vitest' diff --git a/app/src/organisms/Devices/RobotSettings/UpdateBuildroot/__tests__/UpdateBuildroot.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/UpdateBuildroot/__tests__/UpdateBuildroot.test.tsx similarity index 100% rename from app/src/organisms/Devices/RobotSettings/UpdateBuildroot/__tests__/UpdateBuildroot.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/UpdateBuildroot/__tests__/UpdateBuildroot.test.tsx diff --git a/app/src/organisms/Devices/RobotSettings/UpdateBuildroot/__tests__/UpdateRobotModal.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/UpdateBuildroot/__tests__/UpdateRobotModal.test.tsx similarity index 96% rename from app/src/organisms/Devices/RobotSettings/UpdateBuildroot/__tests__/UpdateRobotModal.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/UpdateBuildroot/__tests__/UpdateRobotModal.test.tsx index 48419b629da..e77a0df9533 100644 --- a/app/src/organisms/Devices/RobotSettings/UpdateBuildroot/__tests__/UpdateRobotModal.test.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/UpdateBuildroot/__tests__/UpdateRobotModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { createStore } from 'redux' import { fireEvent, screen } from '@testing-library/react' import { describe, it, vi, beforeEach, expect } from 'vitest' @@ -12,14 +12,14 @@ import { } from '/app/redux/robot-update' import { getDiscoverableRobotByName } from '/app/redux/discovery' import { UpdateRobotModal, RELEASE_NOTES_URL_BASE } from '../UpdateRobotModal' -import { useIsRobotBusy } from '../../../hooks' +import { useIsRobotBusy } from '/app/redux-resources/robots' import type { Store } from 'redux' import type { State } from '/app/redux/types' vi.mock('/app/redux/robot-update') vi.mock('/app/redux/discovery') -vi.mock('../../../hooks') +vi.mock('/app/redux-resources/robots') const render = (props: React.ComponentProps) => { return renderWithProviders(, { diff --git a/app/src/organisms/Devices/RobotSettings/UpdateBuildroot/__tests__/ViewUpdateModal.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/UpdateBuildroot/__tests__/ViewUpdateModal.test.tsx similarity index 100% rename from app/src/organisms/Devices/RobotSettings/UpdateBuildroot/__tests__/ViewUpdateModal.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/UpdateBuildroot/__tests__/ViewUpdateModal.test.tsx diff --git a/app/src/organisms/Devices/RobotSettings/UpdateBuildroot/__tests__/useRobotUpdateInfo.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/UpdateBuildroot/__tests__/useRobotUpdateInfo.test.tsx similarity index 99% rename from app/src/organisms/Devices/RobotSettings/UpdateBuildroot/__tests__/useRobotUpdateInfo.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/UpdateBuildroot/__tests__/useRobotUpdateInfo.test.tsx index 418199bdc90..2897110aacc 100644 --- a/app/src/organisms/Devices/RobotSettings/UpdateBuildroot/__tests__/useRobotUpdateInfo.test.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/UpdateBuildroot/__tests__/useRobotUpdateInfo.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { renderHook } from '@testing-library/react' import { createStore } from 'redux' import { I18nextProvider } from 'react-i18next' diff --git a/app/src/organisms/Devices/RobotSettings/UpdateBuildroot/index.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/UpdateBuildroot/index.tsx similarity index 90% rename from app/src/organisms/Devices/RobotSettings/UpdateBuildroot/index.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/UpdateBuildroot/index.tsx index 6df07dd09f0..c5802005a82 100644 --- a/app/src/organisms/Devices/RobotSettings/UpdateBuildroot/index.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/UpdateBuildroot/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useRef, useEffect, useCallback } from 'react' import { useSelector, useDispatch } from 'react-redux' import NiceModal, { useModal } from '@ebay/nice-modal-react' @@ -30,21 +30,21 @@ export const handleUpdateBuildroot = ( const UpdateBuildroot = NiceModal.create( (props: UpdateBuildrootProps): JSX.Element | null => { const { robot } = props - const hasSeenSessionOnce = React.useRef(false) + const hasSeenSessionOnce = useRef(false) const modal = useModal() - const robotName = React.useRef(robot?.name ?? '') + const robotName = useRef(robot?.name ?? '') const dispatch = useDispatch() const session = useSelector(getRobotUpdateSession) if (!hasSeenSessionOnce.current && session) hasSeenSessionOnce.current = true - React.useEffect(() => { + useEffect(() => { if (robotName.current) { dispatch(setRobotUpdateSeen(robotName.current)) } }, [robotName]) - const ignoreUpdate = React.useCallback(() => { + const ignoreUpdate = useCallback(() => { if (robotName.current) { dispatch(robotUpdateIgnored(robotName.current)) } diff --git a/app/src/organisms/Devices/RobotSettings/UpdateBuildroot/useRobotUpdateInfo.ts b/app/src/organisms/Desktop/Devices/RobotSettings/UpdateBuildroot/useRobotUpdateInfo.ts similarity index 90% rename from app/src/organisms/Devices/RobotSettings/UpdateBuildroot/useRobotUpdateInfo.ts rename to app/src/organisms/Desktop/Devices/RobotSettings/UpdateBuildroot/useRobotUpdateInfo.ts index 1d39a17e157..d7a01f7d105 100644 --- a/app/src/organisms/Devices/RobotSettings/UpdateBuildroot/useRobotUpdateInfo.ts +++ b/app/src/organisms/Desktop/Devices/RobotSettings/UpdateBuildroot/useRobotUpdateInfo.ts @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useMemo, useState, useRef } from 'react' import { useSelector } from 'react-redux' import { getRobotUpdateDownloadProgress } from '/app/redux/robot-update' @@ -12,9 +12,7 @@ export function useRobotUpdateInfo( ): { updateStep: UpdateStep | null; progressPercent: number } { const progressPercent = useFindProgressPercentFrom(robotName, session) - const updateStep = React.useMemo(() => determineUpdateStepFrom(session), [ - session, - ]) + const updateStep = useMemo(() => determineUpdateStepFrom(session), [session]) return { updateStep, @@ -26,11 +24,11 @@ function useFindProgressPercentFrom( robotName: string, session: RobotUpdateSession | null ): number { - const [progressPercent, setProgressPercent] = React.useState(0) - const hasSeenDownloadFileStep = React.useRef(false) - const prevSeenUpdateStep = React.useRef(null) - const prevSeenStepProgress = React.useRef(0) - const currentStepWithProgress = React.useRef(-1) + const [progressPercent, setProgressPercent] = useState(0) + const hasSeenDownloadFileStep = useRef(false) + const prevSeenUpdateStep = useRef(null) + const prevSeenStepProgress = useRef(0) + const currentStepWithProgress = useRef(-1) const downloadProgress = useSelector((state: State) => getRobotUpdateDownloadProgress(state, robotName) diff --git a/app/src/organisms/Devices/RobotSettings/__tests__/RobotSettingsAdvanced.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/__tests__/RobotSettingsAdvanced.test.tsx similarity index 97% rename from app/src/organisms/Devices/RobotSettings/__tests__/RobotSettingsAdvanced.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/__tests__/RobotSettingsAdvanced.test.tsx index 94769e6d161..ee6bb051f28 100644 --- a/app/src/organisms/Devices/RobotSettings/__tests__/RobotSettingsAdvanced.test.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/__tests__/RobotSettingsAdvanced.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { screen } from '@testing-library/react' import { MemoryRouter } from 'react-router-dom' import { when } from 'vitest-when' @@ -8,8 +7,7 @@ import '@testing-library/jest-dom/vitest' import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' import { getShellUpdateState } from '/app/redux/shell' -import { useIsFlex } from '/app/redux-resources/robots' -import { useIsRobotBusy } from '../../hooks' +import { useIsRobotBusy, useIsFlex } from '/app/redux-resources/robots' import { DeviceReset, DisplayRobotName, @@ -40,7 +38,6 @@ vi.mock('/app/redux/shell/update', async importOriginal => { getShellUpdateState: vi.fn(), } }) -vi.mock('../../hooks') vi.mock('../AdvancedTab/DeviceReset') vi.mock('../AdvancedTab/DisplayRobotName') vi.mock('../AdvancedTab/EnableStatusLight') diff --git a/app/src/organisms/Devices/RobotSettings/__tests__/RobotSettingsFeatureFlags.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/__tests__/RobotSettingsFeatureFlags.test.tsx similarity index 98% rename from app/src/organisms/Devices/RobotSettings/__tests__/RobotSettingsFeatureFlags.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/__tests__/RobotSettingsFeatureFlags.test.tsx index f5c1ddc94ca..186148e6b44 100644 --- a/app/src/organisms/Devices/RobotSettings/__tests__/RobotSettingsFeatureFlags.test.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/__tests__/RobotSettingsFeatureFlags.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { screen } from '@testing-library/react' import { when } from 'vitest-when' import { describe, it, vi, beforeEach, expect } from 'vitest' diff --git a/app/src/organisms/Devices/RobotSettings/__tests__/RobotSettingsNetworking.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/__tests__/RobotSettingsNetworking.test.tsx similarity index 98% rename from app/src/organisms/Devices/RobotSettings/__tests__/RobotSettingsNetworking.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/__tests__/RobotSettingsNetworking.test.tsx index e39ca5d6281..4918671b49e 100644 --- a/app/src/organisms/Devices/RobotSettings/__tests__/RobotSettingsNetworking.test.tsx +++ b/app/src/organisms/Desktop/Devices/RobotSettings/__tests__/RobotSettingsNetworking.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { when } from 'vitest-when' import { fireEvent, screen } from '@testing-library/react' @@ -16,8 +15,7 @@ import { import * as Networking from '/app/redux/networking' import { useCanDisconnect, useWifiList } from '/app/resources/networking/hooks' import * as Fixtures from '/app/redux/networking/__fixtures__' -import { useIsFlex } from '/app/redux-resources/robots' -import { useIsRobotBusy } from '../../hooks' +import { useIsFlex, useIsRobotBusy } from '/app/redux-resources/robots' import { DisconnectModal } from '../ConnectNetwork/DisconnectModal' import { useIsEstopNotDisengaged } from '/app/resources/devices/hooks/useIsEstopNotDisengaged' @@ -31,7 +29,6 @@ vi.mock('/app/redux/networking') vi.mock('/app/redux/robot-api/selectors') vi.mock('/app/resources/networking/hooks') vi.mock('/app/redux-resources/robots') -vi.mock('../../hooks') vi.mock('../ConnectNetwork/DisconnectModal') vi.mock('/app/resources/devices/hooks/useIsEstopNotDisengaged') diff --git a/app/src/organisms/Devices/RobotSettings/__tests__/SelectNetwork.test.tsx b/app/src/organisms/Desktop/Devices/RobotSettings/__tests__/SelectNetwork.test.tsx similarity index 100% rename from app/src/organisms/Devices/RobotSettings/__tests__/SelectNetwork.test.tsx rename to app/src/organisms/Desktop/Devices/RobotSettings/__tests__/SelectNetwork.test.tsx diff --git a/app/src/organisms/Devices/RobotStatusHeader.tsx b/app/src/organisms/Desktop/Devices/RobotStatusHeader.tsx similarity index 99% rename from app/src/organisms/Devices/RobotStatusHeader.tsx rename to app/src/organisms/Desktop/Devices/RobotStatusHeader.tsx index 51afab298b4..77cad0933ea 100644 --- a/app/src/organisms/Devices/RobotStatusHeader.tsx +++ b/app/src/organisms/Desktop/Devices/RobotStatusHeader.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useTranslation } from 'react-i18next' import { useSelector, useDispatch } from 'react-redux' import { Link, useNavigate } from 'react-router-dom' diff --git a/app/src/organisms/RunPreview/index.tsx b/app/src/organisms/Desktop/Devices/RunPreview/index.tsx similarity index 97% rename from app/src/organisms/RunPreview/index.tsx rename to app/src/organisms/Desktop/Devices/RunPreview/index.tsx index 6cb9b50e052..e3baabba5de 100644 --- a/app/src/organisms/RunPreview/index.tsx +++ b/app/src/organisms/Desktop/Devices/RunPreview/index.tsx @@ -21,16 +21,16 @@ import { TYPOGRAPHY, } from '@opentrons/components' -import { useMostRecentCompletedAnalysis } from '../LabwarePositionCheck/useMostRecentCompletedAnalysis' import { useNotifyAllCommandsAsPreSerializedList, useNotifyRunQuery, useRunStatus, + useMostRecentCompletedAnalysis, + useLastRunCommand, } from '/app/resources/runs' import { CommandText, CommandIcon } from '/app/molecules/Command' import { Divider } from '/app/atoms/structure' -import { NAV_BAR_WIDTH } from '../../App/constants' -import { useLastRunCommand } from '../Devices/hooks/useLastRunCommand' +import { NAV_BAR_WIDTH } from '/app/App/constants' import type { RunStatus } from '@opentrons/api-client' import type { RobotType } from '@opentrons/shared-data' diff --git a/app/src/organisms/Devices/__tests__/CalibrationStatusBanner.test.tsx b/app/src/organisms/Desktop/Devices/__tests__/CalibrationStatusBanner.test.tsx similarity index 98% rename from app/src/organisms/Devices/__tests__/CalibrationStatusBanner.test.tsx rename to app/src/organisms/Desktop/Devices/__tests__/CalibrationStatusBanner.test.tsx index 8e893bb3851..fd50c5185ae 100644 --- a/app/src/organisms/Devices/__tests__/CalibrationStatusBanner.test.tsx +++ b/app/src/organisms/Desktop/Devices/__tests__/CalibrationStatusBanner.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { screen } from '@testing-library/react' import { describe, it, expect, vi, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' diff --git a/app/src/organisms/Devices/__tests__/ConnectionTroubleshootingModal.test.tsx b/app/src/organisms/Desktop/Devices/__tests__/ConnectionTroubleshootingModal.test.tsx similarity index 98% rename from app/src/organisms/Devices/__tests__/ConnectionTroubleshootingModal.test.tsx rename to app/src/organisms/Desktop/Devices/__tests__/ConnectionTroubleshootingModal.test.tsx index 01e73dc9880..d725929a081 100644 --- a/app/src/organisms/Devices/__tests__/ConnectionTroubleshootingModal.test.tsx +++ b/app/src/organisms/Desktop/Devices/__tests__/ConnectionTroubleshootingModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, expect, vi, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' import { renderWithProviders } from '/app/__testing-utils__' diff --git a/app/src/organisms/Devices/__tests__/DevicesEmptyState.test.tsx b/app/src/organisms/Desktop/Devices/__tests__/DevicesEmptyState.test.tsx similarity index 97% rename from app/src/organisms/Devices/__tests__/DevicesEmptyState.test.tsx rename to app/src/organisms/Desktop/Devices/__tests__/DevicesEmptyState.test.tsx index 75448e8611e..e05d8499550 100644 --- a/app/src/organisms/Devices/__tests__/DevicesEmptyState.test.tsx +++ b/app/src/organisms/Desktop/Devices/__tests__/DevicesEmptyState.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, vi } from 'vitest' import '@testing-library/jest-dom/vitest' diff --git a/app/src/organisms/Devices/__tests__/EstopBanner.test.tsx b/app/src/organisms/Desktop/Devices/__tests__/EstopBanner.test.tsx similarity index 97% rename from app/src/organisms/Devices/__tests__/EstopBanner.test.tsx rename to app/src/organisms/Desktop/Devices/__tests__/EstopBanner.test.tsx index 788588ab747..7d052568378 100644 --- a/app/src/organisms/Devices/__tests__/EstopBanner.test.tsx +++ b/app/src/organisms/Desktop/Devices/__tests__/EstopBanner.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { screen } from '@testing-library/react' import { describe, it, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' diff --git a/app/src/organisms/Devices/__tests__/HistoricalProtocolRun.test.tsx b/app/src/organisms/Desktop/Devices/__tests__/HistoricalProtocolRun.test.tsx similarity index 98% rename from app/src/organisms/Devices/__tests__/HistoricalProtocolRun.test.tsx rename to app/src/organisms/Desktop/Devices/__tests__/HistoricalProtocolRun.test.tsx index e91517e45e8..070f1c614de 100644 --- a/app/src/organisms/Devices/__tests__/HistoricalProtocolRun.test.tsx +++ b/app/src/organisms/Desktop/Devices/__tests__/HistoricalProtocolRun.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { screen } from '@testing-library/react' import { describe, it, vi, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' diff --git a/app/src/organisms/Devices/__tests__/HistoricalProtocolRunOverflowMenu.test.tsx b/app/src/organisms/Desktop/Devices/__tests__/HistoricalProtocolRunOverflowMenu.test.tsx similarity index 94% rename from app/src/organisms/Devices/__tests__/HistoricalProtocolRunOverflowMenu.test.tsx rename to app/src/organisms/Desktop/Devices/__tests__/HistoricalProtocolRunOverflowMenu.test.tsx index bd6aa3e5cba..2b2706c9645 100644 --- a/app/src/organisms/Devices/__tests__/HistoricalProtocolRunOverflowMenu.test.tsx +++ b/app/src/organisms/Desktop/Devices/__tests__/HistoricalProtocolRunOverflowMenu.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, vi, beforeEach, expect } from 'vitest' import { when } from 'vitest-when' @@ -13,13 +13,13 @@ import runRecord from '../ProtocolRun/ProtocolRunHeader/RunHeaderModalContainer/ import { useDownloadRunLog } from '../hooks' import { useRobot } from '/app/redux-resources/robots' import { useTrackProtocolRunEvent } from '/app/redux-resources/analytics' -import { useRunControls } from '../../RunTimeControl/hooks' +import { useRunControls } from '/app/organisms/RunTimeControl' import { useTrackEvent, ANALYTICS_PROTOCOL_PROCEED_TO_RUN, } from '/app/redux/analytics' import { useIsRobotOnWrongVersionOfSoftware } from '/app/redux/robot-update' -import { useIsEstopNotDisengaged } from '/app/resources/devices/hooks/useIsEstopNotDisengaged' +import { useIsEstopNotDisengaged } from '/app/resources/devices' import { HistoricalProtocolRunOverflowMenu } from '../HistoricalProtocolRunOverflowMenu' import { useNotifyAllCommandsQuery } from '/app/resources/runs' @@ -29,11 +29,11 @@ import type { CommandsData } from '@opentrons/api-client' vi.mock('/app/redux/analytics') vi.mock('/app/redux/robot-update/selectors') vi.mock('/app/redux-resources/robots') -vi.mock('/app/organisms/Devices/hooks') -vi.mock('../../RunTimeControl/hooks') +vi.mock('../hooks') +vi.mock('/app/organisms/RunTimeControl') vi.mock('/app/redux/analytics') vi.mock('/app/redux/config') -vi.mock('/app/resources/devices/hooks/useIsEstopNotDisengaged') +vi.mock('/app/resources/devices') vi.mock('/app/resources/runs') vi.mock('/app/redux/robot-update') vi.mock('/app/redux-resources/analytics') diff --git a/app/src/organisms/Devices/__tests__/InstrumentsAndModules.test.tsx b/app/src/organisms/Desktop/Devices/__tests__/InstrumentsAndModules.test.tsx similarity index 90% rename from app/src/organisms/Devices/__tests__/InstrumentsAndModules.test.tsx rename to app/src/organisms/Desktop/Devices/__tests__/InstrumentsAndModules.test.tsx index cb9ab747ed3..4bfb1339d39 100644 --- a/app/src/organisms/Devices/__tests__/InstrumentsAndModules.test.tsx +++ b/app/src/organisms/Desktop/Devices/__tests__/InstrumentsAndModules.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { when } from 'vitest-when' import { screen } from '@testing-library/react' import { describe, it, vi, beforeEach, afterEach, expect } from 'vitest' @@ -11,19 +10,17 @@ import { } from '@opentrons/react-api-client' import { i18n } from '/app/i18n' -import { Banner } from '/app/atoms/Banner' import { mockMagneticModule } from '/app/redux/modules/__fixtures__' -import { useIsFlex } from '/app/redux-resources/robots' -import { useIsRobotViewable, useRunStatuses } from '../hooks' -import { ModuleCard } from '../../ModuleCard' +import { useIsFlex, useIsRobotViewable } from '/app/redux-resources/robots' +import { ModuleCard } from '/app/organisms/ModuleCard' import { InstrumentsAndModules } from '../InstrumentsAndModules' -import { GripperCard } from '../../GripperCard' +import { GripperCard } from '../GripperCard' import { PipetteCard } from '../PipetteCard' import { FlexPipetteCard } from '../PipetteCard/FlexPipetteCard' import { PipetteRecalibrationWarning } from '../PipetteCard/PipetteRecalibrationWarning' -import { getShowPipetteCalibrationWarning } from '../utils' +import { getShowPipetteCalibrationWarning } from '/app/transformations/instruments' import { useIsEstopNotDisengaged } from '/app/resources/devices/hooks/useIsEstopNotDisengaged' -import { useCurrentRunId } from '/app/resources/runs' +import { useCurrentRunId, useRunStatuses } from '/app/resources/runs' import type * as Components from '@opentrons/components' vi.mock('@opentrons/components', async importOriginal => { @@ -34,16 +31,14 @@ vi.mock('@opentrons/components', async importOriginal => { } }) vi.mock('@opentrons/react-api-client') -vi.mock('../hooks') -vi.mock('../../GripperCard') -vi.mock('../../ModuleCard') +vi.mock('../GripperCard') +vi.mock('/app/organisms/ModuleCard') vi.mock('../PipetteCard') vi.mock('../PipetteCard/FlexPipetteCard') vi.mock('../PipetteCard/PipetteRecalibrationWarning') vi.mock('/app/resources/runs') vi.mock('/app/redux-resources/robots') -vi.mock('/app/atoms/Banner') -vi.mock('../utils') +vi.mock('/app/transformations/instruments') vi.mock('/app/resources/devices/hooks/useIsEstopNotDisengaged') const ROBOT_NAME = 'otie' @@ -122,7 +117,9 @@ describe('InstrumentsAndModules', () => { it('renders the protocol loaded banner when protocol is loaded and not terminal state', () => { vi.mocked(useCurrentRunId).mockReturnValue('RUNID') render() - expect(vi.mocked(Banner)).toHaveBeenCalled() + screen.getByText( + 'Robot must be on the network to see connected instruments and modules' + ) }) it('renders 1 pipette card when a 96 channel is attached', () => { when(useIsFlex).calledWith(ROBOT_NAME).thenReturn(true) diff --git a/app/src/organisms/Devices/__tests__/RecentProtocolRuns.test.tsx b/app/src/organisms/Desktop/Devices/__tests__/RecentProtocolRuns.test.tsx similarity index 92% rename from app/src/organisms/Devices/__tests__/RecentProtocolRuns.test.tsx rename to app/src/organisms/Desktop/Devices/__tests__/RecentProtocolRuns.test.tsx index bb183476da5..3b258d2c199 100644 --- a/app/src/organisms/Devices/__tests__/RecentProtocolRuns.test.tsx +++ b/app/src/organisms/Desktop/Devices/__tests__/RecentProtocolRuns.test.tsx @@ -1,11 +1,10 @@ -import * as React from 'react' import { screen } from '@testing-library/react' import { describe, it, vi, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' import { renderWithProviders } from '/app/__testing-utils__' -import { useNotifyAllRunsQuery } from '/app/resources/runs' +import { useNotifyAllRunsQuery, useRunStatuses } from '/app/resources/runs' import { i18n } from '/app/i18n' -import { useIsRobotViewable, useRunStatuses } from '../hooks' +import { useIsRobotViewable } from '/app/redux-resources/robots' import { RecentProtocolRuns } from '../RecentProtocolRuns' import { HistoricalProtocolRun } from '../HistoricalProtocolRun' @@ -13,7 +12,7 @@ import type { UseQueryResult } from 'react-query' import type { Runs } from '@opentrons/api-client' import type { AxiosError } from 'axios' -vi.mock('../hooks') +vi.mock('/app/redux-resources/robots') vi.mock('/app/resources/runs') vi.mock('../HistoricalProtocolRun') diff --git a/app/src/organisms/Devices/__tests__/RobotCard.test.tsx b/app/src/organisms/Desktop/Devices/__tests__/RobotCard.test.tsx similarity index 93% rename from app/src/organisms/Devices/__tests__/RobotCard.test.tsx rename to app/src/organisms/Desktop/Devices/__tests__/RobotCard.test.tsx index e5c09e3ebb8..89d59c47cf8 100644 --- a/app/src/organisms/Devices/__tests__/RobotCard.test.tsx +++ b/app/src/organisms/Desktop/Devices/__tests__/RobotCard.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { when } from 'vitest-when' import { screen } from '@testing-library/react' @@ -10,7 +10,7 @@ import { mockOT2ServerHealthResponse, mockOT3HealthResponse, mockOT3ServerHealthResponse, -} from '../../../../../discovery-client/src/fixtures' +} from '../../../../../../discovery-client/src/fixtures' import { i18n } from '/app/i18n' import { mockFetchModulesSuccessActionPayloadModules } from '/app/redux/modules/__fixtures__' @@ -21,12 +21,13 @@ import { import { mockConnectableRobot } from '/app/redux/discovery/__fixtures__' import { getRobotUpdateDisplayInfo } from '/app/redux/robot-update' import { getRobotModelByName } from '/app/redux/discovery' +import { useAttachedModules } from '/app/resources/modules' import { HEALTH_STATUS_OK, ROBOT_MODEL_OT2, ROBOT_MODEL_OT3, } from '/app/redux/discovery/constants' -import { useAttachedModules, useAttachedPipettes } from '../hooks' +import { useAttachedPipettes } from '/app/resources/instruments' import { UpdateRobotBanner } from '../../UpdateRobotBanner' import { RobotOverflowMenu } from '../RobotOverflowMenu' import { RobotStatusHeader } from '../RobotStatusHeader' @@ -34,19 +35,20 @@ import { RobotCard } from '../RobotCard' import { ErrorRecoveryBanner, useErrorRecoveryBanner, -} from '../../ErrorRecoveryBanner' +} from '../ErrorRecoveryBanner' import type { State } from '/app/redux/types' vi.mock('/app/redux/robot-update/selectors') vi.mock('/app/redux/discovery/selectors') -vi.mock('../hooks') +vi.mock('/app/resources/instruments') +vi.mock('/app/resources/modules') vi.mock('/app/redux-resources/robots') vi.mock('../../UpdateRobotBanner') vi.mock('/app/redux/config') vi.mock('../RobotOverflowMenu') vi.mock('../RobotStatusHeader') -vi.mock('../../ErrorRecoveryBanner') +vi.mock('../ErrorRecoveryBanner') const OT2_PNG_FILE_NAME = '/app/src/assets/images/OT2-R_HERO.png' const FLEX_PNG_FILE_NAME = '/app/src/assets/images/FLEX.png' diff --git a/app/src/organisms/Devices/__tests__/RobotOverflowMenu.test.tsx b/app/src/organisms/Desktop/Devices/__tests__/RobotOverflowMenu.test.tsx similarity index 91% rename from app/src/organisms/Devices/__tests__/RobotOverflowMenu.test.tsx rename to app/src/organisms/Desktop/Devices/__tests__/RobotOverflowMenu.test.tsx index 0a8c56914b7..b3735e72a77 100644 --- a/app/src/organisms/Devices/__tests__/RobotOverflowMenu.test.tsx +++ b/app/src/organisms/Desktop/Devices/__tests__/RobotOverflowMenu.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { fireEvent, screen } from '@testing-library/react' import { describe, it, vi, beforeEach, expect } from 'vitest' @@ -6,10 +6,10 @@ import '@testing-library/jest-dom/vitest' import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' import { useCurrentRunId } from '/app/resources/runs' -import { ChooseProtocolSlideout } from '../../ChooseProtocolSlideout' +import { ChooseProtocolSlideout } from '/app/organisms/Desktop/ChooseProtocolSlideout' import { RobotOverflowMenu } from '../RobotOverflowMenu' import { useIsRobotOnWrongVersionOfSoftware } from '/app/redux/robot-update' -import { useIsRobotBusy } from '../hooks' +import { useIsRobotBusy } from '/app/redux-resources/robots' import { mockUnreachableRobot, @@ -18,8 +18,9 @@ import { vi.mock('/app/redux/robot-update/hooks') vi.mock('/app/resources/runs') -vi.mock('../../ChooseProtocolSlideout') +vi.mock('/app/organisms/Desktop/ChooseProtocolSlideout') vi.mock('../hooks') +vi.mock('/app/redux-resources/robots') vi.mock('/app/resources/devices/hooks/useIsEstopNotDisengaged') const render = (props: React.ComponentProps) => { diff --git a/app/src/organisms/Devices/__tests__/RobotOverview.test.tsx b/app/src/organisms/Desktop/Devices/__tests__/RobotOverview.test.tsx similarity index 96% rename from app/src/organisms/Devices/__tests__/RobotOverview.test.tsx rename to app/src/organisms/Desktop/Devices/__tests__/RobotOverview.test.tsx index 8f9a570dd7b..5d2513bec23 100644 --- a/app/src/organisms/Devices/__tests__/RobotOverview.test.tsx +++ b/app/src/organisms/Desktop/Devices/__tests__/RobotOverview.test.tsx @@ -1,15 +1,15 @@ -import * as React from 'react' +import type * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { when } from 'vitest-when' import { screen, fireEvent } from '@testing-library/react' import { describe, it, vi, beforeEach, expect } from 'vitest' import '@testing-library/jest-dom/vitest' import { renderWithProviders } from '/app/__testing-utils__' -import * as DiscoveryClientFixtures from '../../../../../discovery-client/src/fixtures' +import * as DiscoveryClientFixtures from '../../../../../../discovery-client/src/fixtures' import { useAuthorization } from '@opentrons/react-api-client' import { i18n } from '/app/i18n' -import { useCurrentRunId } from '/app/resources/runs' +import { useCurrentRunId, useRunStatuses } from '/app/resources/runs' import { mockConnectableRobot } from '/app/redux/discovery/__fixtures__' import { getRobotUpdateDisplayInfo } from '/app/redux/robot-update' import { getConfig, useFeatureFlag } from '/app/redux/config' @@ -22,14 +22,13 @@ import { OPENTRONS_USB, ROBOT_MODEL_OT3, } from '/app/redux/discovery/constants' -import { useRobot } from '/app/redux-resources/robots' import { - useCalibrationTaskList, useIsRobotBusy, - useLights, - useRunStatuses, useIsRobotViewable, -} from '../hooks' + useRobot, +} from '/app/redux-resources/robots' +import { useLights } from '/app/resources/devices' +import { useCalibrationTaskList } from '../hooks' import { expectedBadDeckTaskList, expectedBadDeckAndPipetteOffsetTaskList, @@ -47,7 +46,7 @@ import { RobotOverviewOverflowMenu } from '../RobotOverviewOverflowMenu' import { ErrorRecoveryBanner, useErrorRecoveryBanner, -} from '../../ErrorRecoveryBanner' +} from '../ErrorRecoveryBanner' import type { Config } from '/app/redux/config/types' import type { DiscoveryClientRobotAddress } from '/app/redux/discovery/types' @@ -66,12 +65,13 @@ vi.mock('/app/redux/robot-update/selectors') vi.mock('/app/redux/config') vi.mock('/app/redux/discovery/selectors') vi.mock('/app/resources/runs') +vi.mock('/app/resources/devices') vi.mock('../hooks') vi.mock('/app/redux-resources/robots') vi.mock('../RobotStatusHeader') vi.mock('../../UpdateRobotBanner') vi.mock('../RobotOverviewOverflowMenu') -vi.mock('../../ErrorRecoveryBanner') +vi.mock('../ErrorRecoveryBanner') const OT2_PNG_FILE_NAME = '/app/src/assets/images/OT2-R_HERO.png' const FLEX_PNG_FILE_NAME = '/app/src/assets/images/FLEX.png' diff --git a/app/src/organisms/Devices/__tests__/RobotOverviewOverflowMenu.test.tsx b/app/src/organisms/Desktop/Devices/__tests__/RobotOverviewOverflowMenu.test.tsx similarity index 95% rename from app/src/organisms/Devices/__tests__/RobotOverviewOverflowMenu.test.tsx rename to app/src/organisms/Desktop/Devices/__tests__/RobotOverviewOverflowMenu.test.tsx index 30fc3a30efa..c4d384d0805 100644 --- a/app/src/organisms/Devices/__tests__/RobotOverviewOverflowMenu.test.tsx +++ b/app/src/organisms/Desktop/Devices/__tests__/RobotOverviewOverflowMenu.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { fireEvent, screen } from '@testing-library/react' import { when } from 'vitest-when' @@ -16,10 +16,10 @@ import { mockUnreachableRobot, } from '/app/redux/discovery/__fixtures__' import { useCanDisconnect } from '/app/resources/networking/hooks' -import { DisconnectModal } from '/app/organisms/Devices/RobotSettings/ConnectNetwork/DisconnectModal' -import { ChooseProtocolSlideout } from '../../ChooseProtocolSlideout' +import { DisconnectModal } from '../RobotSettings/ConnectNetwork/DisconnectModal' +import { ChooseProtocolSlideout } from '/app/organisms/Desktop/ChooseProtocolSlideout' import { useCurrentRunId } from '/app/resources/runs' -import { useIsRobotBusy } from '../hooks' +import { useIsRobotBusy } from '/app/redux-resources/robots' import { handleUpdateBuildroot } from '../RobotSettings/UpdateBuildroot' import { useIsEstopNotDisengaged } from '/app/resources/devices/hooks/useIsEstopNotDisengaged' import { RobotOverviewOverflowMenu } from '../RobotOverviewOverflowMenu' @@ -29,11 +29,12 @@ vi.mock('/app/redux/robot-admin') vi.mock('../hooks') vi.mock('/app/redux/robot-update') vi.mock('/app/resources/networking/hooks') -vi.mock('/app/organisms/Devices/RobotSettings/ConnectNetwork/DisconnectModal') -vi.mock('../../ChooseProtocolSlideout') +vi.mock('../RobotSettings/ConnectNetwork/DisconnectModal') +vi.mock('/app/organisms/Desktop/ChooseProtocolSlideout') vi.mock('/app/resources/runs') vi.mock('../RobotSettings/UpdateBuildroot') vi.mock('/app/resources/devices/hooks/useIsEstopNotDisengaged') +vi.mock('/app/redux-resources/robots') const render = ( props: React.ComponentProps diff --git a/app/src/organisms/Devices/__tests__/RobotStatusHeader.test.tsx b/app/src/organisms/Desktop/Devices/__tests__/RobotStatusHeader.test.tsx similarity index 99% rename from app/src/organisms/Devices/__tests__/RobotStatusHeader.test.tsx rename to app/src/organisms/Desktop/Devices/__tests__/RobotStatusHeader.test.tsx index 627c08bcdfe..465c46cc566 100644 --- a/app/src/organisms/Devices/__tests__/RobotStatusHeader.test.tsx +++ b/app/src/organisms/Desktop/Devices/__tests__/RobotStatusHeader.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { RUN_STATUS_RUNNING } from '@opentrons/api-client' import { when } from 'vitest-when' diff --git a/app/src/organisms/Devices/__tests__/utils.test.tsx b/app/src/organisms/Desktop/Devices/__tests__/utils.test.tsx similarity index 84% rename from app/src/organisms/Devices/__tests__/utils.test.tsx rename to app/src/organisms/Desktop/Devices/__tests__/utils.test.tsx index c14b38bfbfd..9df883b3c5d 100644 --- a/app/src/organisms/Devices/__tests__/utils.test.tsx +++ b/app/src/organisms/Desktop/Devices/__tests__/utils.test.tsx @@ -1,7 +1,6 @@ import { describe, it, expect } from 'vitest' import '@testing-library/jest-dom/vitest' import { - formatTimestamp, getIs96ChannelPipetteAttached, getOffsetCalibrationForMount, } from '../utils' @@ -15,28 +14,6 @@ import type { FetchPipettesResponsePipette, } from '/app/redux/pipettes/types' -describe('formatTimestamp', () => { - it('should format an ISO 8601 date string', () => { - const date = '2021-03-07T18:44:49.366581+00:00' - - expect(formatTimestamp(date)).toMatch( - /^(\d{2})\/(\d{2})\/(\d{4}) (\d{2}):(\d{2}):(\d{2})$/ - ) - }) - - it('should pass through a non-ISO 8601 date string', () => { - const date = '2/22/2022 1:00' - - expect(formatTimestamp(date)).toEqual(date) - }) - - it('should pass through a non-date string', () => { - const noDate = 'A Protocol For Otie' - - expect(formatTimestamp(noDate)).toEqual(noDate) - }) -}) - describe('getIs96ChannelPipetteAttached hook', () => { it('returns false when there is no pipette attached on the left mount', () => { const result = getIs96ChannelPipetteAttached(null) diff --git a/app/src/organisms/Devices/constants.ts b/app/src/organisms/Desktop/Devices/constants.ts similarity index 100% rename from app/src/organisms/Devices/constants.ts rename to app/src/organisms/Desktop/Devices/constants.ts diff --git a/app/src/organisms/Devices/hooks/__fixtures__/taskListFixtures.ts b/app/src/organisms/Desktop/Devices/hooks/__fixtures__/taskListFixtures.ts similarity index 99% rename from app/src/organisms/Devices/hooks/__fixtures__/taskListFixtures.ts rename to app/src/organisms/Desktop/Devices/hooks/__fixtures__/taskListFixtures.ts index f21e8eb7294..de6c33f799f 100644 --- a/app/src/organisms/Devices/hooks/__fixtures__/taskListFixtures.ts +++ b/app/src/organisms/Desktop/Devices/hooks/__fixtures__/taskListFixtures.ts @@ -1,5 +1,5 @@ import { vi } from 'vitest' -import { formatTimestamp } from '../../utils' +import { formatTimestamp } from '/app/transformations/runs' import type { Mock } from 'vitest' import type { @@ -7,7 +7,7 @@ import type { PipetteOffsetCalibration, } from '/app/redux/calibration/api-types' import type { AttachedPipettesByMount } from '/app/redux/pipettes/types' -import type { TaskListProps } from '../../../TaskList/types' +import type { TaskListProps } from '/app/molecules/TaskList' import type { PipetteModelSpecs } from '@opentrons/shared-data' export const TASK_COUNT = 3 diff --git a/app/src/organisms/Devices/hooks/__tests__/useCalibrationTaskList.test.tsx b/app/src/organisms/Desktop/Devices/hooks/__tests__/useCalibrationTaskList.test.tsx similarity index 99% rename from app/src/organisms/Devices/hooks/__tests__/useCalibrationTaskList.test.tsx rename to app/src/organisms/Desktop/Devices/hooks/__tests__/useCalibrationTaskList.test.tsx index 127011ec054..9d675c77f7e 100644 --- a/app/src/organisms/Devices/hooks/__tests__/useCalibrationTaskList.test.tsx +++ b/app/src/organisms/Desktop/Devices/hooks/__tests__/useCalibrationTaskList.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { createStore } from 'redux' import { I18nextProvider } from 'react-i18next' import { Provider } from 'react-redux' @@ -12,7 +12,7 @@ import { useCalibrationStatusQuery, } from '@opentrons/react-api-client' import { useCalibrationTaskList } from '../useCalibrationTaskList' -import { useAttachedPipettes } from '..' +import { useAttachedPipettes } from '/app/resources/instruments' import { TASK_COUNT, mockAttachedPipettesResponse, @@ -33,7 +33,7 @@ import { i18n } from '/app/i18n' import type { Store } from 'redux' import type { State } from '/app/redux/types' -vi.mock('../') +vi.mock('/app/resources/instruments') vi.mock('@opentrons/react-api-client') const mockPipOffsetCalLauncher = vi.fn() diff --git a/app/src/organisms/Devices/hooks/__tests__/useDeckCalibrationData.test.tsx b/app/src/organisms/Desktop/Devices/hooks/__tests__/useDeckCalibrationData.test.tsx similarity index 99% rename from app/src/organisms/Devices/hooks/__tests__/useDeckCalibrationData.test.tsx rename to app/src/organisms/Desktop/Devices/hooks/__tests__/useDeckCalibrationData.test.tsx index e91bf298088..c08f0e3e1e5 100644 --- a/app/src/organisms/Devices/hooks/__tests__/useDeckCalibrationData.test.tsx +++ b/app/src/organisms/Desktop/Devices/hooks/__tests__/useDeckCalibrationData.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { when } from 'vitest-when' import { vi, it, expect, describe, beforeEach, afterEach } from 'vitest' import { Provider } from 'react-redux' diff --git a/app/src/organisms/Devices/hooks/__tests__/useLPCSuccessToast.test.ts b/app/src/organisms/Desktop/Devices/hooks/__tests__/useLPCSuccessToast.test.ts similarity index 100% rename from app/src/organisms/Devices/hooks/__tests__/useLPCSuccessToast.test.ts rename to app/src/organisms/Desktop/Devices/hooks/__tests__/useLPCSuccessToast.test.ts diff --git a/app/src/organisms/Devices/hooks/__tests__/usePipetteOffsetCalibration.test.tsx b/app/src/organisms/Desktop/Devices/hooks/__tests__/usePipetteOffsetCalibration.test.tsx similarity index 98% rename from app/src/organisms/Devices/hooks/__tests__/usePipetteOffsetCalibration.test.tsx rename to app/src/organisms/Desktop/Devices/hooks/__tests__/usePipetteOffsetCalibration.test.tsx index e3f2cf6618f..2c23dcb0f61 100644 --- a/app/src/organisms/Devices/hooks/__tests__/usePipetteOffsetCalibration.test.tsx +++ b/app/src/organisms/Desktop/Devices/hooks/__tests__/usePipetteOffsetCalibration.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { vi, it, expect, describe, beforeEach, afterEach } from 'vitest' import { when } from 'vitest-when' import { Provider } from 'react-redux' diff --git a/app/src/organisms/Devices/hooks/__tests__/usePipetteOffsetCalibrations.test.tsx b/app/src/organisms/Desktop/Devices/hooks/__tests__/usePipetteOffsetCalibrations.test.tsx similarity index 98% rename from app/src/organisms/Devices/hooks/__tests__/usePipetteOffsetCalibrations.test.tsx rename to app/src/organisms/Desktop/Devices/hooks/__tests__/usePipetteOffsetCalibrations.test.tsx index 33c33fe27c2..9305b34af38 100644 --- a/app/src/organisms/Devices/hooks/__tests__/usePipetteOffsetCalibrations.test.tsx +++ b/app/src/organisms/Desktop/Devices/hooks/__tests__/usePipetteOffsetCalibrations.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { vi, it, expect, describe, beforeEach, afterEach } from 'vitest' import { when } from 'vitest-when' import { renderHook } from '@testing-library/react' diff --git a/app/src/organisms/Devices/hooks/__tests__/useRunStartedOrLegacySessionInProgress.test.tsx b/app/src/organisms/Desktop/Devices/hooks/__tests__/useRunStartedOrLegacySessionInProgress.test.tsx similarity index 100% rename from app/src/organisms/Devices/hooks/__tests__/useRunStartedOrLegacySessionInProgress.test.tsx rename to app/src/organisms/Desktop/Devices/hooks/__tests__/useRunStartedOrLegacySessionInProgress.test.tsx diff --git a/app/src/organisms/Devices/hooks/__tests__/useSyncRobotClock.test.tsx b/app/src/organisms/Desktop/Devices/hooks/__tests__/useSyncRobotClock.test.tsx similarity index 97% rename from app/src/organisms/Devices/hooks/__tests__/useSyncRobotClock.test.tsx rename to app/src/organisms/Desktop/Devices/hooks/__tests__/useSyncRobotClock.test.tsx index 9a7f6c6ab18..02b593fbaab 100644 --- a/app/src/organisms/Devices/hooks/__tests__/useSyncRobotClock.test.tsx +++ b/app/src/organisms/Desktop/Devices/hooks/__tests__/useSyncRobotClock.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { vi, it, expect, describe, beforeEach, afterEach } from 'vitest' import { Provider } from 'react-redux' import { createStore } from 'redux' diff --git a/app/src/organisms/Devices/hooks/__tests__/useTipLengthCalibrations.test.tsx b/app/src/organisms/Desktop/Devices/hooks/__tests__/useTipLengthCalibrations.test.tsx similarity index 98% rename from app/src/organisms/Devices/hooks/__tests__/useTipLengthCalibrations.test.tsx rename to app/src/organisms/Desktop/Devices/hooks/__tests__/useTipLengthCalibrations.test.tsx index 4162c310037..7281b009b5c 100644 --- a/app/src/organisms/Devices/hooks/__tests__/useTipLengthCalibrations.test.tsx +++ b/app/src/organisms/Desktop/Devices/hooks/__tests__/useTipLengthCalibrations.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { vi, it, expect, describe, beforeEach, afterEach } from 'vitest' import { when } from 'vitest-when' import { QueryClient, QueryClientProvider } from 'react-query' diff --git a/app/src/organisms/Devices/hooks/__tests__/useTrackCreateProtocolRunEvent.test.tsx b/app/src/organisms/Desktop/Devices/hooks/__tests__/useTrackCreateProtocolRunEvent.test.tsx similarity index 99% rename from app/src/organisms/Devices/hooks/__tests__/useTrackCreateProtocolRunEvent.test.tsx rename to app/src/organisms/Desktop/Devices/hooks/__tests__/useTrackCreateProtocolRunEvent.test.tsx index 88ec0f8a9fe..b8cf7fd9896 100644 --- a/app/src/organisms/Devices/hooks/__tests__/useTrackCreateProtocolRunEvent.test.tsx +++ b/app/src/organisms/Desktop/Devices/hooks/__tests__/useTrackCreateProtocolRunEvent.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { createStore } from 'redux' import { Provider } from 'react-redux' import { QueryClient, QueryClientProvider } from 'react-query' diff --git a/app/src/organisms/Desktop/Devices/hooks/index.ts b/app/src/organisms/Desktop/Devices/hooks/index.ts new file mode 100644 index 00000000000..41930662ad3 --- /dev/null +++ b/app/src/organisms/Desktop/Devices/hooks/index.ts @@ -0,0 +1,10 @@ +export * from './useDeckCalibrationData' +export * from './useDownloadRunLog' +export * from './useCalibrationTaskList' +export * from './useLPCSuccessToast' +export * from './usePipetteOffsetCalibrations' +export * from './usePipetteOffsetCalibration' +export * from './useTipLengthCalibrations' +export * from './useRunStartedOrLegacySessionInProgress' +export * from './useTrackCreateProtocolRunEvent' +export * from './useSyncRobotClock' diff --git a/app/src/organisms/Devices/hooks/useCalibrationTaskList.ts b/app/src/organisms/Desktop/Devices/hooks/useCalibrationTaskList.ts similarity index 98% rename from app/src/organisms/Devices/hooks/useCalibrationTaskList.ts rename to app/src/organisms/Desktop/Devices/hooks/useCalibrationTaskList.ts index 9d0c8627eec..ac76e682459 100644 --- a/app/src/organisms/Devices/hooks/useCalibrationTaskList.ts +++ b/app/src/organisms/Desktop/Devices/hooks/useCalibrationTaskList.ts @@ -7,17 +7,17 @@ import { } from '@opentrons/react-api-client' import { getLabwareDefURI } from '@opentrons/shared-data' -import { useAttachedPipettes } from '.' +import { useAttachedPipettes } from '/app/resources/instruments' import { getDefaultTiprackDefForPipetteName } from '../constants' import { DECK_CAL_STATUS_OK } from '/app/redux/calibration/constants' -import { formatTimestamp } from '../utils' +import { formatTimestamp } from '/app/transformations/runs' import type { PipetteName } from '@opentrons/shared-data' import type { SubTaskProps, TaskListProps, TaskProps, -} from '../../TaskList/types' +} from '/app/molecules/TaskList' import type { AttachedPipette } from '/app/redux/pipettes/types' import type { PipetteOffsetCalibrationSessionParams, diff --git a/app/src/organisms/Devices/hooks/useDeckCalibrationData.ts b/app/src/organisms/Desktop/Devices/hooks/useDeckCalibrationData.ts similarity index 100% rename from app/src/organisms/Devices/hooks/useDeckCalibrationData.ts rename to app/src/organisms/Desktop/Devices/hooks/useDeckCalibrationData.ts diff --git a/app/src/organisms/Devices/hooks/useDownloadRunLog.ts b/app/src/organisms/Desktop/Devices/hooks/useDownloadRunLog.ts similarity index 97% rename from app/src/organisms/Devices/hooks/useDownloadRunLog.ts rename to app/src/organisms/Desktop/Devices/hooks/useDownloadRunLog.ts index 1dd189e83bc..61acbfb12c4 100644 --- a/app/src/organisms/Devices/hooks/useDownloadRunLog.ts +++ b/app/src/organisms/Desktop/Devices/hooks/useDownloadRunLog.ts @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { useTranslation } from 'react-i18next' import { getRun, getCommands, getProtocol } from '@opentrons/api-client' import { useHost } from '@opentrons/react-api-client' @@ -13,7 +13,7 @@ export function useDownloadRunLog( ): { downloadRunLog: () => void; isRunLogLoading: boolean } { const { t } = useTranslation('run_details') const host = useHost() - const [isLoading, setIsLoading] = React.useState(false) + const [isLoading, setIsLoading] = useState(false) const { makeToast } = useToaster() diff --git a/app/src/organisms/Devices/hooks/useLPCSuccessToast.ts b/app/src/organisms/Desktop/Devices/hooks/useLPCSuccessToast.ts similarity index 100% rename from app/src/organisms/Devices/hooks/useLPCSuccessToast.ts rename to app/src/organisms/Desktop/Devices/hooks/useLPCSuccessToast.ts diff --git a/app/src/organisms/Devices/hooks/usePipetteOffsetCalibration.ts b/app/src/organisms/Desktop/Devices/hooks/usePipetteOffsetCalibration.ts similarity index 95% rename from app/src/organisms/Devices/hooks/usePipetteOffsetCalibration.ts rename to app/src/organisms/Desktop/Devices/hooks/usePipetteOffsetCalibration.ts index ff6522f56ed..c441e618647 100644 --- a/app/src/organisms/Devices/hooks/usePipetteOffsetCalibration.ts +++ b/app/src/organisms/Desktop/Devices/hooks/usePipetteOffsetCalibration.ts @@ -1,4 +1,4 @@ -import React from 'react' +import { useEffect } from 'react' import { useSelector } from 'react-redux' import { @@ -29,7 +29,7 @@ export function usePipetteOffsetCalibration( ) ) - React.useEffect(() => { + useEffect(() => { if (robotName != null) { dispatchRequest(fetchPipetteOffsetCalibrations(robotName)) } diff --git a/app/src/organisms/Devices/hooks/usePipetteOffsetCalibrations.ts b/app/src/organisms/Desktop/Devices/hooks/usePipetteOffsetCalibrations.ts similarity index 100% rename from app/src/organisms/Devices/hooks/usePipetteOffsetCalibrations.ts rename to app/src/organisms/Desktop/Devices/hooks/usePipetteOffsetCalibrations.ts diff --git a/app/src/organisms/Devices/hooks/useRunStartedOrLegacySessionInProgress.ts b/app/src/organisms/Desktop/Devices/hooks/useRunStartedOrLegacySessionInProgress.ts similarity index 100% rename from app/src/organisms/Devices/hooks/useRunStartedOrLegacySessionInProgress.ts rename to app/src/organisms/Desktop/Devices/hooks/useRunStartedOrLegacySessionInProgress.ts diff --git a/app/src/organisms/Devices/hooks/useSyncRobotClock.ts b/app/src/organisms/Desktop/Devices/hooks/useSyncRobotClock.ts similarity index 89% rename from app/src/organisms/Devices/hooks/useSyncRobotClock.ts rename to app/src/organisms/Desktop/Devices/hooks/useSyncRobotClock.ts index ddc74247d6d..9553ca4a3cb 100644 --- a/app/src/organisms/Devices/hooks/useSyncRobotClock.ts +++ b/app/src/organisms/Desktop/Devices/hooks/useSyncRobotClock.ts @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useEffect } from 'react' import { useDispatch } from 'react-redux' import { syncSystemTime } from '/app/redux/robot-admin' @@ -12,7 +12,7 @@ import type { Dispatch } from '/app/redux/types' export function useSyncRobotClock(robotName: string | null): void { const dispatch = useDispatch() - React.useEffect(() => { + useEffect(() => { if (robotName != null) { dispatch(syncSystemTime(robotName)) } diff --git a/app/src/organisms/Devices/hooks/useTipLengthCalibrations.ts b/app/src/organisms/Desktop/Devices/hooks/useTipLengthCalibrations.ts similarity index 100% rename from app/src/organisms/Devices/hooks/useTipLengthCalibrations.ts rename to app/src/organisms/Desktop/Devices/hooks/useTipLengthCalibrations.ts diff --git a/app/src/organisms/Devices/hooks/useTrackCreateProtocolRunEvent.ts b/app/src/organisms/Desktop/Devices/hooks/useTrackCreateProtocolRunEvent.ts similarity index 100% rename from app/src/organisms/Devices/hooks/useTrackCreateProtocolRunEvent.ts rename to app/src/organisms/Desktop/Devices/hooks/useTrackCreateProtocolRunEvent.ts diff --git a/app/src/organisms/Devices/utils.ts b/app/src/organisms/Desktop/Devices/utils.ts similarity index 51% rename from app/src/organisms/Devices/utils.ts rename to app/src/organisms/Desktop/Devices/utils.ts index da0b0666280..c9818264c18 100644 --- a/app/src/organisms/Devices/utils.ts +++ b/app/src/organisms/Desktop/Devices/utils.ts @@ -1,34 +1,9 @@ -import { format, parseISO } from 'date-fns' -import { INCONSISTENT_PIPETTE_OFFSET } from '@opentrons/api-client' import type { FetchPipettesResponseBody, FetchPipettesResponsePipette, Mount, } from '/app/redux/pipettes/types' -import type { - Instruments, - PipetteData, - PipetteOffsetCalibration, -} from '@opentrons/api-client' - -/** - * formats a string if it is in ISO 8601 date format - * @param {string} timestamp ISO date string - * @returns {string} formatted date string - */ -export function formatTimestamp(timestamp: string): string { - // eslint-disable-next-line eqeqeq - return (parseISO(timestamp) as Date | string) != 'Invalid Date' - ? format(parseISO(timestamp), 'MM/dd/yyyy HH:mm:ss') - : timestamp -} - -export function onDeviceDisplayFormatTimestamp(timestamp: string): string { - // eslint-disable-next-line eqeqeq - return (parseISO(timestamp) as Date | string) != 'Invalid Date' - ? format(parseISO(timestamp), 'HH:mm:ss') - : timestamp -} +import type { PipetteOffsetCalibration } from '@opentrons/api-client' export function downloadFile(data: object | string, fileName: string): void { // Create a blob with the data we want to download as a file @@ -74,19 +49,3 @@ export function getOffsetCalibrationForMount( ) } } - -export function getShowPipetteCalibrationWarning( - attachedInstruments?: Instruments -): boolean { - return ( - attachedInstruments?.data.some((i): i is PipetteData => { - const failuresList = - i.ok && i.data.calibratedOffset?.reasonability_check_failures != null - ? i.data.calibratedOffset?.reasonability_check_failures - : [] - if (failuresList.length > 0) { - return failuresList[0]?.kind === INCONSISTENT_PIPETTE_OFFSET - } else return false - }) ?? false - ) -} diff --git a/app/src/organisms/HowCalibrationWorksModal/__tests__/HowCalibrationWorksModal.test.tsx b/app/src/organisms/Desktop/HowCalibrationWorksModal/__tests__/HowCalibrationWorksModal.test.tsx similarity index 98% rename from app/src/organisms/HowCalibrationWorksModal/__tests__/HowCalibrationWorksModal.test.tsx rename to app/src/organisms/Desktop/HowCalibrationWorksModal/__tests__/HowCalibrationWorksModal.test.tsx index 329d3ed3e5f..8eee1543c5a 100644 --- a/app/src/organisms/HowCalibrationWorksModal/__tests__/HowCalibrationWorksModal.test.tsx +++ b/app/src/organisms/Desktop/HowCalibrationWorksModal/__tests__/HowCalibrationWorksModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import '@testing-library/jest-dom/vitest' import { describe, it, vi, beforeEach, expect } from 'vitest' diff --git a/app/src/organisms/HowCalibrationWorksModal/index.tsx b/app/src/organisms/Desktop/HowCalibrationWorksModal/index.tsx similarity index 98% rename from app/src/organisms/HowCalibrationWorksModal/index.tsx rename to app/src/organisms/Desktop/HowCalibrationWorksModal/index.tsx index e0f4bda2972..a1693793d2e 100644 --- a/app/src/organisms/HowCalibrationWorksModal/index.tsx +++ b/app/src/organisms/Desktop/HowCalibrationWorksModal/index.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { createPortal } from 'react-dom' import { useTranslation } from 'react-i18next' import { css } from 'styled-components' @@ -17,7 +16,7 @@ import { LegacyStyledText, } from '@opentrons/components' -import { getTopPortalEl } from '../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import RobotCalHelpImage from '/app/assets/images/robot_calibration_help.png' import { ExternalLink } from '/app/atoms/Link/ExternalLink' import { Divider } from '/app/atoms/structure' diff --git a/app/src/organisms/Desktop/Labware/AddCustomLabwareSlideout/__tests__/AddCustomLabwareSlideout.test.tsx b/app/src/organisms/Desktop/Labware/AddCustomLabwareSlideout/__tests__/AddCustomLabwareSlideout.test.tsx index 451e63491fd..977f44f2cce 100644 --- a/app/src/organisms/Desktop/Labware/AddCustomLabwareSlideout/__tests__/AddCustomLabwareSlideout.test.tsx +++ b/app/src/organisms/Desktop/Labware/AddCustomLabwareSlideout/__tests__/AddCustomLabwareSlideout.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { describe, it, expect, vi, beforeEach } from 'vitest' import { fireEvent, screen } from '@testing-library/react' diff --git a/app/src/organisms/Desktop/Labware/AddCustomLabwareSlideout/index.tsx b/app/src/organisms/Desktop/Labware/AddCustomLabwareSlideout/index.tsx index b6bebd77fdd..1ded9827380 100644 --- a/app/src/organisms/Desktop/Labware/AddCustomLabwareSlideout/index.tsx +++ b/app/src/organisms/Desktop/Labware/AddCustomLabwareSlideout/index.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useDispatch } from 'react-redux' import { useTranslation, Trans } from 'react-i18next' import { diff --git a/app/src/organisms/Desktop/Labware/LabwareCard/__tests__/CustomLabwareOverflowMenu.test.tsx b/app/src/organisms/Desktop/Labware/LabwareCard/__tests__/CustomLabwareOverflowMenu.test.tsx index d96be28d824..588b47ecea3 100644 --- a/app/src/organisms/Desktop/Labware/LabwareCard/__tests__/CustomLabwareOverflowMenu.test.tsx +++ b/app/src/organisms/Desktop/Labware/LabwareCard/__tests__/CustomLabwareOverflowMenu.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, vi, expect, beforeEach, afterEach } from 'vitest' diff --git a/app/src/organisms/Desktop/Labware/LabwareCard/__tests__/LabwareCard.test.tsx b/app/src/organisms/Desktop/Labware/LabwareCard/__tests__/LabwareCard.test.tsx index 35423948e56..76abb51c72f 100644 --- a/app/src/organisms/Desktop/Labware/LabwareCard/__tests__/LabwareCard.test.tsx +++ b/app/src/organisms/Desktop/Labware/LabwareCard/__tests__/LabwareCard.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { screen } from '@testing-library/react' import { describe, it, vi, beforeEach } from 'vitest' import { renderWithProviders, nestedTextMatcher } from '/app/__testing-utils__' diff --git a/app/src/organisms/Desktop/Labware/LabwareCard/index.tsx b/app/src/organisms/Desktop/Labware/LabwareCard/index.tsx index b94f088d87a..6d445b4bbd5 100644 --- a/app/src/organisms/Desktop/Labware/LabwareCard/index.tsx +++ b/app/src/organisms/Desktop/Labware/LabwareCard/index.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import startCase from 'lodash/startCase' import { format } from 'date-fns' diff --git a/app/src/organisms/Desktop/Labware/LabwareDetails/Dimensions.tsx b/app/src/organisms/Desktop/Labware/LabwareDetails/Dimensions.tsx index 61e3cd422d5..ad08946ea42 100644 --- a/app/src/organisms/Desktop/Labware/LabwareDetails/Dimensions.tsx +++ b/app/src/organisms/Desktop/Labware/LabwareDetails/Dimensions.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import round from 'lodash/round' import { Box, SPACING, getFootprintDiagram } from '@opentrons/components' diff --git a/app/src/organisms/Desktop/Labware/LabwareDetails/Gallery.tsx b/app/src/organisms/Desktop/Labware/LabwareDetails/Gallery.tsx index ca5f7b89de6..ed418218147 100644 --- a/app/src/organisms/Desktop/Labware/LabwareDetails/Gallery.tsx +++ b/app/src/organisms/Desktop/Labware/LabwareDetails/Gallery.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { Box, @@ -34,7 +34,7 @@ export function Gallery(props: GalleryProps): JSX.Element { ? 127.4 : dims.xDimension - const [currentImage, setCurrentImage] = React.useState(0) + const [currentImage, setCurrentImage] = useState(0) const render = ( 1 const isMultiRow = ordering.some(row => row.length > 1) const isCustomDefinition = definition.namespace !== 'opentrons' - const [showToolTip, setShowToolTip] = React.useState(false) + const [showToolTip, setShowToolTip] = useState(false) const [targetProps, tooltipProps] = useHoverTooltip({ placement: TOOLTIP_TOP_START, }) @@ -88,7 +88,7 @@ export function LabwareDetails(props: LabwareDetailsProps): JSX.Element { setShowToolTip(true) } - React.useEffect(() => { + useEffect(() => { const timer = setTimeout(() => { setShowToolTip(false) }, 2000) @@ -216,7 +216,7 @@ export function LabwareDetails(props: LabwareDetailsProps): JSX.Element { : '' return ( - + {groupMetadata.displayCategory == null && irregular && ( <> - + ) })} diff --git a/app/src/organisms/ProtocolAnalysisFailure/ProtocolAnalysisStale.tsx b/app/src/organisms/Desktop/ProtocolAnalysisFailure/ProtocolAnalysisStale.tsx similarity index 95% rename from app/src/organisms/ProtocolAnalysisFailure/ProtocolAnalysisStale.tsx rename to app/src/organisms/Desktop/ProtocolAnalysisFailure/ProtocolAnalysisStale.tsx index aa961fae559..9b3a7c00d14 100644 --- a/app/src/organisms/ProtocolAnalysisFailure/ProtocolAnalysisStale.tsx +++ b/app/src/organisms/Desktop/ProtocolAnalysisFailure/ProtocolAnalysisStale.tsx @@ -1,9 +1,10 @@ -import * as React from 'react' +import type * as React from 'react' import { useDispatch } from 'react-redux' import { useTranslation, Trans } from 'react-i18next' import { ALIGN_CENTER, + Banner, Btn, Flex, JUSTIFY_SPACE_BETWEEN, @@ -13,8 +14,6 @@ import { WRAP_REVERSE, } from '@opentrons/components' -import { Banner } from '/app/atoms/Banner' - import type { Dispatch } from '/app/redux/types' import { analyzeProtocol } from '/app/redux/protocol-storage' interface ProtocolAnalysisStaleProps { diff --git a/app/src/organisms/ProtocolAnalysisFailure/__tests__/ProtocolAnalysisFailure.test.tsx b/app/src/organisms/Desktop/ProtocolAnalysisFailure/__tests__/ProtocolAnalysisFailure.test.tsx similarity index 97% rename from app/src/organisms/ProtocolAnalysisFailure/__tests__/ProtocolAnalysisFailure.test.tsx rename to app/src/organisms/Desktop/ProtocolAnalysisFailure/__tests__/ProtocolAnalysisFailure.test.tsx index ff8d5fa225d..fbdec0a45ec 100644 --- a/app/src/organisms/ProtocolAnalysisFailure/__tests__/ProtocolAnalysisFailure.test.tsx +++ b/app/src/organisms/Desktop/ProtocolAnalysisFailure/__tests__/ProtocolAnalysisFailure.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect } from 'vitest' diff --git a/app/src/organisms/ProtocolAnalysisFailure/index.tsx b/app/src/organisms/Desktop/ProtocolAnalysisFailure/index.tsx similarity index 97% rename from app/src/organisms/ProtocolAnalysisFailure/index.tsx rename to app/src/organisms/Desktop/ProtocolAnalysisFailure/index.tsx index a5d35f32a42..b2b904dd19d 100644 --- a/app/src/organisms/ProtocolAnalysisFailure/index.tsx +++ b/app/src/organisms/Desktop/ProtocolAnalysisFailure/index.tsx @@ -7,6 +7,7 @@ import { css } from 'styled-components' import { ALIGN_CENTER, Btn, + Banner, Flex, JUSTIFY_FLEX_END, Modal, @@ -19,8 +20,7 @@ import { } from '@opentrons/components' import { analyzeProtocol } from '/app/redux/protocol-storage' -import { Banner } from '/app/atoms/Banner' -import { getTopPortalEl } from '../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import type { Dispatch } from '/app/redux/types' interface ProtocolAnalysisFailureProps { diff --git a/app/src/organisms/ProtocolDetails/AnnotatedSteps.tsx b/app/src/organisms/Desktop/ProtocolDetails/AnnotatedSteps.tsx similarity index 98% rename from app/src/organisms/ProtocolDetails/AnnotatedSteps.tsx rename to app/src/organisms/Desktop/ProtocolDetails/AnnotatedSteps.tsx index 4e15ad14b62..bdc5848f03b 100644 --- a/app/src/organisms/ProtocolDetails/AnnotatedSteps.tsx +++ b/app/src/organisms/Desktop/ProtocolDetails/AnnotatedSteps.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { css } from 'styled-components' import { FLEX_ROBOT_TYPE } from '@opentrons/shared-data' import { diff --git a/app/src/organisms/ProtocolDetails/ProtocolLabwareDetails.tsx b/app/src/organisms/Desktop/ProtocolDetails/ProtocolLabwareDetails.tsx similarity index 98% rename from app/src/organisms/ProtocolDetails/ProtocolLabwareDetails.tsx rename to app/src/organisms/Desktop/ProtocolDetails/ProtocolLabwareDetails.tsx index 3a9ae7e5db8..4fe95406355 100644 --- a/app/src/organisms/ProtocolDetails/ProtocolLabwareDetails.tsx +++ b/app/src/organisms/Desktop/ProtocolDetails/ProtocolLabwareDetails.tsx @@ -21,7 +21,7 @@ import { import { getLabwareDefURI } from '@opentrons/shared-data' import { Divider } from '/app/atoms/structure' import { getTopPortalEl } from '/app/App/portal' -import { LabwareDetails } from '../Desktop/Labware/LabwareDetails' +import { LabwareDetails } from '/app/organisms/Desktop/Labware/LabwareDetails' import type { LoadLabwareRunTimeCommand } from '@opentrons/shared-data' import type { LabwareDefAndDate } from '/app/local-resources/labware' diff --git a/app/src/organisms/ProtocolDetails/ProtocolLiquidsDetails.tsx b/app/src/organisms/Desktop/ProtocolDetails/ProtocolLiquidsDetails.tsx similarity index 96% rename from app/src/organisms/ProtocolDetails/ProtocolLiquidsDetails.tsx rename to app/src/organisms/Desktop/ProtocolDetails/ProtocolLiquidsDetails.tsx index 0cb9780dee7..2c255666fcd 100644 --- a/app/src/organisms/ProtocolDetails/ProtocolLiquidsDetails.tsx +++ b/app/src/organisms/Desktop/ProtocolDetails/ProtocolLiquidsDetails.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { Fragment } from 'react' import { useTranslation } from 'react-i18next' import { css } from 'styled-components' @@ -50,7 +50,7 @@ export const ProtocolLiquidsDetails = ( {liquidsInLoadOrder.length > 0 ? ( liquidsInLoadOrder?.map((liquid, index) => { return ( - + {index < liquidsInLoadOrder.length - 1 && } - + ) }) ) : ( diff --git a/app/src/organisms/ProtocolDetails/ProtocolParameters/__tests__/ProtocolParameters.test.tsx b/app/src/organisms/Desktop/ProtocolDetails/ProtocolParameters/__tests__/ProtocolParameters.test.tsx similarity index 98% rename from app/src/organisms/ProtocolDetails/ProtocolParameters/__tests__/ProtocolParameters.test.tsx rename to app/src/organisms/Desktop/ProtocolDetails/ProtocolParameters/__tests__/ProtocolParameters.test.tsx index e87c660e0d9..e52803cc054 100644 --- a/app/src/organisms/ProtocolDetails/ProtocolParameters/__tests__/ProtocolParameters.test.tsx +++ b/app/src/organisms/Desktop/ProtocolDetails/ProtocolParameters/__tests__/ProtocolParameters.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, vi, beforeEach, afterEach } from 'vitest' import { screen } from '@testing-library/react' diff --git a/app/src/organisms/ProtocolDetails/ProtocolParameters/index.tsx b/app/src/organisms/Desktop/ProtocolDetails/ProtocolParameters/index.tsx similarity index 94% rename from app/src/organisms/ProtocolDetails/ProtocolParameters/index.tsx rename to app/src/organisms/Desktop/ProtocolDetails/ProtocolParameters/index.tsx index 6e7067204d0..23ee98c1649 100644 --- a/app/src/organisms/ProtocolDetails/ProtocolParameters/index.tsx +++ b/app/src/organisms/Desktop/ProtocolDetails/ProtocolParameters/index.tsx @@ -1,7 +1,7 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { + Banner, DIRECTION_COLUMN, Flex, InfoScreen, @@ -9,7 +9,6 @@ import { SPACING, StyledText, } from '@opentrons/components' -import { Banner } from '/app/atoms/Banner' import type { RunTimeParameter } from '@opentrons/shared-data' diff --git a/app/src/organisms/ProtocolDetails/ProtocolStats.tsx b/app/src/organisms/Desktop/ProtocolDetails/ProtocolStats.tsx similarity index 99% rename from app/src/organisms/ProtocolDetails/ProtocolStats.tsx rename to app/src/organisms/Desktop/ProtocolDetails/ProtocolStats.tsx index 935636690c7..589eeb2e2ea 100644 --- a/app/src/organisms/ProtocolDetails/ProtocolStats.tsx +++ b/app/src/organisms/Desktop/ProtocolDetails/ProtocolStats.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { css } from 'styled-components' import { diff --git a/app/src/organisms/ProtocolDetails/RobotConfigurationDetails.tsx b/app/src/organisms/Desktop/ProtocolDetails/RobotConfigurationDetails.tsx similarity index 99% rename from app/src/organisms/ProtocolDetails/RobotConfigurationDetails.tsx rename to app/src/organisms/Desktop/ProtocolDetails/RobotConfigurationDetails.tsx index d2fc14e63eb..5789a8af6e6 100644 --- a/app/src/organisms/ProtocolDetails/RobotConfigurationDetails.tsx +++ b/app/src/organisms/Desktop/ProtocolDetails/RobotConfigurationDetails.tsx @@ -1,4 +1,4 @@ -import React from 'react' +import * as React from 'react' import { useTranslation } from 'react-i18next' import { diff --git a/app/src/organisms/ProtocolDetails/__tests__/ProtocolDetails.test.tsx b/app/src/organisms/Desktop/ProtocolDetails/__tests__/ProtocolDetails.test.tsx similarity index 96% rename from app/src/organisms/ProtocolDetails/__tests__/ProtocolDetails.test.tsx rename to app/src/organisms/Desktop/ProtocolDetails/__tests__/ProtocolDetails.test.tsx index faf7cd40053..8ef02d4d67a 100644 --- a/app/src/organisms/ProtocolDetails/__tests__/ProtocolDetails.test.tsx +++ b/app/src/organisms/Desktop/ProtocolDetails/__tests__/ProtocolDetails.test.tsx @@ -1,11 +1,11 @@ -import * as React from 'react' +import type * as React from 'react' import { act, screen, waitFor } from '@testing-library/react' import { MemoryRouter } from 'react-router-dom' import { describe, it, beforeEach, vi, expect, afterEach } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' -import { ChooseRobotToRunProtocolSlideout } from '/app/organisms/ChooseRobotToRunProtocolSlideout' +import { ChooseRobotToRunProtocolSlideout } from '/app/organisms/Desktop/ChooseRobotToRunProtocolSlideout' import { useTrackEvent, ANALYTICS_PROTOCOL_PROCEED_TO_RUN, @@ -33,8 +33,8 @@ vi.mock('/app/redux/analytics') vi.mock('/app/redux/custom-labware/selectors') vi.mock('/app/redux/discovery/selectors') vi.mock('/app/redux/protocol-storage/selectors') -vi.mock('/app/organisms/ChooseRobotToRunProtocolSlideout') -vi.mock('/app/organisms/SendProtocolToFlexSlideout') +vi.mock('/app/organisms/Desktop/ChooseRobotToRunProtocolSlideout') +vi.mock('/app/organisms/Desktop/SendProtocolToFlexSlideout') const render = ( props: Partial> = {} diff --git a/app/src/organisms/ProtocolDetails/__tests__/ProtocolLabwareDetails.test.tsx b/app/src/organisms/Desktop/ProtocolDetails/__tests__/ProtocolLabwareDetails.test.tsx similarity index 99% rename from app/src/organisms/ProtocolDetails/__tests__/ProtocolLabwareDetails.test.tsx rename to app/src/organisms/Desktop/ProtocolDetails/__tests__/ProtocolLabwareDetails.test.tsx index 3d22f3d813e..93c215643cf 100644 --- a/app/src/organisms/ProtocolDetails/__tests__/ProtocolLabwareDetails.test.tsx +++ b/app/src/organisms/Desktop/ProtocolDetails/__tests__/ProtocolLabwareDetails.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { screen } from '@testing-library/react' import { describe, it, beforeEach, vi } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' diff --git a/app/src/organisms/ProtocolDetails/__tests__/ProtocolLiquidsDetails.test.tsx b/app/src/organisms/Desktop/ProtocolDetails/__tests__/ProtocolLiquidsDetails.test.tsx similarity index 94% rename from app/src/organisms/ProtocolDetails/__tests__/ProtocolLiquidsDetails.test.tsx rename to app/src/organisms/Desktop/ProtocolDetails/__tests__/ProtocolLiquidsDetails.test.tsx index eeb761277b1..69e55cc1097 100644 --- a/app/src/organisms/ProtocolDetails/__tests__/ProtocolLiquidsDetails.test.tsx +++ b/app/src/organisms/Desktop/ProtocolDetails/__tests__/ProtocolLiquidsDetails.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { screen } from '@testing-library/react' import { describe, it, beforeEach, vi } from 'vitest' import { parseLiquidsInLoadOrder } from '@opentrons/shared-data' @@ -9,7 +9,7 @@ import { ProtocolLiquidsDetails } from '../ProtocolLiquidsDetails' import type * as SharedData from '@opentrons/shared-data' -vi.mock('../../Devices/ProtocolRun/SetupLiquids/SetupLiquidsList') +vi.mock('../../Desktop/Devices/ProtocolRun/SetupLiquids/SetupLiquidsList') vi.mock('@opentrons/shared-data', async importOriginal => { const actualSharedData = await importOriginal() return { diff --git a/app/src/organisms/ProtocolDetails/__tests__/RobotConfigurationDetails.test.tsx b/app/src/organisms/Desktop/ProtocolDetails/__tests__/RobotConfigurationDetails.test.tsx similarity index 99% rename from app/src/organisms/ProtocolDetails/__tests__/RobotConfigurationDetails.test.tsx rename to app/src/organisms/Desktop/ProtocolDetails/__tests__/RobotConfigurationDetails.test.tsx index e7f473c837d..b823732ce95 100644 --- a/app/src/organisms/ProtocolDetails/__tests__/RobotConfigurationDetails.test.tsx +++ b/app/src/organisms/Desktop/ProtocolDetails/__tests__/RobotConfigurationDetails.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, expect, afterEach, vi } from 'vitest' import { screen } from '@testing-library/react' diff --git a/app/src/organisms/ProtocolDetails/__tests__/utils.test.ts b/app/src/organisms/Desktop/ProtocolDetails/__tests__/utils.test.ts similarity index 100% rename from app/src/organisms/ProtocolDetails/__tests__/utils.test.ts rename to app/src/organisms/Desktop/ProtocolDetails/__tests__/utils.test.ts diff --git a/app/src/organisms/ProtocolDetails/index.tsx b/app/src/organisms/Desktop/ProtocolDetails/index.tsx similarity index 97% rename from app/src/organisms/ProtocolDetails/index.tsx rename to app/src/organisms/Desktop/ProtocolDetails/index.tsx index 5df7bd33e4a..3bdf4be672e 100644 --- a/app/src/organisms/ProtocolDetails/index.tsx +++ b/app/src/organisms/Desktop/ProtocolDetails/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, Fragment } from 'react' import { createPortal } from 'react-dom' import map from 'lodash/map' import omit from 'lodash/omit' @@ -49,7 +49,7 @@ import { parseInitialPipetteNamesByMount, } from '@opentrons/shared-data' -import { getTopPortalEl } from '../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import { Divider } from '/app/atoms/structure' import { useTrackEvent, @@ -60,14 +60,12 @@ import { analyzeProtocol, } from '/app/redux/protocol-storage' import { useFeatureFlag } from '/app/redux/config' -import { ChooseRobotToRunProtocolSlideout } from '../ChooseRobotToRunProtocolSlideout' +import { ChooseRobotToRunProtocolSlideout } from '/app/organisms/Desktop/ChooseRobotToRunProtocolSlideout' import { SendProtocolToFlexSlideout } from '../SendProtocolToFlexSlideout' import { ProtocolAnalysisFailure } from '../ProtocolAnalysisFailure' import { ProtocolStatusBanner } from '../ProtocolStatusBanner' -import { - getAnalysisStatus, - getProtocolDisplayName, -} from '../ProtocolsLanding/utils' +import { getAnalysisStatus } from '/app/transformations/analysis' +import { getProtocolDisplayName } from '/app/transformations/protocols' import { getProtocolUsesGripper } from '/app/transformations/commands' import { ProtocolOverflowMenu } from '../ProtocolsLanding/ProtocolOverflowMenu' import { ProtocolStats } from './ProtocolStats' @@ -142,7 +140,7 @@ function MetadataDetails({ {filteredMetaData.map((item, index) => { return ( - + {item.value} - + ) })} @@ -167,7 +165,7 @@ interface ReadMoreContentProps { const ReadMoreContent = (props: ReadMoreContentProps): JSX.Element => { const { metadata, protocolType } = props const { t, i18n } = useTranslation('protocol_details') - const [isReadMore, setIsReadMore] = React.useState(true) + const [isReadMore, setIsReadMore] = useState(true) const description = isEmpty(metadata.description) ? t('shared:no_data') @@ -217,18 +215,18 @@ export function ProtocolDetails( const enableProtocolTimeline = useFeatureFlag('protocolTimeline') const runTimeParameters = mostRecentAnalysis?.runTimeParameters ?? [] const hasRunTimeParameters = runTimeParameters.length > 0 - const [currentTab, setCurrentTab] = React.useState< + const [currentTab, setCurrentTab] = useState< 'robot_config' | 'labware' | 'liquids' | 'stats' | 'parameters' | 'timeline' >(hasRunTimeParameters ? 'parameters' : 'robot_config') const [ showChooseRobotToRunProtocolSlideout, setShowChooseRobotToRunProtocolSlideout, - ] = React.useState(false) + ] = useState(false) const [ showSendProtocolToFlexSlideout, setShowSendProtocolToFlexSlideout, - ] = React.useState(false) - const [showDeckViewModal, setShowDeckViewModal] = React.useState(false) + ] = useState(false) + const [showDeckViewModal, setShowDeckViewModal] = useState(false) const isAnalyzing = useSelector((state: State) => getIsProtocolAnalysisInProgress(state, protocolKey) diff --git a/app/src/organisms/ProtocolDetails/utils.ts b/app/src/organisms/Desktop/ProtocolDetails/utils.ts similarity index 100% rename from app/src/organisms/ProtocolDetails/utils.ts rename to app/src/organisms/Desktop/ProtocolDetails/utils.ts diff --git a/app/src/organisms/ProtocolStatusBanner/ProtocolStatusBanner.stories.tsx b/app/src/organisms/Desktop/ProtocolStatusBanner/ProtocolStatusBanner.stories.tsx similarity index 100% rename from app/src/organisms/ProtocolStatusBanner/ProtocolStatusBanner.stories.tsx rename to app/src/organisms/Desktop/ProtocolStatusBanner/ProtocolStatusBanner.stories.tsx diff --git a/app/src/organisms/ProtocolStatusBanner/__tests__/ProtocolStatusBanner.test.tsx b/app/src/organisms/Desktop/ProtocolStatusBanner/__tests__/ProtocolStatusBanner.test.tsx similarity index 97% rename from app/src/organisms/ProtocolStatusBanner/__tests__/ProtocolStatusBanner.test.tsx rename to app/src/organisms/Desktop/ProtocolStatusBanner/__tests__/ProtocolStatusBanner.test.tsx index a7de3ba7ef1..3a0326c5273 100644 --- a/app/src/organisms/ProtocolStatusBanner/__tests__/ProtocolStatusBanner.test.tsx +++ b/app/src/organisms/Desktop/ProtocolStatusBanner/__tests__/ProtocolStatusBanner.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { screen } from '@testing-library/react' import { describe, it, expect } from 'vitest' diff --git a/app/src/organisms/ProtocolStatusBanner/index.tsx b/app/src/organisms/Desktop/ProtocolStatusBanner/index.tsx similarity index 78% rename from app/src/organisms/ProtocolStatusBanner/index.tsx rename to app/src/organisms/Desktop/ProtocolStatusBanner/index.tsx index 6037d88596a..133cbf35896 100644 --- a/app/src/organisms/ProtocolStatusBanner/index.tsx +++ b/app/src/organisms/Desktop/ProtocolStatusBanner/index.tsx @@ -1,7 +1,5 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' -import { SPACING, LegacyStyledText } from '@opentrons/components' -import { Banner } from '/app/atoms/Banner' +import { SPACING, Banner, LegacyStyledText } from '@opentrons/components' import type { IconProps } from '@opentrons/components' diff --git a/app/src/organisms/ProtocolTimelineScrubber/CommandItem.tsx b/app/src/organisms/Desktop/ProtocolTimelineScrubber/CommandItem.tsx similarity index 97% rename from app/src/organisms/ProtocolTimelineScrubber/CommandItem.tsx rename to app/src/organisms/Desktop/ProtocolTimelineScrubber/CommandItem.tsx index fee6d977cf7..ae9377a19a0 100644 --- a/app/src/organisms/ProtocolTimelineScrubber/CommandItem.tsx +++ b/app/src/organisms/Desktop/ProtocolTimelineScrubber/CommandItem.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { Flex, DIRECTION_COLUMN, @@ -28,7 +28,7 @@ interface CommandItemProps { robotType: RobotType } export function CommandItem(props: CommandItemProps): JSX.Element { - const [showDetails, setShowDetails] = React.useState(false) + const [showDetails, setShowDetails] = useState(false) const { index, command, diff --git a/app/src/organisms/ProtocolTimelineScrubber/PipetteVisuals.tsx b/app/src/organisms/Desktop/ProtocolTimelineScrubber/PipetteVisuals.tsx similarity index 98% rename from app/src/organisms/ProtocolTimelineScrubber/PipetteVisuals.tsx rename to app/src/organisms/Desktop/ProtocolTimelineScrubber/PipetteVisuals.tsx index 6a9ee8dc566..10224a08e49 100644 --- a/app/src/organisms/ProtocolTimelineScrubber/PipetteVisuals.tsx +++ b/app/src/organisms/Desktop/ProtocolTimelineScrubber/PipetteVisuals.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { Flex, Box, @@ -32,7 +32,7 @@ export function PipetteMountViz( props: PipetteMountVizProps ): JSX.Element | null { const { mount, pipetteEntity, pipetteId, timelineFrame, analysis } = props - const [showPipetteDetails, setShowPipetteDetails] = React.useState(false) + const [showPipetteDetails, setShowPipetteDetails] = useState(false) return pipetteEntity == null ? null : ( { - it('should return stale if no liquids in analysis', () => { - const result = getAnalysisStatus(false, { - ...mockOT3ProtocolAnalysisOutput, - liquids: [], - errors: [], - }) - expect(result).toBe('stale') - }) - - it('should return stale if no runTimeParameters in analysis', () => { - const result = getAnalysisStatus(false, { - ...mockOT3ProtocolAnalysisOutput, - runTimeParameters: [], - errors: [], - }) - expect(result).toBe('stale') - }) - - it('should return complete if liquids and runTimeParameters in analysis', () => { - const result = getAnalysisStatus(false, { - ...mockOT3ProtocolAnalysisOutput, - liquids: [], - runTimeParameters: [], - errors: [], - }) - expect(result).toBe('complete') - }) -}) - describe('getisFlexProtocol', () => { it('should return true for protocols intended for a Flex', () => { const result = getisFlexProtocol(mockOT3ProtocolAnalysisOutput) diff --git a/app/src/organisms/ProtocolsLanding/hooks.tsx b/app/src/organisms/Desktop/ProtocolsLanding/hooks.tsx similarity index 89% rename from app/src/organisms/ProtocolsLanding/hooks.tsx rename to app/src/organisms/Desktop/ProtocolsLanding/hooks.tsx index c243a44febf..fec57e89955 100644 --- a/app/src/organisms/ProtocolsLanding/hooks.tsx +++ b/app/src/organisms/Desktop/ProtocolsLanding/hooks.tsx @@ -1,14 +1,9 @@ import { FLEX_ROBOT_TYPE } from '@opentrons/shared-data' -import { getProtocolDisplayName } from './utils' -import type { StoredProtocolData } from '/app/redux/protocol-storage' - -export type ProtocolSort = - | 'alphabetical' - | 'reverse' - | 'recent' - | 'oldest' - | 'flex' - | 'ot2' +import { getProtocolDisplayName } from '/app/transformations/protocols' +import type { + StoredProtocolData, + ProtocolSort, +} from '/app/redux/protocol-storage' export function useSortedProtocols( sortBy: ProtocolSort, diff --git a/app/src/organisms/ProtocolsLanding/utils.ts b/app/src/organisms/Desktop/ProtocolsLanding/utils.ts similarity index 83% rename from app/src/organisms/ProtocolsLanding/utils.ts rename to app/src/organisms/Desktop/ProtocolsLanding/utils.ts index 1656346ca3a..b3868e53c0d 100644 --- a/app/src/organisms/ProtocolsLanding/utils.ts +++ b/app/src/organisms/Desktop/ProtocolsLanding/utils.ts @@ -1,4 +1,3 @@ -import first from 'lodash/first' import { FLEX_STANDARD_MODEL } from '@opentrons/shared-data' import type { ProtocolAnalysisOutput, RobotType } from '@opentrons/shared-data' @@ -32,14 +31,6 @@ export function getAnalysisStatus( return 'complete' } -export function getProtocolDisplayName( - protocolKey: string, - srcFileNames: string[], - analysis?: ProtocolAnalysisOutput | null -): string { - return analysis?.metadata?.protocolName ?? first(srcFileNames) ?? protocolKey -} - export function getRobotTypeDisplayName( robotType: RobotType | null ): 'OT-2' | 'Opentrons Flex' { diff --git a/app/src/organisms/RobotSettingsCalibration/CalibrationDataDownload.tsx b/app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDataDownload.tsx similarity index 98% rename from app/src/organisms/RobotSettingsCalibration/CalibrationDataDownload.tsx rename to app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDataDownload.tsx index 5aae1a1425f..4731df09ae4 100644 --- a/app/src/organisms/RobotSettingsCalibration/CalibrationDataDownload.tsx +++ b/app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDataDownload.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { saveAs } from 'file-saver' import { useTranslation, Trans } from 'react-i18next' @@ -22,7 +22,7 @@ import { useDeckCalibrationData, usePipetteOffsetCalibrations, useTipLengthCalibrations, -} from '/app/organisms/Devices/hooks' +} from '/app/organisms/Desktop/Devices/hooks' import { useTrackEvent, ANALYTICS_CALIBRATION_DATA_DOWNLOADED, diff --git a/app/src/organisms/RobotSettingsCalibration/CalibrationDetails/ModuleCalibrationItems.tsx b/app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/ModuleCalibrationItems.tsx similarity index 99% rename from app/src/organisms/RobotSettingsCalibration/CalibrationDetails/ModuleCalibrationItems.tsx rename to app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/ModuleCalibrationItems.tsx index faae54b48d3..11ee8f60402 100644 --- a/app/src/organisms/RobotSettingsCalibration/CalibrationDetails/ModuleCalibrationItems.tsx +++ b/app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/ModuleCalibrationItems.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import styled, { css } from 'styled-components' diff --git a/app/src/organisms/RobotSettingsCalibration/CalibrationDetails/ModuleCalibrationOverflowMenu.tsx b/app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/ModuleCalibrationOverflowMenu.tsx similarity index 90% rename from app/src/organisms/RobotSettingsCalibration/CalibrationDetails/ModuleCalibrationOverflowMenu.tsx rename to app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/ModuleCalibrationOverflowMenu.tsx index 79aa70395ef..c44be36fa4a 100644 --- a/app/src/organisms/RobotSettingsCalibration/CalibrationDetails/ModuleCalibrationOverflowMenu.tsx +++ b/app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/ModuleCalibrationOverflowMenu.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, useEffect } from 'react' import { useTranslation } from 'react-i18next' @@ -17,11 +17,10 @@ import { useOnClickOutside, } from '@opentrons/components' -import { useChainLiveCommands } from '/app/resources/runs' -import { useRunStatuses } from '/app/organisms/Devices/hooks' -import { getModulePrepCommands } from '/app/organisms/Devices/getModulePrepCommands' +import { useChainLiveCommands, useRunStatuses } from '/app/resources/runs' +import { getModulePrepCommands } from '/app/local-resources/modules' import { ModuleWizardFlows } from '/app/organisms/ModuleWizardFlows' -import { getModuleTooHot } from '/app/organisms/Devices/getModuleTooHot' +import { getModuleTooHot } from '/app/transformations/modules' import { useIsEstopNotDisengaged } from '/app/resources/devices/hooks/useIsEstopNotDisengaged' import type { AttachedModule } from '/app/redux/modules/types' @@ -54,7 +53,7 @@ export function ModuleCalibrationOverflowMenu({ setShowOverflowMenu, } = useMenuHandleClickOutside() - const [showModuleWizard, setShowModuleWizard] = React.useState(false) + const [showModuleWizard, setShowModuleWizard] = useState(false) const { isRunRunning: isRunning } = useRunStatuses() const [targetProps, tooltipProps] = useHoverTooltip() @@ -73,7 +72,7 @@ export function ModuleCalibrationOverflowMenu({ const [ prepCommandErrorMessage, setPrepCommandErrorMessage, - ] = React.useState('') + ] = useState('') const isEstopNotDisengaged = useIsEstopNotDisengaged(robotName) @@ -87,7 +86,7 @@ export function ModuleCalibrationOverflowMenu({ setShowModuleWizard(true) } - React.useEffect(() => { + useEffect(() => { if (isRunning) { updateRobotStatus(true) } diff --git a/app/src/organisms/RobotSettingsCalibration/CalibrationDetails/OverflowMenu.tsx b/app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/OverflowMenu.tsx similarity index 94% rename from app/src/organisms/RobotSettingsCalibration/CalibrationDetails/OverflowMenu.tsx rename to app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/OverflowMenu.tsx index 6687e42af93..ee95d1abf73 100644 --- a/app/src/organisms/RobotSettingsCalibration/CalibrationDetails/OverflowMenu.tsx +++ b/app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/OverflowMenu.tsx @@ -29,18 +29,16 @@ import { useTrackEvent, ANALYTICS_CALIBRATION_DATA_DOWNLOADED, } from '/app/redux/analytics' -import { - useRunStatuses, - useAttachedPipettesFromInstrumentsQuery, -} from '/app/organisms/Devices/hooks' -import { PipetteWizardFlows } from '../../PipetteWizardFlows' -import { FLOWS } from '../../PipetteWizardFlows/constants' -import { useIsEstopNotDisengaged } from '/app/resources/devices/hooks/useIsEstopNotDisengaged' +import { useRunStatuses } from '/app/resources/runs' +import { PipetteWizardFlows } from '/app/organisms/PipetteWizardFlows' +import { FLOWS } from '/app/organisms/PipetteWizardFlows/constants' +import { useIsEstopNotDisengaged } from '/app/resources/devices' +import { useAttachedPipettesFromInstrumentsQuery } from '/app/resources/instruments' import type { Mount } from '@opentrons/components' import type { PipetteName } from '@opentrons/shared-data' import type { DeleteCalRequestParams } from '@opentrons/api-client' -import type { SelectablePipettes } from '../../PipetteWizardFlows/types' +import type { SelectablePipettes } from '/app/organisms/PipetteWizardFlows/types' interface OverflowMenuProps { calType: 'pipetteOffset' | 'tipLength' diff --git a/app/src/organisms/RobotSettingsCalibration/CalibrationDetails/PipetteOffsetCalibrationItems.tsx b/app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/PipetteOffsetCalibrationItems.tsx similarity index 98% rename from app/src/organisms/RobotSettingsCalibration/CalibrationDetails/PipetteOffsetCalibrationItems.tsx rename to app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/PipetteOffsetCalibrationItems.tsx index f6bba1f6921..66921699dc5 100644 --- a/app/src/organisms/RobotSettingsCalibration/CalibrationDetails/PipetteOffsetCalibrationItems.tsx +++ b/app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/PipetteOffsetCalibrationItems.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useSelector } from 'react-redux' import { useTranslation } from 'react-i18next' import styled, { css } from 'styled-components' @@ -20,7 +19,7 @@ import { LEFT } from '/app/redux/pipettes' import { useAttachedPipettes, useAttachedPipettesFromInstrumentsQuery, -} from '/app/organisms/Devices/hooks' +} from '/app/resources/instruments' import { useIsFlex } from '/app/redux-resources/robots' import type { State } from '/app/redux/types' diff --git a/app/src/organisms/RobotSettingsCalibration/CalibrationDetails/TipLengthCalibrationItems.tsx b/app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/TipLengthCalibrationItems.tsx similarity index 97% rename from app/src/organisms/RobotSettingsCalibration/CalibrationDetails/TipLengthCalibrationItems.tsx rename to app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/TipLengthCalibrationItems.tsx index 5734e7180c3..9aea786c421 100644 --- a/app/src/organisms/RobotSettingsCalibration/CalibrationDetails/TipLengthCalibrationItems.tsx +++ b/app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/TipLengthCalibrationItems.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { useSelector } from 'react-redux' import styled, { css } from 'styled-components' @@ -11,7 +10,7 @@ import { TYPOGRAPHY, } from '@opentrons/components' -import { useAttachedPipettes } from '/app/organisms/Devices/hooks' +import { useAttachedPipettes } from '/app/resources/instruments' import { getCustomLabwareDefinitions } from '/app/redux/custom-labware' import { OverflowMenu } from './OverflowMenu' import { formatLastCalibrated, getDisplayNameForTipRack } from './utils' diff --git a/app/src/organisms/RobotSettingsCalibration/CalibrationDetails/__fixtures__/index.ts b/app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/__fixtures__/index.ts similarity index 100% rename from app/src/organisms/RobotSettingsCalibration/CalibrationDetails/__fixtures__/index.ts rename to app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/__fixtures__/index.ts diff --git a/app/src/organisms/RobotSettingsCalibration/CalibrationDetails/__tests__/ModuleCalibrationItems.test.tsx b/app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/__tests__/ModuleCalibrationItems.test.tsx similarity index 98% rename from app/src/organisms/RobotSettingsCalibration/CalibrationDetails/__tests__/ModuleCalibrationItems.test.tsx rename to app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/__tests__/ModuleCalibrationItems.test.tsx index 77b2f3ee6ae..2fdd9694e5d 100644 --- a/app/src/organisms/RobotSettingsCalibration/CalibrationDetails/__tests__/ModuleCalibrationItems.test.tsx +++ b/app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/__tests__/ModuleCalibrationItems.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { screen } from '@testing-library/react' import { describe, it, expect, vi, beforeEach } from 'vitest' import { i18n } from '/app/i18n' diff --git a/app/src/organisms/RobotSettingsCalibration/CalibrationDetails/__tests__/ModuleCalibrationOverflowMenu.test.tsx b/app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/__tests__/ModuleCalibrationOverflowMenu.test.tsx similarity index 97% rename from app/src/organisms/RobotSettingsCalibration/CalibrationDetails/__tests__/ModuleCalibrationOverflowMenu.test.tsx rename to app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/__tests__/ModuleCalibrationOverflowMenu.test.tsx index bf37956c884..47b5dbec249 100644 --- a/app/src/organisms/RobotSettingsCalibration/CalibrationDetails/__tests__/ModuleCalibrationOverflowMenu.test.tsx +++ b/app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/__tests__/ModuleCalibrationOverflowMenu.test.tsx @@ -1,14 +1,13 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen, waitFor } from '@testing-library/react' import { when } from 'vitest-when' import { describe, it, expect, vi, beforeEach } from 'vitest' import { i18n } from '/app/i18n' import { renderWithProviders } from '/app/__testing-utils__' import { ModuleWizardFlows } from '/app/organisms/ModuleWizardFlows' -import { useChainLiveCommands } from '/app/resources/runs' +import { useChainLiveCommands, useRunStatuses } from '/app/resources/runs' import { mockThermocyclerGen2 } from '/app/redux/modules/__fixtures__' import { useIsEstopNotDisengaged } from '/app/resources/devices/hooks/useIsEstopNotDisengaged' -import { useRunStatuses } from '/app/organisms/Devices/hooks' import { ModuleCalibrationOverflowMenu } from '../ModuleCalibrationOverflowMenu' @@ -16,7 +15,6 @@ import type { Mount } from '@opentrons/components' vi.mock('@opentrons/react-api-client') vi.mock('/app/organisms/ModuleWizardFlows') -vi.mock('/app/organisms/Devices/hooks') vi.mock('/app/resources/runs') vi.mock('/app/resources/devices/hooks/useIsEstopNotDisengaged') diff --git a/app/src/organisms/RobotSettingsCalibration/CalibrationDetails/__tests__/OverflowMenu.test.tsx b/app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/__tests__/OverflowMenu.test.tsx similarity index 92% rename from app/src/organisms/RobotSettingsCalibration/CalibrationDetails/__tests__/OverflowMenu.test.tsx rename to app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/__tests__/OverflowMenu.test.tsx index f112040edc5..a0d2ff20096 100644 --- a/app/src/organisms/RobotSettingsCalibration/CalibrationDetails/__tests__/OverflowMenu.test.tsx +++ b/app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/__tests__/OverflowMenu.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { when } from 'vitest-when' import '@testing-library/jest-dom/vitest' @@ -12,20 +12,18 @@ import { import { i18n } from '/app/i18n' import { mockDeckCalData } from '/app/redux/calibration/__fixtures__' -import { PipetteWizardFlows } from '../../../PipetteWizardFlows' -import { useCalibratePipetteOffset } from '../../../CalibratePipetteOffset/useCalibratePipetteOffset' -import { - useDeckCalibrationData, - useRunStatuses, - useAttachedPipettesFromInstrumentsQuery, -} from '../../../Devices/hooks' +import { PipetteWizardFlows } from '/app/organisms/PipetteWizardFlows' +import { useCalibratePipetteOffset } from '/app/organisms/Desktop/CalibratePipetteOffset/useCalibratePipetteOffset' +import { useDeckCalibrationData } from '../../../Devices/hooks' +import { useAttachedPipettesFromInstrumentsQuery } from '/app/resources/instruments' import { mockAttachedPipetteInformation } from '/app/redux/pipettes/__fixtures__' +import { useRunStatuses } from '/app/resources/runs' import { mockPipetteOffsetCalibrationsResponse, mockTipLengthCalibrationResponse, } from '../__fixtures__' import { renderWithProviders } from '/app/__testing-utils__' -import { useIsEstopNotDisengaged } from '/app/resources/devices/hooks/useIsEstopNotDisengaged' +import { useIsEstopNotDisengaged } from '/app/resources/devices' import { OverflowMenu } from '../OverflowMenu' import type { Mount } from '@opentrons/components' @@ -64,11 +62,14 @@ vi.mock('@opentrons/react-api-client') vi.mock('/app/redux/sessions/selectors') vi.mock('/app/redux/discovery') vi.mock('/app/redux/robot-api/selectors') -vi.mock('/app/organisms/CalibratePipetteOffset/useCalibratePipetteOffset') -vi.mock('/app/organisms/ProtocolUpload/hooks') -vi.mock('/app/organisms/Devices/hooks') -vi.mock('../../../PipetteWizardFlows') -vi.mock('/app/resources/devices/hooks/useIsEstopNotDisengaged') +vi.mock( + '/app/organisms/Desktop/CalibratePipetteOffset/useCalibratePipetteOffset' +) +vi.mock('../../../Devices/hooks') +vi.mock('/app/organisms/PipetteWizardFlows') +vi.mock('/app/resources/devices') +vi.mock('/app/resources/instruments') +vi.mock('/app/resources/runs') const RUN_STATUSES = { isRunRunning: false, diff --git a/app/src/organisms/RobotSettingsCalibration/CalibrationDetails/__tests__/PipetteOffsetCalibrationItems.test.tsx b/app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/__tests__/PipetteOffsetCalibrationItems.test.tsx similarity index 98% rename from app/src/organisms/RobotSettingsCalibration/CalibrationDetails/__tests__/PipetteOffsetCalibrationItems.test.tsx rename to app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/__tests__/PipetteOffsetCalibrationItems.test.tsx index 57e528d1554..2a6cf82726f 100644 --- a/app/src/organisms/RobotSettingsCalibration/CalibrationDetails/__tests__/PipetteOffsetCalibrationItems.test.tsx +++ b/app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/__tests__/PipetteOffsetCalibrationItems.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { when } from 'vitest-when' import { screen } from '@testing-library/react' import { describe, it, expect, vi, beforeEach } from 'vitest' @@ -12,7 +12,7 @@ import { import { useAttachedPipettes, useAttachedPipettesFromInstrumentsQuery, -} from '/app/organisms/Devices/hooks' +} from '/app/resources/instruments' import { useIsFlex } from '/app/redux-resources/robots' import { renderWithProviders } from '/app/__testing-utils__' import { PipetteOffsetCalibrationItems } from '../PipetteOffsetCalibrationItems' @@ -62,8 +62,8 @@ vi.mock('/app/redux/custom-labware/selectors') vi.mock('/app/redux/sessions/selectors') vi.mock('/app/redux/discovery') vi.mock('/app/assets/labware/findLabware') -vi.mock('/app/organisms/Devices/hooks') vi.mock('/app/redux-resources/robots') +vi.mock('/app/resources/instruments') vi.mock('../OverflowMenu') const mockAttachedPipettes: AttachedPipettesByMount = { diff --git a/app/src/organisms/RobotSettingsCalibration/CalibrationDetails/__tests__/TipLengthCalibrationItems.test.tsx b/app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/__tests__/TipLengthCalibrationItems.test.tsx similarity index 97% rename from app/src/organisms/RobotSettingsCalibration/CalibrationDetails/__tests__/TipLengthCalibrationItems.test.tsx rename to app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/__tests__/TipLengthCalibrationItems.test.tsx index 44481da6f3d..014ec28ee2c 100644 --- a/app/src/organisms/RobotSettingsCalibration/CalibrationDetails/__tests__/TipLengthCalibrationItems.test.tsx +++ b/app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/__tests__/TipLengthCalibrationItems.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { screen } from '@testing-library/react' import { describe, it, expect, vi, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' @@ -13,7 +13,7 @@ vi.mock('/app/redux/config') vi.mock('/app/redux/sessions/selectors') vi.mock('/app/redux/discovery') vi.mock('/app/assets/labware/findLabware') -vi.mock('/app/organisms/Devices/hooks') +vi.mock('/app/organisms/Desktop/Devices/hooks') vi.mock('../OverflowMenu') const ROBOT_NAME = 'otie' diff --git a/app/src/organisms/RobotSettingsCalibration/CalibrationDetails/__tests__/utils.test.ts b/app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/__tests__/utils.test.ts similarity index 100% rename from app/src/organisms/RobotSettingsCalibration/CalibrationDetails/__tests__/utils.test.ts rename to app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/__tests__/utils.test.ts diff --git a/app/src/organisms/RobotSettingsCalibration/CalibrationDetails/utils.ts b/app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/utils.ts similarity index 100% rename from app/src/organisms/RobotSettingsCalibration/CalibrationDetails/utils.ts rename to app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationDetails/utils.ts diff --git a/app/src/organisms/RobotSettingsCalibration/CalibrationHealthCheck.tsx b/app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationHealthCheck.tsx similarity index 92% rename from app/src/organisms/RobotSettingsCalibration/CalibrationHealthCheck.tsx rename to app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationHealthCheck.tsx index 15592842d02..f61b87c81ce 100644 --- a/app/src/organisms/RobotSettingsCalibration/CalibrationHealthCheck.tsx +++ b/app/src/organisms/Desktop/RobotSettingsCalibration/CalibrationHealthCheck.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { createPortal } from 'react-dom' import { useSelector } from 'react-redux' import { useTranslation } from 'react-i18next' @@ -16,9 +16,9 @@ import { useHoverTooltip, } from '@opentrons/components' -import { getTopPortalEl } from '../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import { TertiaryButton } from '/app/atoms/buttons' -import { AskForCalibrationBlockModal } from '/app/organisms/CalibrateTipLength/AskForCalibrationBlockModal' +import { AskForCalibrationBlockModal } from '../CalibrateTipLength/AskForCalibrationBlockModal' import { useTrackEvent, ANALYTICS_CALIBRATION_HEALTH_CHECK_BUTTON_CLICKED, @@ -27,12 +27,12 @@ import * as Calibration from '/app/redux/calibration' import * as Config from '/app/redux/config' import * as Pipettes from '/app/redux/pipettes' import * as Sessions from '/app/redux/sessions' +import { useRunStatuses } from '/app/resources/runs' import { - useDeckCalibrationStatus, useAttachedPipettes, useAttachedPipetteCalibrations, - useRunStatuses, -} from '/app/organisms/Devices/hooks' +} from '/app/resources/instruments' +import { useDeckCalibrationStatus } from '/app/resources/calibration' import type { AttachedPipettesByMount, @@ -74,7 +74,7 @@ export function CalibrationHealthCheck({ placement: TOOLTIP_LEFT, }) - const [showCalBlockModal, setShowCalBlockModal] = React.useState(false) + const [showCalBlockModal, setShowCalBlockModal] = useState(false) const deckCalibrationStatus = useDeckCalibrationStatus(robotName) const attachedPipettes = useAttachedPipettes() diff --git a/app/src/organisms/RobotSettingsCalibration/DeckCalibrationConfirmModal.tsx b/app/src/organisms/Desktop/RobotSettingsCalibration/DeckCalibrationConfirmModal.tsx similarity index 98% rename from app/src/organisms/RobotSettingsCalibration/DeckCalibrationConfirmModal.tsx rename to app/src/organisms/Desktop/RobotSettingsCalibration/DeckCalibrationConfirmModal.tsx index c07cef244ed..215ff113fe6 100644 --- a/app/src/organisms/RobotSettingsCalibration/DeckCalibrationConfirmModal.tsx +++ b/app/src/organisms/Desktop/RobotSettingsCalibration/DeckCalibrationConfirmModal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { ALIGN_CENTER, diff --git a/app/src/organisms/RobotSettingsCalibration/RobotSettingsDeckCalibration.tsx b/app/src/organisms/Desktop/RobotSettingsCalibration/RobotSettingsDeckCalibration.tsx similarity index 87% rename from app/src/organisms/RobotSettingsCalibration/RobotSettingsDeckCalibration.tsx rename to app/src/organisms/Desktop/RobotSettingsCalibration/RobotSettingsDeckCalibration.tsx index 6b48db62339..c78e53fc3f6 100644 --- a/app/src/organisms/RobotSettingsCalibration/RobotSettingsDeckCalibration.tsx +++ b/app/src/organisms/Desktop/RobotSettingsCalibration/RobotSettingsDeckCalibration.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useRef, useEffect } from 'react' import { useSelector } from 'react-redux' import { useTranslation } from 'react-i18next' @@ -11,8 +11,8 @@ import { LegacyStyledText, } from '@opentrons/components' -import { formatLastModified } from '/app/organisms/CalibrationPanels/utils' -import { useDeckCalibrationData } from '/app/organisms/Devices/hooks' +import { formatLastModified } from '../CalibrationPanels/utils' +import { useDeckCalibrationData } from '/app/organisms/Desktop/Devices/hooks' import { useRobot } from '/app/redux-resources/robots' import * as RobotApi from '/app/redux/robot-api' @@ -26,7 +26,7 @@ export function RobotSettingsDeckCalibration({ robotName, }: RobotSettingsDeckCalibrationProps): JSX.Element { const { t } = useTranslation('device_settings') - const createRequestId = React.useRef(null) + const createRequestId = useRef(null) const robot = useRobot(robotName) const deckCalibrationData = useDeckCalibrationData(robot?.name) @@ -47,7 +47,7 @@ export function RobotSettingsDeckCalibration({ }) : t('not_calibrated') - React.useEffect(() => { + useEffect(() => { if (createStatus === RobotApi.SUCCESS) { createRequestId.current = null } diff --git a/app/src/organisms/RobotSettingsCalibration/RobotSettingsGripperCalibration.tsx b/app/src/organisms/Desktop/RobotSettingsCalibration/RobotSettingsGripperCalibration.tsx similarity index 98% rename from app/src/organisms/RobotSettingsCalibration/RobotSettingsGripperCalibration.tsx rename to app/src/organisms/Desktop/RobotSettingsCalibration/RobotSettingsGripperCalibration.tsx index fef63c269ad..90cd9c9f4a8 100644 --- a/app/src/organisms/RobotSettingsCalibration/RobotSettingsGripperCalibration.tsx +++ b/app/src/organisms/Desktop/RobotSettingsCalibration/RobotSettingsGripperCalibration.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { useTranslation } from 'react-i18next' import styled, { css } from 'styled-components' @@ -71,7 +71,7 @@ export function RobotSettingsGripperCalibration( setShowOverflowMenu(false) }, }) - const [showWizardFlow, setShowWizardFlow] = React.useState(false) + const [showWizardFlow, setShowWizardFlow] = useState(false) const isEstopNotDisengaged = useIsEstopNotDisengaged(robotName) const gripperCalibrationLastModified = diff --git a/app/src/organisms/RobotSettingsCalibration/RobotSettingsModuleCalibration.tsx b/app/src/organisms/Desktop/RobotSettingsCalibration/RobotSettingsModuleCalibration.tsx similarity index 98% rename from app/src/organisms/RobotSettingsCalibration/RobotSettingsModuleCalibration.tsx rename to app/src/organisms/Desktop/RobotSettingsCalibration/RobotSettingsModuleCalibration.tsx index c6cec90fbba..31e0e3114aa 100644 --- a/app/src/organisms/RobotSettingsCalibration/RobotSettingsModuleCalibration.tsx +++ b/app/src/organisms/Desktop/RobotSettingsCalibration/RobotSettingsModuleCalibration.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { diff --git a/app/src/organisms/RobotSettingsCalibration/RobotSettingsPipetteOffsetCalibration.tsx b/app/src/organisms/Desktop/RobotSettingsCalibration/RobotSettingsPipetteOffsetCalibration.tsx similarity index 92% rename from app/src/organisms/RobotSettingsCalibration/RobotSettingsPipetteOffsetCalibration.tsx rename to app/src/organisms/Desktop/RobotSettingsCalibration/RobotSettingsPipetteOffsetCalibration.tsx index 78a9ee9db51..b2a774a0e9e 100644 --- a/app/src/organisms/RobotSettingsCalibration/RobotSettingsPipetteOffsetCalibration.tsx +++ b/app/src/organisms/Desktop/RobotSettingsCalibration/RobotSettingsPipetteOffsetCalibration.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { @@ -10,12 +9,10 @@ import { } from '@opentrons/components' import { useInstrumentsQuery } from '@opentrons/react-api-client' -import { - useAttachedPipettesFromInstrumentsQuery, - usePipetteOffsetCalibrations, -} from '../Devices/hooks' +import { usePipetteOffsetCalibrations } from '../Devices/hooks' +import { useAttachedPipettesFromInstrumentsQuery } from '/app/resources/instruments' import { useIsFlex } from '/app/redux-resources/robots' -import { getShowPipetteCalibrationWarning } from '../Devices/utils' +import { getShowPipetteCalibrationWarning } from '/app/transformations/instruments' import { PipetteRecalibrationWarning } from '../Devices/PipetteCard/PipetteRecalibrationWarning' import { PipetteOffsetCalibrationItems } from './CalibrationDetails/PipetteOffsetCalibrationItems' diff --git a/app/src/organisms/RobotSettingsCalibration/RobotSettingsTipLengthCalibration.tsx b/app/src/organisms/Desktop/RobotSettingsCalibration/RobotSettingsTipLengthCalibration.tsx similarity index 97% rename from app/src/organisms/RobotSettingsCalibration/RobotSettingsTipLengthCalibration.tsx rename to app/src/organisms/Desktop/RobotSettingsCalibration/RobotSettingsTipLengthCalibration.tsx index 362bd05ed28..ebca2db82c8 100644 --- a/app/src/organisms/RobotSettingsCalibration/RobotSettingsTipLengthCalibration.tsx +++ b/app/src/organisms/Desktop/RobotSettingsCalibration/RobotSettingsTipLengthCalibration.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { getLabwareDefURI } from '@opentrons/shared-data' @@ -11,7 +10,7 @@ import { } from '@opentrons/components' import { useAllTipLengthCalibrationsQuery } from '@opentrons/react-api-client' -import { useAttachedPipettes } from '/app/organisms/Devices/hooks' +import { useAttachedPipettes } from '/app/resources/instruments' import { getDefaultTiprackDefForPipetteName } from '../Devices/constants' import { TipLengthCalibrationItems } from './CalibrationDetails/TipLengthCalibrationItems' diff --git a/app/src/organisms/RobotSettingsCalibration/__tests__/CalibrationDataDownload.test.tsx b/app/src/organisms/Desktop/RobotSettingsCalibration/__tests__/CalibrationDataDownload.test.tsx similarity index 98% rename from app/src/organisms/RobotSettingsCalibration/__tests__/CalibrationDataDownload.test.tsx rename to app/src/organisms/Desktop/RobotSettingsCalibration/__tests__/CalibrationDataDownload.test.tsx index cb5a764bc53..b84b25e2e16 100644 --- a/app/src/organisms/RobotSettingsCalibration/__tests__/CalibrationDataDownload.test.tsx +++ b/app/src/organisms/Desktop/RobotSettingsCalibration/__tests__/CalibrationDataDownload.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { when } from 'vitest-when' import { describe, @@ -39,7 +38,7 @@ import { useDeckCalibrationData, usePipetteOffsetCalibrations, useTipLengthCalibrations, -} from '/app/organisms/Devices/hooks' +} from '/app/organisms/Desktop/Devices/hooks' import { useRobot, useIsFlex } from '/app/redux-resources/robots' import { renderWithProviders } from '/app/__testing-utils__' import { useIsEstopNotDisengaged } from '/app/resources/devices/hooks/useIsEstopNotDisengaged' @@ -55,7 +54,7 @@ vi.mock('file-saver', async importOriginal => { }) vi.mock('@opentrons/react-api-client') vi.mock('/app/redux/analytics') -vi.mock('/app/organisms/Devices/hooks') +vi.mock('/app/organisms/Desktop/Devices/hooks') vi.mock('/app/redux-resources/robots') vi.mock('/app/resources/devices/hooks/useIsEstopNotDisengaged') diff --git a/app/src/organisms/RobotSettingsCalibration/__tests__/CalibrationHealthCheck.test.tsx b/app/src/organisms/Desktop/RobotSettingsCalibration/__tests__/CalibrationHealthCheck.test.tsx similarity index 95% rename from app/src/organisms/RobotSettingsCalibration/__tests__/CalibrationHealthCheck.test.tsx rename to app/src/organisms/Desktop/RobotSettingsCalibration/__tests__/CalibrationHealthCheck.test.tsx index 2fafaf3acce..ee965c9d042 100644 --- a/app/src/organisms/RobotSettingsCalibration/__tests__/CalibrationHealthCheck.test.tsx +++ b/app/src/organisms/Desktop/RobotSettingsCalibration/__tests__/CalibrationHealthCheck.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import userEvent from '@testing-library/user-event' import { fireEvent, screen, waitFor } from '@testing-library/react' import { describe, it, expect, vi, beforeEach } from 'vitest' @@ -19,11 +19,12 @@ import { mockTipLengthCalibration2, } from '/app/redux/calibration/tip-length/__fixtures__' import { mockAttachedPipette } from '/app/redux/pipettes/__fixtures__' +import { useRunStatuses } from '/app/resources/runs' + import { useAttachedPipettes, useAttachedPipetteCalibrations, - useRunStatuses, -} from '/app/organisms/Devices/hooks' +} from '/app/resources/instruments' import { CalibrationHealthCheck } from '../CalibrationHealthCheck' @@ -35,7 +36,9 @@ import type { vi.mock('/app/redux/analytics') vi.mock('/app/redux/config') vi.mock('/app/redux/pipettes') -vi.mock('/app/organisms/Devices/hooks') +vi.mock('/app/resources/runs') +vi.mock('/app/resources/instruments') +vi.mock('/app/redux-resources/robots') const mockAttachedPipettes: AttachedPipettesByMount = { left: mockAttachedPipette, diff --git a/app/src/organisms/RobotSettingsCalibration/__tests__/RobotSettingsCalibration.test.tsx b/app/src/organisms/Desktop/RobotSettingsCalibration/__tests__/RobotSettingsCalibration.test.tsx similarity index 95% rename from app/src/organisms/RobotSettingsCalibration/__tests__/RobotSettingsCalibration.test.tsx rename to app/src/organisms/Desktop/RobotSettingsCalibration/__tests__/RobotSettingsCalibration.test.tsx index 03ca54a3d48..f883fcfe4c8 100644 --- a/app/src/organisms/RobotSettingsCalibration/__tests__/RobotSettingsCalibration.test.tsx +++ b/app/src/organisms/Desktop/RobotSettingsCalibration/__tests__/RobotSettingsCalibration.test.tsx @@ -1,11 +1,10 @@ -import * as React from 'react' import { when } from 'vitest-when' import { screen } from '@testing-library/react' import { describe, it, expect, beforeEach, vi } from 'vitest' import '@testing-library/jest-dom/vitest' import { useInstrumentsQuery } from '@opentrons/react-api-client' import { i18n } from '/app/i18n' -import { CalibrationStatusCard } from '/app/organisms/CalibrationStatusCard' +import { CalibrationStatusCard } from '../..//CalibrationStatusCard' import { useFeatureFlag } from '/app/redux/config' import * as RobotApi from '/app/redux/robot-api' import { renderWithProviders } from '/app/__testing-utils__' @@ -19,13 +18,13 @@ import { mockAttachedPipette, mockAttachedPipetteInformation, } from '/app/redux/pipettes/__fixtures__' +import { usePipetteOffsetCalibrations } from '/app/organisms/Desktop/Devices/hooks' import { - usePipetteOffsetCalibrations, useAttachedPipettes, - useRunStatuses, useAttachedPipettesFromInstrumentsQuery, -} from '/app/organisms/Devices/hooks' +} from '/app/resources/instruments' import { useRobot, useIsFlex } from '/app/redux-resources/robots' +import { useRunStatuses } from '/app/resources/runs' import { CalibrationDataDownload } from '../CalibrationDataDownload' import { CalibrationHealthCheck } from '../CalibrationHealthCheck' @@ -45,12 +44,14 @@ vi.mock('@opentrons/react-api-client', async importOriginal => { useInstrumentsQuery: vi.fn(), } }) -vi.mock('/app/organisms/CalibrationStatusCard') +vi.mock('../../CalibrationStatusCard') vi.mock('/app/redux/config') vi.mock('/app/redux/sessions/selectors') vi.mock('/app/redux/robot-api/selectors') vi.mock('/app/redux-resources/robots') -vi.mock('/app/organisms/Devices/hooks') +vi.mock('/app/resources/instruments') +vi.mock('/app/organisms/Desktop/Devices/hooks') +vi.mock('/app/resources/runs') vi.mock('../CalibrationDataDownload') vi.mock('../CalibrationHealthCheck') vi.mock('../RobotSettingsDeckCalibration') diff --git a/app/src/organisms/RobotSettingsCalibration/__tests__/RobotSettingsDeckCalibration.test.tsx b/app/src/organisms/Desktop/RobotSettingsCalibration/__tests__/RobotSettingsDeckCalibration.test.tsx similarity index 89% rename from app/src/organisms/RobotSettingsCalibration/__tests__/RobotSettingsDeckCalibration.test.tsx rename to app/src/organisms/Desktop/RobotSettingsCalibration/__tests__/RobotSettingsDeckCalibration.test.tsx index 7f0c90b02a0..2c46916fc3c 100644 --- a/app/src/organisms/RobotSettingsCalibration/__tests__/RobotSettingsDeckCalibration.test.tsx +++ b/app/src/organisms/Desktop/RobotSettingsCalibration/__tests__/RobotSettingsDeckCalibration.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { screen } from '@testing-library/react' import { describe, it, vi, beforeEach } from 'vitest' @@ -10,10 +10,8 @@ import { } from '/app/redux/calibration/__fixtures__' import { mockConnectableRobot } from '/app/redux/discovery/__fixtures__' import { mockAttachedPipette } from '/app/redux/pipettes/__fixtures__' -import { - useDeckCalibrationData, - useAttachedPipettes, -} from '/app/organisms/Devices/hooks' +import { useDeckCalibrationData } from '/app/organisms/Desktop/Devices/hooks' +import { useAttachedPipettes } from '/app/resources/instruments' import { useRobot } from '/app/redux-resources/robots' import { renderWithProviders } from '/app/__testing-utils__' @@ -21,10 +19,11 @@ import { RobotSettingsDeckCalibration } from '../RobotSettingsDeckCalibration' import type { AttachedPipettesByMount } from '/app/redux/pipettes/types' -vi.mock('/app/organisms/CalibrationStatusCard') +vi.mock('../..//CalibrationStatusCard') vi.mock('/app/redux/robot-api/selectors') vi.mock('/app/redux-resources/robots') -vi.mock('/app/organisms/Devices/hooks') +vi.mock('/app/organisms/Desktop/Devices/hooks') +vi.mock('/app/resources/instruments') const mockAttachedPipettes: AttachedPipettesByMount = { left: mockAttachedPipette, diff --git a/app/src/organisms/RobotSettingsCalibration/__tests__/RobotSettingsGripperCalibration.test.tsx b/app/src/organisms/Desktop/RobotSettingsCalibration/__tests__/RobotSettingsGripperCalibration.test.tsx similarity index 99% rename from app/src/organisms/RobotSettingsCalibration/__tests__/RobotSettingsGripperCalibration.test.tsx rename to app/src/organisms/Desktop/RobotSettingsCalibration/__tests__/RobotSettingsGripperCalibration.test.tsx index 3e5d952ea09..e4a4d48eea1 100644 --- a/app/src/organisms/RobotSettingsCalibration/__tests__/RobotSettingsGripperCalibration.test.tsx +++ b/app/src/organisms/Desktop/RobotSettingsCalibration/__tests__/RobotSettingsGripperCalibration.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { when } from 'vitest-when' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, vi, beforeEach } from 'vitest' diff --git a/app/src/organisms/RobotSettingsCalibration/__tests__/RobotSettingsModuleCalibration.test.tsx b/app/src/organisms/Desktop/RobotSettingsCalibration/__tests__/RobotSettingsModuleCalibration.test.tsx similarity index 98% rename from app/src/organisms/RobotSettingsCalibration/__tests__/RobotSettingsModuleCalibration.test.tsx rename to app/src/organisms/Desktop/RobotSettingsCalibration/__tests__/RobotSettingsModuleCalibration.test.tsx index 8c2f9fa9a4c..95b71a450af 100644 --- a/app/src/organisms/RobotSettingsCalibration/__tests__/RobotSettingsModuleCalibration.test.tsx +++ b/app/src/organisms/Desktop/RobotSettingsCalibration/__tests__/RobotSettingsModuleCalibration.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { screen } from '@testing-library/react' import { describe, it, vi, beforeEach } from 'vitest' import { i18n } from '/app/i18n' diff --git a/app/src/organisms/RobotSettingsCalibration/__tests__/RobotSettingsPipetteOffsetCalibration.test.tsx b/app/src/organisms/Desktop/RobotSettingsCalibration/__tests__/RobotSettingsPipetteOffsetCalibration.test.tsx similarity index 91% rename from app/src/organisms/RobotSettingsCalibration/__tests__/RobotSettingsPipetteOffsetCalibration.test.tsx rename to app/src/organisms/Desktop/RobotSettingsCalibration/__tests__/RobotSettingsPipetteOffsetCalibration.test.tsx index 5c88977ca7c..0f628dddfef 100644 --- a/app/src/organisms/RobotSettingsCalibration/__tests__/RobotSettingsPipetteOffsetCalibration.test.tsx +++ b/app/src/organisms/Desktop/RobotSettingsCalibration/__tests__/RobotSettingsPipetteOffsetCalibration.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { when } from 'vitest-when' import { describe, it, vi, beforeEach } from 'vitest' import { screen } from '@testing-library/react' @@ -9,10 +9,8 @@ import { mockPipetteOffsetCalibration2, mockPipetteOffsetCalibration3, } from '/app/redux/calibration/pipette-offset/__fixtures__' -import { - usePipetteOffsetCalibrations, - useAttachedPipettesFromInstrumentsQuery, -} from '/app/organisms/Devices/hooks' +import { usePipetteOffsetCalibrations } from '/app/organisms/Desktop/Devices/hooks' +import { useAttachedPipettesFromInstrumentsQuery } from '/app/resources/instruments' import { renderWithProviders } from '/app/__testing-utils__' import { mockAttachedPipetteInformation } from '/app/redux/pipettes/__fixtures__' import { useIsFlex } from '/app/redux-resources/robots' @@ -22,7 +20,8 @@ import { PipetteOffsetCalibrationItems } from '../CalibrationDetails/PipetteOffs import type { FormattedPipetteOffsetCalibration } from '..' -vi.mock('/app/organisms/Devices/hooks') +vi.mock('/app/organisms/Desktop/Devices/hooks') +vi.mock('/app/resources/instruments') vi.mock('/app/redux-resources/robots') vi.mock('../CalibrationDetails/PipetteOffsetCalibrationItems') diff --git a/app/src/organisms/RobotSettingsCalibration/__tests__/RobotSettingsTipLengthCalibration.test.tsx b/app/src/organisms/Desktop/RobotSettingsCalibration/__tests__/RobotSettingsTipLengthCalibration.test.tsx similarity index 89% rename from app/src/organisms/RobotSettingsCalibration/__tests__/RobotSettingsTipLengthCalibration.test.tsx rename to app/src/organisms/Desktop/RobotSettingsCalibration/__tests__/RobotSettingsTipLengthCalibration.test.tsx index 0549050d7e1..d9b229c0f4e 100644 --- a/app/src/organisms/RobotSettingsCalibration/__tests__/RobotSettingsTipLengthCalibration.test.tsx +++ b/app/src/organisms/Desktop/RobotSettingsCalibration/__tests__/RobotSettingsTipLengthCalibration.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { screen } from '@testing-library/react' import { describe, it, beforeEach, vi } from 'vitest' import { i18n } from '/app/i18n' @@ -10,10 +9,8 @@ import { mockTipLengthCalibration3, } from '/app/redux/calibration/tip-length/__fixtures__' import { mockAttachedPipette } from '/app/redux/pipettes/__fixtures__' -import { - useAttachedPipettes, - useTipLengthCalibrations, -} from '/app/organisms/Devices/hooks' +import { useTipLengthCalibrations } from '/app/organisms/Desktop/Devices/hooks' +import { useAttachedPipettes } from '/app/resources/instruments' import { RobotSettingsTipLengthCalibration } from '../RobotSettingsTipLengthCalibration' import { TipLengthCalibrationItems } from '../CalibrationDetails/TipLengthCalibrationItems' @@ -22,8 +19,9 @@ import type { FormattedPipetteOffsetCalibration } from '..' import type { AttachedPipettesByMount } from '/app/redux/pipettes/types' vi.mock('/app/redux/config') -vi.mock('/app/organisms/Devices/hooks') +vi.mock('/app/organisms/Desktop/Devices/hooks') vi.mock('../CalibrationDetails/TipLengthCalibrationItems') +vi.mock('/app/resources/instruments') const mockFormattedPipetteOffsetCalibrations: FormattedPipetteOffsetCalibration[] = [] diff --git a/app/src/organisms/RobotSettingsCalibration/index.tsx b/app/src/organisms/Desktop/RobotSettingsCalibration/index.tsx similarity index 94% rename from app/src/organisms/RobotSettingsCalibration/index.tsx rename to app/src/organisms/Desktop/RobotSettingsCalibration/index.tsx index 22bff478880..76e5d8f9171 100644 --- a/app/src/organisms/RobotSettingsCalibration/index.tsx +++ b/app/src/organisms/Desktop/RobotSettingsCalibration/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useRef, useState, useEffect } from 'react' import { createPortal } from 'react-dom' import { useSelector, useDispatch } from 'react-redux' import { useTranslation } from 'react-i18next' @@ -16,17 +16,15 @@ import { useModulesQuery, } from '@opentrons/react-api-client' -import { getTopPortalEl } from '../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import { Line } from '/app/atoms/structure' -import { CalibrateDeck } from '/app/organisms/CalibrateDeck' -import { CalibrationStatusCard } from '/app/organisms/CalibrationStatusCard' -import { CheckCalibration } from '/app/organisms/CheckCalibration' -import { - useRunStatuses, - useAttachedPipettesFromInstrumentsQuery, -} from '/app/organisms/Devices/hooks' +import { CalibrateDeck } from '../CalibrateDeck' +import { CalibrationStatusCard } from '../CalibrationStatusCard' +import { CheckCalibration } from '../CheckCalibration' +import { useRunStatuses } from '/app/resources/runs' +import { useAttachedPipettesFromInstrumentsQuery } from '/app/resources/instruments' import { useRobot, useIsFlex } from '/app/redux-resources/robots' -import { HowCalibrationWorksModal } from '/app/organisms/HowCalibrationWorksModal' +import { HowCalibrationWorksModal } from '../HowCalibrationWorksModal' import { CONNECTABLE } from '/app/redux/discovery' import * as RobotApi from '/app/redux/robot-api' import { getDeckCalibrationSession } from '/app/redux/sessions/deck-calibration/selectors' @@ -77,21 +75,21 @@ export function RobotSettingsCalibration({ 'robot_calibration', 'shared', ]) - const trackedRequestId = React.useRef(null) - const createRequestId = React.useRef(null) - const jogRequestId = React.useRef(null) + const trackedRequestId = useRef(null) + const createRequestId = useRef(null) + const jogRequestId = useRef(null) const [ showHowCalibrationWorksModal, setShowHowCalibrationWorksModal, - ] = React.useState(false) + ] = useState(false) const robot = useRobot(robotName) const notConnectable = robot?.status !== CONNECTABLE const isFlex = useIsFlex(robotName) const dispatch = useDispatch() - React.useEffect(() => { + useEffect(() => { dispatch(Sessions.fetchAllSessions(robotName)) }, [dispatch, robotName]) @@ -249,7 +247,7 @@ export function RobotSettingsCalibration({ }) } - React.useEffect(() => { + useEffect(() => { if (createStatus === RobotApi.SUCCESS) { createRequestId.current = null } diff --git a/app/src/organisms/RunProgressMeter/InterventionTicks.tsx b/app/src/organisms/Desktop/RunProgressMeter/InterventionTicks.tsx similarity index 98% rename from app/src/organisms/RunProgressMeter/InterventionTicks.tsx rename to app/src/organisms/Desktop/RunProgressMeter/InterventionTicks.tsx index f8dfd722f17..8bab7b981af 100644 --- a/app/src/organisms/RunProgressMeter/InterventionTicks.tsx +++ b/app/src/organisms/Desktop/RunProgressMeter/InterventionTicks.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import last from 'lodash/last' import { Tick } from './Tick' import type { RunTimeCommand } from '@opentrons/shared-data' diff --git a/app/src/organisms/RunProgressMeter/Tick.tsx b/app/src/organisms/Desktop/RunProgressMeter/Tick.tsx similarity index 97% rename from app/src/organisms/RunProgressMeter/Tick.tsx rename to app/src/organisms/Desktop/RunProgressMeter/Tick.tsx index 5bb644f87b8..ddb3d0a7c79 100644 --- a/app/src/organisms/RunProgressMeter/Tick.tsx +++ b/app/src/organisms/Desktop/RunProgressMeter/Tick.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { createPortal } from 'react-dom' @@ -15,7 +14,7 @@ import { useHoverTooltip, } from '@opentrons/components' -import { getModalPortalEl } from '../../App/portal' +import { getModalPortalEl } from '/app/App/portal' import type { IconName } from '@opentrons/components' import type { RunTimeCommand } from '@opentrons/shared-data' diff --git a/app/src/organisms/RunProgressMeter/__fixtures__/index.ts b/app/src/organisms/Desktop/RunProgressMeter/__fixtures__/index.ts similarity index 100% rename from app/src/organisms/RunProgressMeter/__fixtures__/index.ts rename to app/src/organisms/Desktop/RunProgressMeter/__fixtures__/index.ts diff --git a/app/src/organisms/RunProgressMeter/__tests__/InterventionTicks.test.tsx b/app/src/organisms/Desktop/RunProgressMeter/__tests__/InterventionTicks.test.tsx similarity index 98% rename from app/src/organisms/RunProgressMeter/__tests__/InterventionTicks.test.tsx rename to app/src/organisms/Desktop/RunProgressMeter/__tests__/InterventionTicks.test.tsx index 8c25d7359d9..c6562476818 100644 --- a/app/src/organisms/RunProgressMeter/__tests__/InterventionTicks.test.tsx +++ b/app/src/organisms/Desktop/RunProgressMeter/__tests__/InterventionTicks.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { screen } from '@testing-library/react' import { describe, it, expect, vi, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' diff --git a/app/src/organisms/RunProgressMeter/__tests__/RunProgressMeter.test.tsx b/app/src/organisms/Desktop/RunProgressMeter/__tests__/RunProgressMeter.test.tsx similarity index 91% rename from app/src/organisms/RunProgressMeter/__tests__/RunProgressMeter.test.tsx rename to app/src/organisms/Desktop/RunProgressMeter/__tests__/RunProgressMeter.test.tsx index 143a1f3afb4..4217ce8618a 100644 --- a/app/src/organisms/RunProgressMeter/__tests__/RunProgressMeter.test.tsx +++ b/app/src/organisms/Desktop/RunProgressMeter/__tests__/RunProgressMeter.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { when } from 'vitest-when' import { screen } from '@testing-library/react' import { describe, it, expect, vi, beforeEach } from 'vitest' @@ -16,14 +16,15 @@ import { i18n } from '/app/i18n' import { useInterventionModal, InterventionModal, -} from '../../InterventionModal' +} from '/app/organisms/InterventionModal' import { ProgressBar } from '/app/atoms/ProgressBar' -import { useRunControls } from '../../RunTimeControl/hooks' -import { useMostRecentCompletedAnalysis } from '../../LabwarePositionCheck/useMostRecentCompletedAnalysis' +import { useRunControls } from '/app/organisms/RunTimeControl' import { useNotifyRunQuery, useNotifyAllCommandsQuery, useRunStatus, + useMostRecentCompletedAnalysis, + useLastRunCommand, } from '/app/resources/runs' import { useDownloadRunLog } from '../../Devices/hooks' import { @@ -34,7 +35,6 @@ import { import { RunProgressMeter } from '..' import { renderWithProviders } from '/app/__testing-utils__' -import { useLastRunCommand } from '../../Devices/hooks/useLastRunCommand' import { useRunningStepCounts } from '/app/resources/protocols/hooks' import type { RunCommandSummary } from '@opentrons/api-client' @@ -47,13 +47,11 @@ vi.mock('@opentrons/react-api-client', async importOriginal => { useCommandQuery: vi.fn(), } }) -vi.mock('../../RunTimeControl/hooks') -vi.mock('../../LabwarePositionCheck/useMostRecentCompletedAnalysis') +vi.mock('/app/organisms/RunTimeControl') vi.mock('/app/resources/runs') -vi.mock('../../Devices/hooks') vi.mock('/app/atoms/ProgressBar') -vi.mock('../../InterventionModal') -vi.mock('../../Devices/hooks/useLastRunCommand') +vi.mock('/app/organisms/InterventionModal') +vi.mock('../../Devices/hooks') vi.mock('/app/resources/protocols/hooks') vi.mock('/app/redux-resources/robots') diff --git a/app/src/organisms/RunProgressMeter/constants.ts b/app/src/organisms/Desktop/RunProgressMeter/constants.ts similarity index 100% rename from app/src/organisms/RunProgressMeter/constants.ts rename to app/src/organisms/Desktop/RunProgressMeter/constants.ts diff --git a/app/src/organisms/RunProgressMeter/hooks/index.ts b/app/src/organisms/Desktop/RunProgressMeter/hooks/index.ts similarity index 100% rename from app/src/organisms/RunProgressMeter/hooks/index.ts rename to app/src/organisms/Desktop/RunProgressMeter/hooks/index.ts diff --git a/app/src/organisms/RunProgressMeter/hooks/useRunProgressCopy.tsx b/app/src/organisms/Desktop/RunProgressMeter/hooks/useRunProgressCopy.tsx similarity index 98% rename from app/src/organisms/RunProgressMeter/hooks/useRunProgressCopy.tsx rename to app/src/organisms/Desktop/RunProgressMeter/hooks/useRunProgressCopy.tsx index ee5cce24cea..66e1960f939 100644 --- a/app/src/organisms/RunProgressMeter/hooks/useRunProgressCopy.tsx +++ b/app/src/organisms/Desktop/RunProgressMeter/hooks/useRunProgressCopy.tsx @@ -2,7 +2,7 @@ import { RUN_STATUS_BLOCKED_BY_OPEN_DOOR, RUN_STATUS_IDLE, } from '@opentrons/api-client' -import * as React from 'react' +import type * as React from 'react' import { useTranslation } from 'react-i18next' import { getCommandTextData } from '/app/molecules/Command/utils/getCommandTextData' import { LegacyStyledText } from '@opentrons/components' diff --git a/app/src/organisms/RunProgressMeter/index.tsx b/app/src/organisms/Desktop/RunProgressMeter/index.tsx similarity index 93% rename from app/src/organisms/RunProgressMeter/index.tsx rename to app/src/organisms/Desktop/RunProgressMeter/index.tsx index cd5ca1c3b24..481947e1707 100644 --- a/app/src/organisms/RunProgressMeter/index.tsx +++ b/app/src/organisms/Desktop/RunProgressMeter/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { createPortal } from 'react-dom' import { useTranslation } from 'react-i18next' import { css } from 'styled-components' @@ -27,12 +27,15 @@ import { RUN_STATUS_IDLE, RUN_STATUS_FINISHING, RUN_STATUS_RUNNING, + RUN_STATUS_BLOCKED_BY_OPEN_DOOR, } from '@opentrons/api-client' -import { useMostRecentCompletedAnalysis } from '../LabwarePositionCheck/useMostRecentCompletedAnalysis' -import { getModalPortalEl } from '../../App/portal' -import { useRunControls } from '../RunTimeControl/hooks' -import { InterventionModal, useInterventionModal } from '../InterventionModal' +import { getModalPortalEl } from '/app/App/portal' +import { useRunControls } from '/app/organisms/RunTimeControl' +import { + InterventionModal, + useInterventionModal, +} from '/app/organisms/InterventionModal' import { ProgressBar } from '/app/atoms/ProgressBar' import { useDownloadRunLog } from '../Devices/hooks' import { InterventionTicks } from './InterventionTicks' @@ -40,6 +43,7 @@ import { useNotifyRunQuery, useNotifyAllCommandsQuery, useRunStatus, + useMostRecentCompletedAnalysis, } from '/app/resources/runs' import { useRobotType } from '/app/redux-resources/robots' import { useRunningStepCounts } from '/app/resources/protocols/hooks' @@ -95,7 +99,6 @@ export function RunProgressMeter(props: RunProgressMeterProps): JSX.Element { e.stopPropagation() downloadRunLog() } - const { showModal: showIntervention, modalProps: interventionProps, @@ -105,6 +108,7 @@ export function RunProgressMeter(props: RunProgressMeterProps): JSX.Element { runData, analysis, lastRunCommand, + doorIsOpen: runStatus === RUN_STATUS_BLOCKED_BY_OPEN_DOOR, }) const { diff --git a/app/src/organisms/SendProtocolToFlexSlideout/__tests__/SendProtocolToFlexSlideout.test.tsx b/app/src/organisms/Desktop/SendProtocolToFlexSlideout/__tests__/SendProtocolToFlexSlideout.test.tsx similarity index 98% rename from app/src/organisms/SendProtocolToFlexSlideout/__tests__/SendProtocolToFlexSlideout.test.tsx rename to app/src/organisms/Desktop/SendProtocolToFlexSlideout/__tests__/SendProtocolToFlexSlideout.test.tsx index 2c7c9aebe1c..5ed8f96fb1a 100644 --- a/app/src/organisms/SendProtocolToFlexSlideout/__tests__/SendProtocolToFlexSlideout.test.tsx +++ b/app/src/organisms/Desktop/SendProtocolToFlexSlideout/__tests__/SendProtocolToFlexSlideout.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, vi, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' @@ -7,10 +7,10 @@ import { MemoryRouter } from 'react-router-dom' import { mockOT3HealthResponse, mockOT3ServerHealthResponse, -} from '../../../../../discovery-client/src/fixtures' +} from '../../../../../../discovery-client/src/fixtures' import { useCreateProtocolMutation } from '@opentrons/react-api-client' -import { mockSuccessQueryResults } from '../../../__fixtures__' +import { mockSuccessQueryResults } from '/app/__fixtures__' import { i18n } from '/app/i18n' import { useToaster } from '/app/organisms/ToasterOven' import { diff --git a/app/src/organisms/SendProtocolToFlexSlideout/index.tsx b/app/src/organisms/Desktop/SendProtocolToFlexSlideout/index.tsx similarity index 94% rename from app/src/organisms/SendProtocolToFlexSlideout/index.tsx rename to app/src/organisms/Desktop/SendProtocolToFlexSlideout/index.tsx index 969f080fb3a..0326b750ce4 100644 --- a/app/src/organisms/SendProtocolToFlexSlideout/index.tsx +++ b/app/src/organisms/Desktop/SendProtocolToFlexSlideout/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { useTranslation } from 'react-i18next' import { useSelector } from 'react-redux' @@ -12,11 +12,9 @@ import { INFO_TOAST, SUCCESS_TOAST, } from '@opentrons/components' -import { ChooseRobotSlideout } from '/app/organisms/ChooseRobotSlideout' -import { - getAnalysisStatus, - getProtocolDisplayName, -} from '/app/organisms/ProtocolsLanding/utils' +import { ChooseRobotSlideout } from '../ChooseRobotSlideout' +import { getAnalysisStatus } from '/app/transformations/analysis' +import { getProtocolDisplayName } from '/app/transformations/protocols' import { useToaster } from '/app/organisms/ToasterOven' import { appShellRequestor } from '/app/redux/shell/remote' import { OPENTRONS_USB } from '/app/redux/discovery' @@ -52,7 +50,7 @@ export function SendProtocolToFlexSlideout( } = storedProtocolData const { t } = useTranslation(['protocol_details', 'protocol_list']) - const [selectedRobot, setSelectedRobot] = React.useState(null) + const [selectedRobot, setSelectedRobot] = useState(null) const isSelectedRobotOnDifferentSoftwareVersion = useIsRobotOnWrongVersionOfSoftware( selectedRobot?.name ?? '' diff --git a/app/src/organisms/UpdateAppModal/__tests__/UpdateAppModal.test.tsx b/app/src/organisms/Desktop/UpdateAppModal/__tests__/UpdateAppModal.test.tsx similarity index 99% rename from app/src/organisms/UpdateAppModal/__tests__/UpdateAppModal.test.tsx rename to app/src/organisms/Desktop/UpdateAppModal/__tests__/UpdateAppModal.test.tsx index 83cd713c2ef..3131bee25a3 100644 --- a/app/src/organisms/UpdateAppModal/__tests__/UpdateAppModal.test.tsx +++ b/app/src/organisms/Desktop/UpdateAppModal/__tests__/UpdateAppModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { screen, fireEvent } from '@testing-library/react' import { describe, it, expect, vi, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' diff --git a/app/src/organisms/UpdateAppModal/index.tsx b/app/src/organisms/Desktop/UpdateAppModal/index.tsx similarity index 98% rename from app/src/organisms/UpdateAppModal/index.tsx rename to app/src/organisms/Desktop/UpdateAppModal/index.tsx index b29c4e66528..450824c27f5 100644 --- a/app/src/organisms/UpdateAppModal/index.tsx +++ b/app/src/organisms/Desktop/UpdateAppModal/index.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useSelector, useDispatch } from 'react-redux' import styled, { css } from 'styled-components' import { useNavigate } from 'react-router-dom' @@ -6,6 +5,7 @@ import { useTranslation } from 'react-i18next' import { ALIGN_CENTER, + Banner, BORDERS, COLORS, DIRECTION_COLUMN, @@ -28,7 +28,6 @@ import { import { ExternalLink } from '/app/atoms/Link/ExternalLink' import { ReleaseNotes } from '/app/molecules/ReleaseNotes' -import { Banner } from '/app/atoms/Banner' import { ProgressBar } from '/app/atoms/ProgressBar' import { useRemoveActiveAppUpdateToast } from '../Alerts' diff --git a/app/src/organisms/UpdateRobotBanner/__tests__/UpdateRobotBanner.test.tsx b/app/src/organisms/Desktop/UpdateRobotBanner/__tests__/UpdateRobotBanner.test.tsx similarity index 98% rename from app/src/organisms/UpdateRobotBanner/__tests__/UpdateRobotBanner.test.tsx rename to app/src/organisms/Desktop/UpdateRobotBanner/__tests__/UpdateRobotBanner.test.tsx index 6742d808999..e7d90f70ea3 100644 --- a/app/src/organisms/UpdateRobotBanner/__tests__/UpdateRobotBanner.test.tsx +++ b/app/src/organisms/Desktop/UpdateRobotBanner/__tests__/UpdateRobotBanner.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, expect, vi, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' import { fireEvent, screen } from '@testing-library/react' diff --git a/app/src/organisms/UpdateRobotBanner/index.tsx b/app/src/organisms/Desktop/UpdateRobotBanner/index.tsx similarity index 95% rename from app/src/organisms/UpdateRobotBanner/index.tsx rename to app/src/organisms/Desktop/UpdateRobotBanner/index.tsx index 57fcae39aff..e5d7d2d0e85 100644 --- a/app/src/organisms/UpdateRobotBanner/index.tsx +++ b/app/src/organisms/Desktop/UpdateRobotBanner/index.tsx @@ -1,15 +1,15 @@ -import * as React from 'react' +import type * as React from 'react' import { useSelector } from 'react-redux' import { useTranslation } from 'react-i18next' import { Btn, DIRECTION_COLUMN, Flex, + Banner, SPACING, LegacyStyledText, TYPOGRAPHY, } from '@opentrons/components' -import { Banner } from '/app/atoms/Banner' import { getRobotUpdateDisplayInfo } from '/app/redux/robot-update' import { handleUpdateBuildroot } from '../Devices/RobotSettings/UpdateBuildroot' diff --git a/app/src/organisms/DeviceDetailsDeckConfiguration/AddFixtureModal.stories.tsx b/app/src/organisms/DeviceDetailsDeckConfiguration/AddFixtureModal.stories.tsx index de7c062f9d1..f14c6d46e96 100644 --- a/app/src/organisms/DeviceDetailsDeckConfiguration/AddFixtureModal.stories.tsx +++ b/app/src/organisms/DeviceDetailsDeckConfiguration/AddFixtureModal.stories.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { QueryClient, QueryClientProvider } from 'react-query' import { VIEWPORT } from '@opentrons/components' import { AddFixtureModal } from './AddFixtureModal' diff --git a/app/src/organisms/DeviceDetailsDeckConfiguration/DeckConfigurationDiscardChangesModal.stories.tsx b/app/src/organisms/DeviceDetailsDeckConfiguration/DeckConfigurationDiscardChangesModal.stories.tsx index 0fdee52a94e..971950f222c 100644 --- a/app/src/organisms/DeviceDetailsDeckConfiguration/DeckConfigurationDiscardChangesModal.stories.tsx +++ b/app/src/organisms/DeviceDetailsDeckConfiguration/DeckConfigurationDiscardChangesModal.stories.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { VIEWPORT } from '@opentrons/components' import { DeckConfigurationDiscardChangesModal } from './DeckConfigurationDiscardChangesModal' import type { Story, Meta } from '@storybook/react' diff --git a/app/src/organisms/DeviceDetailsDeckConfiguration/DeckConfigurationDiscardChangesModal.tsx b/app/src/organisms/DeviceDetailsDeckConfiguration/DeckConfigurationDiscardChangesModal.tsx index 9e803032b2d..bdf8339de71 100644 --- a/app/src/organisms/DeviceDetailsDeckConfiguration/DeckConfigurationDiscardChangesModal.tsx +++ b/app/src/organisms/DeviceDetailsDeckConfiguration/DeckConfigurationDiscardChangesModal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { useNavigate } from 'react-router-dom' diff --git a/app/src/organisms/DeviceDetailsDeckConfiguration/DeckFixtureSetupInstructionsModal.tsx b/app/src/organisms/DeviceDetailsDeckConfiguration/DeckFixtureSetupInstructionsModal.tsx index 8f7f72c3433..cfda966a3c1 100644 --- a/app/src/organisms/DeviceDetailsDeckConfiguration/DeckFixtureSetupInstructionsModal.tsx +++ b/app/src/organisms/DeviceDetailsDeckConfiguration/DeckFixtureSetupInstructionsModal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { ALIGN_FLEX_END, diff --git a/app/src/organisms/DeviceDetailsDeckConfiguration/TouchScreenDeckFixtureSetupInstructionModal.stories.tsx b/app/src/organisms/DeviceDetailsDeckConfiguration/TouchScreenDeckFixtureSetupInstructionModal.stories.tsx index ec078d74eea..09586ea57f2 100644 --- a/app/src/organisms/DeviceDetailsDeckConfiguration/TouchScreenDeckFixtureSetupInstructionModal.stories.tsx +++ b/app/src/organisms/DeviceDetailsDeckConfiguration/TouchScreenDeckFixtureSetupInstructionModal.stories.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { VIEWPORT } from '@opentrons/components' import { DeckFixtureSetupInstructionsModal } from './DeckFixtureSetupInstructionsModal' import type { Story, Meta } from '@storybook/react' diff --git a/app/src/organisms/DeviceDetailsDeckConfiguration/__tests__/AddFixtureModal.test.tsx b/app/src/organisms/DeviceDetailsDeckConfiguration/__tests__/AddFixtureModal.test.tsx index 3834d80f839..450a64cc0e6 100644 --- a/app/src/organisms/DeviceDetailsDeckConfiguration/__tests__/AddFixtureModal.test.tsx +++ b/app/src/organisms/DeviceDetailsDeckConfiguration/__tests__/AddFixtureModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, beforeEach, vi, expect, afterEach } from 'vitest' diff --git a/app/src/organisms/DeviceDetailsDeckConfiguration/__tests__/DeckConfigurationDiscardChangesModal.test.tsx b/app/src/organisms/DeviceDetailsDeckConfiguration/__tests__/DeckConfigurationDiscardChangesModal.test.tsx index 538ee899f46..fd0e56ffa4d 100644 --- a/app/src/organisms/DeviceDetailsDeckConfiguration/__tests__/DeckConfigurationDiscardChangesModal.test.tsx +++ b/app/src/organisms/DeviceDetailsDeckConfiguration/__tests__/DeckConfigurationDiscardChangesModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, beforeEach, vi, expect } from 'vitest' diff --git a/app/src/organisms/DeviceDetailsDeckConfiguration/__tests__/DeckFixtureSetupInstructionsModal.test.tsx b/app/src/organisms/DeviceDetailsDeckConfiguration/__tests__/DeckFixtureSetupInstructionsModal.test.tsx index 611f34b2600..ddc9ff33194 100644 --- a/app/src/organisms/DeviceDetailsDeckConfiguration/__tests__/DeckFixtureSetupInstructionsModal.test.tsx +++ b/app/src/organisms/DeviceDetailsDeckConfiguration/__tests__/DeckFixtureSetupInstructionsModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, beforeEach, vi, expect } from 'vitest' diff --git a/app/src/organisms/DeviceDetailsDeckConfiguration/__tests__/DeviceDetailsDeckConfiguration.test.tsx b/app/src/organisms/DeviceDetailsDeckConfiguration/__tests__/DeviceDetailsDeckConfiguration.test.tsx index 731639882e8..16ef3db90a7 100644 --- a/app/src/organisms/DeviceDetailsDeckConfiguration/__tests__/DeviceDetailsDeckConfiguration.test.tsx +++ b/app/src/organisms/DeviceDetailsDeckConfiguration/__tests__/DeviceDetailsDeckConfiguration.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { when } from 'vitest-when' import { describe, it, beforeEach, vi, afterEach } from 'vitest' @@ -12,7 +12,8 @@ import { import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' -import { useIsRobotViewable, useRunStatuses } from '../../Devices/hooks' +import { useRunStatuses } from '/app/resources/runs' +import { useIsRobotViewable } from '/app/redux-resources/robots' import { DeckFixtureSetupInstructionsModal } from '../DeckFixtureSetupInstructionsModal' import { useIsEstopNotDisengaged } from '/app/resources/devices/hooks/useIsEstopNotDisengaged' import { DeviceDetailsDeckConfiguration } from '../' @@ -36,7 +37,8 @@ vi.mock('@opentrons/components', async importOriginal => { }) vi.mock('@opentrons/react-api-client') vi.mock('../DeckFixtureSetupInstructionsModal') -vi.mock('../../Devices/hooks') +vi.mock('/app/resources/runs') +vi.mock('/app/redux-resources/robots') vi.mock('/app/resources/maintenance_runs') vi.mock('/app/resources/devices/hooks/useIsEstopNotDisengaged') vi.mock('/app/resources/deck_configuration') diff --git a/app/src/organisms/DeviceDetailsDeckConfiguration/index.tsx b/app/src/organisms/DeviceDetailsDeckConfiguration/index.tsx index 2e717a4638a..1e3ef81960a 100644 --- a/app/src/organisms/DeviceDetailsDeckConfiguration/index.tsx +++ b/app/src/organisms/DeviceDetailsDeckConfiguration/index.tsx @@ -1,10 +1,11 @@ -import * as React from 'react' +import { useState } from 'react' import { useTranslation } from 'react-i18next' import { css } from 'styled-components' import { ALIGN_CENTER, ALIGN_FLEX_START, + Banner, BORDERS, COLORS, DeckConfigurator, @@ -29,9 +30,9 @@ import { } from '@opentrons/shared-data' import { useNotifyCurrentMaintenanceRun } from '/app/resources/maintenance_runs' -import { Banner } from '/app/atoms/Banner' import { DeckFixtureSetupInstructionsModal } from './DeckFixtureSetupInstructionsModal' -import { useIsRobotViewable, useRunStatuses } from '../Devices/hooks' +import { useRunStatuses } from '/app/resources/runs' +import { useIsRobotViewable } from '/app/redux-resources/robots' import { useIsEstopNotDisengaged } from '/app/resources/devices/hooks/useIsEstopNotDisengaged' import { useDeckConfigurationEditingTools, @@ -58,7 +59,7 @@ export function DeviceDetailsDeckConfiguration({ const [ showSetupInstructionsModal, setShowSetupInstructionsModal, - ] = React.useState(false) + ] = useState(false) const { data: modulesData } = useModulesQuery() const deckConfig = diff --git a/app/src/organisms/Devices/hooks/index.ts b/app/src/organisms/Devices/hooks/index.ts deleted file mode 100644 index f60c5a29c27..00000000000 --- a/app/src/organisms/Devices/hooks/index.ts +++ /dev/null @@ -1,30 +0,0 @@ -export * from './useAttachedModules' -export * from './useAttachedPipetteCalibrations' -export * from './useAttachedPipettes' -export * from './useDeckCalibrationData' -export * from './useDeckCalibrationStatus' -export * from './useDownloadRunLog' -export * from './useCalibrationTaskList' -export * from './useIsRobotBusy' -export * from './useIsRobotViewable' -export * from './useLights' -export * from './useLEDLights' -export * from './useLPCDisabledReason' -export * from './useLPCSuccessToast' -export * from './useModuleRenderInfoForProtocolById' -export * from './useModuleCalibrationStatus' -export * from './usePipetteOffsetCalibrations' -export * from './usePipetteOffsetCalibration' -export * from './useRunCalibrationStatus' -export * from './useRunCreatedAtTimestamp' -export * from './useRunHasStarted' -export * from './useRunPipetteInfoByMount' -export * from './useTipLengthCalibrations' -export * from './useUnmatchedModulesForProtocol' -export * from './useProtocolAnalysisErrors' -export * from './useRunStartedOrLegacySessionInProgress' -export * from './useTrackCreateProtocolRunEvent' -export * from './useRunStatuses' -export * from './useSyncRobotClock' -export * from './useIsLegacySessionInProgress' -export * from './useAttachedPipettesFromInstrumentsQuery' diff --git a/app/src/organisms/DropTipWizardFlows/DropTipWizard.tsx b/app/src/organisms/DropTipWizardFlows/DropTipWizard.tsx index caa0c6a733d..a81891d2144 100644 --- a/app/src/organisms/DropTipWizardFlows/DropTipWizard.tsx +++ b/app/src/organisms/DropTipWizardFlows/DropTipWizard.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { createPortal } from 'react-dom' import { useTranslation } from 'react-i18next' import { useSelector } from 'react-redux' @@ -19,7 +19,7 @@ import { OVERFLOW_HIDDEN, } from '@opentrons/components' -import { getTopPortalEl } from '../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import { getIsOnDevice } from '/app/redux/config' import { ExitConfirmation } from './ExitConfirmation' import { @@ -27,30 +27,40 @@ import { BLOWOUT_SUCCESS, CHOOSE_BLOWOUT_LOCATION, CHOOSE_DROP_TIP_LOCATION, + CHOOSE_LOCATION_OPTION, + CONFIRM_POSITION, DROP_TIP_SUCCESS, + DT_ROUTES, POSITION_AND_BLOWOUT, POSITION_AND_DROP_TIP, } from './constants' import { BeforeBeginning, ChooseLocation, + ChooseDeckLocation, JogToPosition, Success, + ConfirmPosition, + useConfirmPosition, } from './steps' import { InProgressModal } from '/app/molecules/InProgressModal' import { useDropTipErrorComponents } from './hooks' import { DropTipWizardHeader } from './DropTipWizardHeader' import { ErrorInfo } from './ErrorInfo' -import { ConfirmPosition, useConfirmPosition } from './ConfirmPosition' import type { DropTipWizardFlowsProps } from '.' import type { DropTipWizardContainerProps, IssuedCommandsType } from './types' -import type { UseDropTipRoutingResult, UseDropTipWithTypeResult } from './hooks' +import type { + UseDropTipRoutingResult, + UseDropTipWithTypeResult, + DropTipBlowoutLocationDetails, +} from './hooks' export type DropTipWizardProps = DropTipWizardFlowsProps & UseDropTipWithTypeResult & UseDropTipRoutingResult & { issuedCommandsType: IssuedCommandsType + dropTipCommandLocations: DropTipBlowoutLocationDetails[] } export function DropTipWizard(props: DropTipWizardProps): JSX.Element { @@ -170,6 +180,7 @@ export const DropTipWizardContent = ( const { activeMaintenanceRunId, currentStep, + currentRoute, errorDetails, isCommandInProgress, issuedCommandsType, @@ -192,7 +203,7 @@ export const DropTipWizardContent = ( return ( + return + } + + function buildChooseDeckLocation(): JSX.Element { + return } function buildJogToPosition(): JSX.Element { @@ -237,33 +252,35 @@ export const DropTipWizardContent = ( issuedCommandsType === 'setup' ) { return buildGettingReady() + } else if (confirmPositionUtils.isRobotPipetteMoving) { + return buildRobotPipetteMoving() } else if (isCommandInProgress || isExiting) { return buildRobotInMotion() - } else if (confirmPositionUtils.showConfirmPosition) { - return buildConfirmPosition() } else if (showConfirmExit) { return buildShowExitConfirmation() } else if (errorDetails != null) { return buildErrorScreen() } else if (currentStep === BEFORE_BEGINNING) { return buildBeforeBeginning() + } else if (currentStep === CHOOSE_LOCATION_OPTION) { + return buildChooseLocation() } else if ( currentStep === CHOOSE_BLOWOUT_LOCATION || currentStep === CHOOSE_DROP_TIP_LOCATION ) { - return buildChooseLocation() + return buildChooseDeckLocation() } else if ( currentStep === POSITION_AND_BLOWOUT || currentStep === POSITION_AND_DROP_TIP ) { return buildJogToPosition() + } else if (currentStep === CONFIRM_POSITION) { + return buildConfirmPosition() } else if ( currentStep === BLOWOUT_SUCCESS || currentStep === DROP_TIP_SUCCESS ) { return buildSuccess() - } else if (confirmPositionUtils.isRobotPipetteMoving) { - return buildRobotPipetteMoving() } else { return
    UNASSIGNED STEP
    } @@ -278,7 +295,7 @@ function useInitiateExit(): { isExitInitiated: boolean toggleExitInitiated: () => void } { - const [isExitInitiated, setIsExitInitiated] = React.useState(false) + const [isExitInitiated, setIsExitInitiated] = useState(false) const toggleExitInitiated = (): void => { setIsExitInitiated(true) diff --git a/app/src/organisms/DropTipWizardFlows/DropTipWizardFlows.tsx b/app/src/organisms/DropTipWizardFlows/DropTipWizardFlows.tsx index 6c7c4530af2..5bfb143b9fb 100644 --- a/app/src/organisms/DropTipWizardFlows/DropTipWizardFlows.tsx +++ b/app/src/organisms/DropTipWizardFlows/DropTipWizardFlows.tsx @@ -1,6 +1,10 @@ -import * as React from 'react' +import { useState } from 'react' -import { useDropTipRouting, useDropTipWithType } from './hooks' +import { + useDropTipLocations, + useDropTipRouting, + useDropTipWithType, +} from './hooks' import { DropTipWizard } from './DropTipWizard' import type { PipetteModelSpecs, RobotType } from '@opentrons/shared-data' @@ -20,7 +24,7 @@ export function useDropTipWizardFlows(): { showDTWiz: boolean toggleDTWiz: () => void } { - const [showDTWiz, setShowDTWiz] = React.useState(false) + const [showDTWiz, setShowDTWiz] = useState(false) const toggleDTWiz = (): void => { setShowDTWiz(!showDTWiz) @@ -52,8 +56,8 @@ export function DropTipWizardFlows( ...props, issuedCommandsType, }) - const dropTipRoutingUtils = useDropTipRouting(fixitCommandTypeUtils) + const dropTipCommandLocations = useDropTipLocations(props.robotType) // Prefetch to reduce client latency return ( ) } diff --git a/app/src/organisms/DropTipWizardFlows/DropTipWizardHeader.tsx b/app/src/organisms/DropTipWizardFlows/DropTipWizardHeader.tsx index 551cb2435c5..e883da67d2b 100644 --- a/app/src/organisms/DropTipWizardFlows/DropTipWizardHeader.tsx +++ b/app/src/organisms/DropTipWizardFlows/DropTipWizardHeader.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, useEffect } from 'react' import { useTranslation } from 'react-i18next' import { BEFORE_BEGINNING, BLOWOUT_SUCCESS, DT_ROUTES } from './constants' @@ -70,11 +70,9 @@ export function useSeenBlowoutSuccess({ currentRoute, currentStepIdx, }: UseSeenBlowoutSuccessProps): UseSeenBlowoutSuccessResult { - const [hasSeenBlowoutSuccess, setHasSeenBlowoutSuccess] = React.useState( - false - ) + const [hasSeenBlowoutSuccess, setHasSeenBlowoutSuccess] = useState(false) - React.useEffect(() => { + useEffect(() => { if (currentStep === BLOWOUT_SUCCESS) { setHasSeenBlowoutSuccess(true) } else if (currentStep === BEFORE_BEGINNING) { diff --git a/app/src/organisms/DropTipWizardFlows/ErrorInfo.tsx b/app/src/organisms/DropTipWizardFlows/ErrorInfo.tsx index 4ae0ef5ad60..400a34fce72 100644 --- a/app/src/organisms/DropTipWizardFlows/ErrorInfo.tsx +++ b/app/src/organisms/DropTipWizardFlows/ErrorInfo.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { css } from 'styled-components' diff --git a/app/src/organisms/DropTipWizardFlows/ExitConfirmation.tsx b/app/src/organisms/DropTipWizardFlows/ExitConfirmation.tsx index 69f1a3270a7..9c5486624b7 100644 --- a/app/src/organisms/DropTipWizardFlows/ExitConfirmation.tsx +++ b/app/src/organisms/DropTipWizardFlows/ExitConfirmation.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { Trans, useTranslation } from 'react-i18next' import { css } from 'styled-components' diff --git a/app/src/organisms/DropTipWizardFlows/TipsAttachedModal.tsx b/app/src/organisms/DropTipWizardFlows/TipsAttachedModal.tsx index 401944a29ab..5117c520384 100644 --- a/app/src/organisms/DropTipWizardFlows/TipsAttachedModal.tsx +++ b/app/src/organisms/DropTipWizardFlows/TipsAttachedModal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import NiceModal, { useModal } from '@ebay/nice-modal-react' import { Trans, useTranslation } from 'react-i18next' diff --git a/app/src/organisms/DropTipWizardFlows/__fixtures__/index.ts b/app/src/organisms/DropTipWizardFlows/__fixtures__/index.ts index 203037d3eb0..b2d9abfcf45 100644 --- a/app/src/organisms/DropTipWizardFlows/__fixtures__/index.ts +++ b/app/src/organisms/DropTipWizardFlows/__fixtures__/index.ts @@ -39,8 +39,9 @@ export const mockDropTipWizardContainerProps: DropTipWizardContainerProps = { closeFlow: MOCK_FN, confirmExit: MOCK_FN, goBackRunValid: MOCK_FN, - proceedToRoute: MOCK_FN, + proceedToRouteAndStep: MOCK_FN, toggleExitInitiated: MOCK_FN, proceedWithConditionalClose: MOCK_FN, proceed: MOCK_FN, + dropTipCommandLocations: [], } diff --git a/app/src/organisms/DropTipWizardFlows/__tests__/DropTipWizard.test.tsx b/app/src/organisms/DropTipWizardFlows/__tests__/DropTipWizard.test.tsx index 891bac931c2..d1108fc3c18 100644 --- a/app/src/organisms/DropTipWizardFlows/__tests__/DropTipWizard.test.tsx +++ b/app/src/organisms/DropTipWizardFlows/__tests__/DropTipWizard.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { vi, describe, it, expect, beforeEach } from 'vitest' import { screen } from '@testing-library/react' @@ -14,6 +14,9 @@ import { ChooseLocation, JogToPosition, Success, + ConfirmPosition, + useConfirmPosition, + ChooseDeckLocation, } from '../steps' import { ErrorInfo } from '../ErrorInfo' import { @@ -24,6 +27,8 @@ import { POSITION_AND_DROP_TIP, BLOWOUT_SUCCESS, DROP_TIP_SUCCESS, + CHOOSE_LOCATION_OPTION, + CONFIRM_POSITION, } from '../constants' vi.mock('/app/molecules/InProgressModal') @@ -49,6 +54,11 @@ describe('DropTipWizardContainer', () => { vi.mocked(DropTipWizardHeader).mockReturnValue(
    MOCK WIZARD HEADER
    ) + + vi.mocked(useConfirmPosition).mockReturnValue({ + toggleIsRobotPipetteMoving: vi.fn(), + isRobotPipetteMoving: false, + }) }) it('renders the special-cased Fixit view if the issuedCommandsType is fixit without a header', () => { @@ -86,6 +96,10 @@ describe('DropTipWizardContent', () => { ) vi.mocked(BeforeBeginning).mockReturnValue(
    MOCK_BEFORE_BEGINNING
    ) vi.mocked(ChooseLocation).mockReturnValue(
    MOCK_CHOOSE_LOCATION
    ) + vi.mocked(ChooseDeckLocation).mockReturnValue( +
    MOCK_CHOOSE_DECK_LOCATION
    + ) + vi.mocked(ConfirmPosition).mockReturnValue(
    MOCK_CONFIRM_POSITION
    ) vi.mocked(JogToPosition).mockReturnValue(
    MOCK_JOG_TO_POSITION
    ) vi.mocked(Success).mockReturnValue(
    MOCK_SUCCESS
    ) vi.mocked(ErrorInfo).mockReturnValue(
    MOCK_ERROR_INFO
    ) @@ -130,22 +144,40 @@ describe('DropTipWizardContent', () => { screen.getByText('MOCK_BEFORE_BEGINNING') }) - it(`renders ChooseLocation when currentStep is ${CHOOSE_BLOWOUT_LOCATION}`, () => { + it(`renders ChooseLocation when currentStep is ${CHOOSE_LOCATION_OPTION}`, () => { renderDropTipWizardContent({ ...props, - currentStep: CHOOSE_BLOWOUT_LOCATION, + currentStep: CHOOSE_LOCATION_OPTION, }) screen.getByText('MOCK_CHOOSE_LOCATION') }) - it(`renders ChooseLocation when currentStep is ${CHOOSE_DROP_TIP_LOCATION}`, () => { + it(`renders ChooseDeckLocation when currentStep is ${CHOOSE_BLOWOUT_LOCATION}`, () => { + renderDropTipWizardContent({ + ...props, + currentStep: CHOOSE_BLOWOUT_LOCATION, + }) + + screen.getByText('MOCK_CHOOSE_DECK_LOCATION') + }) + + it(`renders ChooseDeckLocation when currentStep is ${CHOOSE_DROP_TIP_LOCATION}`, () => { renderDropTipWizardContent({ ...props, currentStep: CHOOSE_DROP_TIP_LOCATION, }) - screen.getByText('MOCK_CHOOSE_LOCATION') + screen.getByText('MOCK_CHOOSE_DECK_LOCATION') + }) + + it(`renders ConfirmPosition when currentStep is ${CONFIRM_POSITION}`, () => { + renderDropTipWizardContent({ + ...props, + currentStep: CONFIRM_POSITION, + }) + + screen.getByText('MOCK_CONFIRM_POSITION') }) it(`renders JogToPosition when currentStep is ${POSITION_AND_BLOWOUT} `, () => { diff --git a/app/src/organisms/DropTipWizardFlows/__tests__/DropTipWizardHeader.test.tsx b/app/src/organisms/DropTipWizardFlows/__tests__/DropTipWizardHeader.test.tsx index aceecbdd723..306b3eff6d1 100644 --- a/app/src/organisms/DropTipWizardFlows/__tests__/DropTipWizardHeader.test.tsx +++ b/app/src/organisms/DropTipWizardFlows/__tests__/DropTipWizardHeader.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { beforeEach, describe, expect, it, vi } from 'vitest' import { renderHook, screen } from '@testing-library/react' @@ -31,7 +31,7 @@ describe('DropTipWizardHeader', () => { it('renders appropriate copy and onClick behavior', () => { render(props) screen.getByText('Drop tips') - screen.getByText('Step 1 / 3') + screen.getByText('Step 1 / 5') }) }) diff --git a/app/src/organisms/DropTipWizardFlows/__tests__/TipsAttachedModal.test.tsx b/app/src/organisms/DropTipWizardFlows/__tests__/TipsAttachedModal.test.tsx index 07acb2c43e2..2eeaf07f70e 100644 --- a/app/src/organisms/DropTipWizardFlows/__tests__/TipsAttachedModal.test.tsx +++ b/app/src/organisms/DropTipWizardFlows/__tests__/TipsAttachedModal.test.tsx @@ -1,4 +1,3 @@ -import React from 'react' import NiceModal from '@ebay/nice-modal-react' import { describe, it, beforeEach, expect, vi } from 'vitest' import { fireEvent, screen } from '@testing-library/react' diff --git a/app/src/organisms/DropTipWizardFlows/constants.ts b/app/src/organisms/DropTipWizardFlows/constants.ts index 39d75318824..1a28283171b 100644 --- a/app/src/organisms/DropTipWizardFlows/constants.ts +++ b/app/src/organisms/DropTipWizardFlows/constants.ts @@ -3,21 +3,27 @@ export const BEFORE_BEGINNING = 'BEFORE_BEGINNING' export const POSITION_AND_BLOWOUT = 'POSITION_AND_BLOWOUT' as const export const BLOWOUT_SUCCESS = 'BLOWOUT_SUCCESS' as const +export const CHOOSE_LOCATION_OPTION = 'CHOOSE_LOCATION_OPTION' as const export const CHOOSE_BLOWOUT_LOCATION = 'CHOOSE_BLOWOUT_LOCATION' as const export const CHOOSE_DROP_TIP_LOCATION = 'CHOOSE_DROP_TIP_LOCATION' as const export const POSITION_AND_DROP_TIP = 'POSITION_AND_DROP_TIP' as const +export const CONFIRM_POSITION = 'CONFIRM_POSITION' as const export const DROP_TIP_SUCCESS = 'DROP_TIP_SUCCESS' as const export const INVALID = 'INVALID' as const export const BEFORE_BEGINNING_STEPS = [BEFORE_BEGINNING] as const export const BLOWOUT_STEPS = [ + CHOOSE_LOCATION_OPTION, CHOOSE_BLOWOUT_LOCATION, POSITION_AND_BLOWOUT, + CONFIRM_POSITION, BLOWOUT_SUCCESS, ] as const export const DROP_TIP_STEPS = [ + CHOOSE_LOCATION_OPTION, CHOOSE_DROP_TIP_LOCATION, POSITION_AND_DROP_TIP, + CONFIRM_POSITION, DROP_TIP_SUCCESS, ] as const diff --git a/app/src/organisms/DropTipWizardFlows/hooks/__tests__/useDropTipLocations.test.ts b/app/src/organisms/DropTipWizardFlows/hooks/__tests__/useDropTipLocations.test.ts new file mode 100644 index 00000000000..ef52d17efed --- /dev/null +++ b/app/src/organisms/DropTipWizardFlows/hooks/__tests__/useDropTipLocations.test.ts @@ -0,0 +1,89 @@ +import { describe, it, expect, vi, beforeEach } from 'vitest' +import { renderHook } from '@testing-library/react' + +import { OT2_ROBOT_TYPE, FLEX_ROBOT_TYPE } from '@opentrons/shared-data' + +import { useNotifyDeckConfigurationQuery } from '/app/resources/deck_configuration' +import { useDropTipLocations } from '../useDropTipLocations' + +const TRASH_BIN_FIXTURE = 'trashBinAdapter' +const WASTE_CHUTE_FIXTURE_1 = 'wasteChuteRightAdapterNoCover' +const TRASH_BIN_CUTOUT = 'cutoutA2' +const WASTE_CHUTE_CUTOUT = 'cutoutA3' +const SLOT_A2 = 'A2' +const SLOT_A3 = 'A3' +const CHOOSE_DECK_LOCATION = 'CHOOSE_DECK_LOCATION' +const TRASH_BIN_LOCATION = 'trash-bin' +const WASTE_CHUTE_LOCATION = 'waste-chute' +const DECK_LOCATION = 'deck' + +vi.mock('/app/resources/deck_configuration') + +describe('useDropTipLocations', () => { + const mockDeckConfigFlex = [ + { cutoutFixtureId: TRASH_BIN_FIXTURE, cutoutId: TRASH_BIN_CUTOUT }, + { cutoutFixtureId: WASTE_CHUTE_FIXTURE_1, cutoutId: WASTE_CHUTE_CUTOUT }, + ] + + beforeEach(() => { + vi.mocked(useNotifyDeckConfigurationQuery).mockReturnValue({ + data: mockDeckConfigFlex, + } as any) + }) + + it('should return correct locations for an OT-2', () => { + vi.mocked(useNotifyDeckConfigurationQuery).mockReturnValue({ + data: [], + } as any) + + const { result } = renderHook(() => useDropTipLocations(OT2_ROBOT_TYPE)) + + expect(result.current).toEqual([ + { location: DECK_LOCATION, slotName: CHOOSE_DECK_LOCATION }, + ]) + }) + + it('should return correct locations for a Flex', () => { + const { result } = renderHook(() => useDropTipLocations(FLEX_ROBOT_TYPE)) + + expect(result.current).toEqual([ + { location: TRASH_BIN_LOCATION, slotName: SLOT_A2 }, + { location: WASTE_CHUTE_LOCATION, slotName: SLOT_A3 }, + { location: DECK_LOCATION, slotName: CHOOSE_DECK_LOCATION }, + ]) + }) + + it('should handle missing addressable areas for a Flex', () => { + const { result } = renderHook(() => useDropTipLocations(FLEX_ROBOT_TYPE)) + + expect(result.current).toEqual([ + { location: TRASH_BIN_LOCATION, slotName: SLOT_A2 }, + { location: WASTE_CHUTE_LOCATION, slotName: SLOT_A3 }, + { location: DECK_LOCATION, slotName: CHOOSE_DECK_LOCATION }, + ]) + }) + + it('should handle an empty deck configuration', () => { + vi.mocked(useNotifyDeckConfigurationQuery).mockReturnValue({ + data: [], + } as any) + + const { result } = renderHook(() => useDropTipLocations(OT2_ROBOT_TYPE)) + + expect(result.current).toEqual([ + { location: DECK_LOCATION, slotName: CHOOSE_DECK_LOCATION }, + ]) + }) + + it('should handle an undefined deck configuration', () => { + vi.mocked(useNotifyDeckConfigurationQuery).mockReturnValue({ + data: undefined, + } as any) + + const { result } = renderHook(() => useDropTipLocations(OT2_ROBOT_TYPE)) + + expect(result.current).toEqual([ + { location: DECK_LOCATION, slotName: CHOOSE_DECK_LOCATION }, + ]) + }) +}) diff --git a/app/src/organisms/DropTipWizardFlows/hooks/__tests__/useDropTipRouting.test.tsx b/app/src/organisms/DropTipWizardFlows/hooks/__tests__/useDropTipRouting.test.tsx index 651b3959b5d..c6cf823784c 100644 --- a/app/src/organisms/DropTipWizardFlows/hooks/__tests__/useDropTipRouting.test.tsx +++ b/app/src/organisms/DropTipWizardFlows/hooks/__tests__/useDropTipRouting.test.tsx @@ -18,7 +18,7 @@ describe('useDropTipRouting', () => { const { result } = renderHook(() => useDropTipRouting()) await act(async () => { - await result.current.proceedToRoute(DT_ROUTES.BLOWOUT) + await result.current.proceedToRouteAndStep(DT_ROUTES.BLOWOUT) }) const initialStep = result.current.currentStep @@ -34,7 +34,7 @@ describe('useDropTipRouting', () => { const { result } = renderHook(() => useDropTipRouting()) await act(async () => { - await result.current.proceedToRoute(DT_ROUTES.BLOWOUT) + await result.current.proceedToRouteAndStep(DT_ROUTES.BLOWOUT) }) await act(async () => { @@ -75,11 +75,11 @@ describe('useDropTipRouting', () => { expect(result.current.currentStepIdx).toBe(0) }) - it('should proceed to the specified route when proceedToRoute is called', async () => { + it('should proceed to the specified route when proceedToRouteAndStep is called', async () => { const { result } = renderHook(() => useDropTipRouting()) await act(async () => { - await result.current.proceedToRoute(DT_ROUTES.BLOWOUT) + await result.current.proceedToRouteAndStep(DT_ROUTES.BLOWOUT) }) expect(result.current.currentRoute).toBe(DT_ROUTES.BLOWOUT) expect(result.current.currentStep).toBe(head(DT_ROUTES.BLOWOUT)) @@ -98,7 +98,7 @@ describe('useReportMap', () => { const { result } = renderHook(() => useDropTipRouting(mockFixitUtils)) await act(async () => { - await result.current.proceedToRoute(DT_ROUTES.BLOWOUT) + await result.current.proceedToRouteAndStep(DT_ROUTES.BLOWOUT) }) expect(mockReportMap).toHaveBeenCalledWith({ diff --git a/app/src/organisms/DropTipWizardFlows/hooks/__tests__/useTipAttachmentStatus.test.tsx b/app/src/organisms/DropTipWizardFlows/hooks/__tests__/useTipAttachmentStatus.test.tsx index 86d6db11a10..6d9d25719d2 100644 --- a/app/src/organisms/DropTipWizardFlows/hooks/__tests__/useTipAttachmentStatus.test.tsx +++ b/app/src/organisms/DropTipWizardFlows/hooks/__tests__/useTipAttachmentStatus.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { act, renderHook } from '@testing-library/react' diff --git a/app/src/organisms/DropTipWizardFlows/hooks/errors.tsx b/app/src/organisms/DropTipWizardFlows/hooks/errors.tsx index cdfa5b32c2b..0a7cdd91d84 100644 --- a/app/src/organisms/DropTipWizardFlows/hooks/errors.tsx +++ b/app/src/organisms/DropTipWizardFlows/hooks/errors.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { AlertPrimaryButton, SPACING } from '@opentrons/components' diff --git a/app/src/organisms/DropTipWizardFlows/hooks/index.ts b/app/src/organisms/DropTipWizardFlows/hooks/index.ts index 890578280cc..09acf2b2a5d 100644 --- a/app/src/organisms/DropTipWizardFlows/hooks/index.ts +++ b/app/src/organisms/DropTipWizardFlows/hooks/index.ts @@ -2,6 +2,7 @@ export * from './errors' export * from './useDropTipWithType' export * from './useHomePipettes' export * from './useTipAttachmentStatus' +export * from './useDropTipLocations' export { useDropTipRouting } from './useDropTipRouting' export { useDropTipWithType } from './useDropTipWithType' diff --git a/app/src/organisms/DropTipWizardFlows/hooks/useDropTipCommands.ts b/app/src/organisms/DropTipWizardFlows/hooks/useDropTipCommands.ts index fd8047841d0..0f88c2ccc1c 100644 --- a/app/src/organisms/DropTipWizardFlows/hooks/useDropTipCommands.ts +++ b/app/src/organisms/DropTipWizardFlows/hooks/useDropTipCommands.ts @@ -1,8 +1,8 @@ -import * as React from 'react' +import { useState, useEffect } from 'react' import { useDeleteMaintenanceRunMutation } from '@opentrons/react-api-client' -import { MANAGED_PIPETTE_ID, POSITION_AND_BLOWOUT } from '../constants' +import { DT_ROUTES, MANAGED_PIPETTE_ID } from '../constants' import { getAddressableAreaFromConfig } from '../utils' import { useNotifyDeckConfigurationQuery } from '/app/resources/deck_configuration' import type { @@ -15,7 +15,7 @@ import type { import { FLEX_ROBOT_TYPE } from '@opentrons/shared-data' import type { CommandData, PipetteData } from '@opentrons/api-client' import type { Axis, Sign, StepSize } from '/app/molecules/JogControls/types' -import type { DropTipFlowsStep, FixitCommandTypeUtils } from '../types' +import type { DropTipFlowsRoute, FixitCommandTypeUtils } from '../types' import type { SetRobotErrorDetailsParams, UseDTWithTypeParams } from '.' import type { RunCommandByCommandTypeParams } from './useDropTipCreateCommands' @@ -37,10 +37,13 @@ type UseDropTipSetupCommandsParams = UseDTWithTypeParams & { export interface UseDropTipCommandsResult { handleCleanUpAndClose: (homeOnExit?: boolean) => Promise - moveToAddressableArea: (addressableArea: AddressableAreaName) => Promise + moveToAddressableArea: ( + addressableArea: AddressableAreaName, + stayAtHighestPossibleZ?: boolean + ) => Promise handleJog: (axis: Axis, dir: Sign, step: StepSize) => void blowoutOrDropTip: ( - currentStep: DropTipFlowsStep, + currentRoute: DropTipFlowsRoute, proceed: () => void ) => Promise handleMustHome: () => Promise @@ -59,9 +62,9 @@ export function useDropTipCommands({ fixitCommandTypeUtils, }: UseDropTipSetupCommandsParams): UseDropTipCommandsResult { const isFlex = robotType === FLEX_ROBOT_TYPE - const [hasSeenClose, setHasSeenClose] = React.useState(false) - const [jogQueue, setJogQueue] = React.useState Promise>>([]) - const [isJogging, setIsJogging] = React.useState(false) + const [hasSeenClose, setHasSeenClose] = useState(false) + const [jogQueue, setJogQueue] = useState Promise>>([]) + const [isJogging, setIsJogging] = useState(false) const pipetteId = fixitCommandTypeUtils?.pipetteId ?? null const { deleteMaintenanceRun } = useDeleteMaintenanceRunMutation() @@ -97,7 +100,8 @@ export function useDropTipCommands({ } const moveToAddressableArea = ( - addressableArea: AddressableAreaName + addressableArea: AddressableAreaName, + stayAtHighestPossibleZ = true // Generally false when moving to a waste chute or trash bin. ): Promise => { return new Promise((resolve, reject) => { const addressableAreaFromConfig = getAddressableAreaFromConfig( @@ -110,12 +114,18 @@ export function useDropTipCommands({ if (addressableAreaFromConfig != null) { const moveToAACommand = buildMoveToAACommand( addressableAreaFromConfig, - pipetteId + pipetteId, + stayAtHighestPossibleZ ) return chainRunCommands( isFlex - ? [ENGAGE_AXES, UPDATE_ESTIMATORS_EXCEPT_PLUNGERS, moveToAACommand] - : [moveToAACommand], + ? [ + ENGAGE_AXES, + UPDATE_ESTIMATORS_EXCEPT_PLUNGERS, + Z_HOME, + moveToAACommand, + ] + : [Z_HOME, moveToAACommand], true ) .then((commandData: CommandData[]) => { @@ -189,7 +199,7 @@ export function useDropTipCommands({ } } - React.useEffect(() => { + useEffect(() => { processJogQueue() }, [jogQueue.length, isJogging]) @@ -203,12 +213,12 @@ export function useDropTipCommands({ } const blowoutOrDropTip = ( - currentStep: DropTipFlowsStep, + currentRoute: DropTipFlowsRoute, proceed: () => void ): Promise => { return new Promise((resolve, reject) => { chainRunCommands( - currentStep === POSITION_AND_BLOWOUT + currentRoute === DT_ROUTES.BLOWOUT ? buildBlowoutCommands(instrumentModelSpecs, isFlex, pipetteId) : buildDropTipInPlaceCommand(isFlex, pipetteId), true @@ -220,7 +230,7 @@ export function useDropTipCommands({ fixitCommandTypeUtils != null && issuedCommandsType === 'fixit' ) { - if (currentStep === POSITION_AND_BLOWOUT) { + if (currentRoute === DT_ROUTES.BLOWOUT) { fixitCommandTypeUtils.errorOverrides.blowoutFailed() } else { fixitCommandTypeUtils.errorOverrides.tipDropFailed() @@ -238,7 +248,7 @@ export function useDropTipCommands({ }) .catch((error: Error) => { if (fixitCommandTypeUtils != null && issuedCommandsType === 'fixit') { - if (currentStep === POSITION_AND_BLOWOUT) { + if (currentRoute === DT_ROUTES.BLOWOUT) { fixitCommandTypeUtils.errorOverrides.blowoutFailed() } else { fixitCommandTypeUtils.errorOverrides.tipDropFailed() @@ -247,7 +257,7 @@ export function useDropTipCommands({ setErrorDetails({ message: `Error issuing ${ - currentStep === POSITION_AND_BLOWOUT ? 'blowout' : 'drop tip' + currentRoute === DT_ROUTES.BLOWOUT ? 'blowout' : 'drop tip' } command: ${error.message}`, }) resolve() @@ -292,6 +302,11 @@ const ENGAGE_AXES: CreateCommand = { }, } +const Z_HOME: CreateCommand = { + commandType: 'home' as const, + params: { axes: ['leftZ', 'rightZ'] }, +} + const HOME_EXCEPT_PLUNGERS: CreateCommand = { commandType: 'home' as const, params: { axes: ['leftZ', 'rightZ', 'x', 'y'] }, @@ -353,8 +368,6 @@ const buildBlowoutCommands = ( }, ] : [ - ENGAGE_AXES, - UPDATE_PLUNGER_ESTIMATORS, { commandType: 'blowOutInPlace', params: { @@ -367,15 +380,19 @@ const buildBlowoutCommands = ( const buildMoveToAACommand = ( addressableAreaFromConfig: AddressableAreaName, - pipetteId: string | null + pipetteId: string | null, + stayAtHighestPossibleZ: boolean ): CreateCommand => { + // Because we can never be certain about which tip is attached outside a protocol run, always assume the most + // conservative estimate, a 1000ul tip. + const zOffset = stayAtHighestPossibleZ ? 0 : 88 return { commandType: 'moveToAddressableArea', params: { pipetteId: pipetteId ?? MANAGED_PIPETTE_ID, - stayAtHighestPossibleZ: true, + stayAtHighestPossibleZ, addressableAreaName: addressableAreaFromConfig, - offset: { x: 0, y: 0, z: 0 }, + offset: { x: 0, y: 0, z: zOffset }, }, } } diff --git a/app/src/organisms/DropTipWizardFlows/hooks/useDropTipLocations.ts b/app/src/organisms/DropTipWizardFlows/hooks/useDropTipLocations.ts new file mode 100644 index 00000000000..62e4272449f --- /dev/null +++ b/app/src/organisms/DropTipWizardFlows/hooks/useDropTipLocations.ts @@ -0,0 +1,79 @@ +import { useMemo } from 'react' + +import { + getDeckDefFromRobotType, + OT2_ROBOT_TYPE, + TRASH_BIN_ADAPTER_FIXTURE, + WASTE_CHUTE_FIXTURES, +} from '@opentrons/shared-data' + +import { useNotifyDeckConfigurationQuery } from '/app/resources/deck_configuration' + +import type { + RobotType, + CutoutConfig, + AddressableAreaName, +} from '@opentrons/shared-data' +import type { ValidDropTipBlowoutLocation } from '../types' + +export type DropTipBlowoutSlotName = + | AddressableAreaName + | 'CHOOSE_DECK_LOCATION' + +export interface DropTipBlowoutLocationDetails { + slotName: DropTipBlowoutSlotName + location: ValidDropTipBlowoutLocation +} + +// TODO(jh 09-25-24): Add "Return to labware" support once the server returns relevant labware. + +// Returns valid location options for executing tip commands. +export function useDropTipLocations( + robotType: RobotType +): DropTipBlowoutLocationDetails[] { + const { data: deckConfig = [] } = useNotifyDeckConfigurationQuery() + const deckDef = useMemo(() => getDeckDefFromRobotType(robotType), [robotType]) + + return useMemo(() => { + const createLocation = ( + cutoutConfig: CutoutConfig, + validLocation: ValidDropTipBlowoutLocation + ): DropTipBlowoutLocationDetails => { + const cutoutAAs = deckDef.cutoutFixtures.find( + fixture => cutoutConfig.cutoutId in fixture.providesAddressableAreas + )?.providesAddressableAreas + const slotName = + cutoutAAs?.[cutoutConfig.cutoutId]?.[0] ?? + (robotType === OT2_ROBOT_TYPE ? '1' : 'A1') + + if (!cutoutAAs?.[cutoutConfig.cutoutId]?.[0]) { + console.error( + 'Could not get correct slot location from deck definition and active deck config. Defaulting to A1.' + ) + } + + return { + location: validLocation, + slotName, + } + } + + const filterAndMap = ( + fixtureIds: string | string[], + validLocation: ValidDropTipBlowoutLocation + ): DropTipBlowoutLocationDetails[] => + deckConfig + .filter(config => + Array.isArray(fixtureIds) + ? fixtureIds.includes(config.cutoutFixtureId) + : fixtureIds === config.cutoutFixtureId + ) + .map(config => createLocation(config, validLocation)) + + return [ + ...filterAndMap(TRASH_BIN_ADAPTER_FIXTURE, 'trash-bin'), + ...filterAndMap(WASTE_CHUTE_FIXTURES, 'waste-chute'), + { location: 'deck', slotName: 'CHOOSE_DECK_LOCATION' }, + ] + }, [deckConfig, deckDef, robotType]) +} diff --git a/app/src/organisms/DropTipWizardFlows/hooks/useDropTipMaintenanceRun.tsx b/app/src/organisms/DropTipWizardFlows/hooks/useDropTipMaintenanceRun.tsx index 9b3e5b67762..fcb69ff467d 100644 --- a/app/src/organisms/DropTipWizardFlows/hooks/useDropTipMaintenanceRun.tsx +++ b/app/src/organisms/DropTipWizardFlows/hooks/useDropTipMaintenanceRun.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, useEffect } from 'react' import { useChainMaintenanceCommands, @@ -32,7 +32,7 @@ export function useDropTipMaintenanceRun({ }: UseDropTipMaintenanceRunParams): string | null { const isMaintenanceRunType = issuedCommandsType === 'setup' - const [createdMaintenanceRunId, setCreatedMaintenanceRunId] = React.useState< + const [createdMaintenanceRunId, setCreatedMaintenanceRunId] = useState< string | null >(null) @@ -101,7 +101,7 @@ function useCreateDropTipMaintenanceRun({ }, }) - React.useEffect(() => { + useEffect(() => { if ( issuedCommandsType === 'setup' && mount != null && @@ -140,10 +140,10 @@ function useMonitorMaintenanceRunForDeletion({ const [ monitorMaintenanceRunForDeletion, setMonitorMaintenanceRunForDeletion, - ] = React.useState(false) - const [closedOnce, setClosedOnce] = React.useState(false) + ] = useState(false) + const [closedOnce, setClosedOnce] = useState(false) - React.useEffect(() => { + useEffect(() => { if (isMaintenanceRunType && !closedOnce) { if ( createdMaintenanceRunId !== null && diff --git a/app/src/organisms/DropTipWizardFlows/hooks/useDropTipRouting.tsx b/app/src/organisms/DropTipWizardFlows/hooks/useDropTipRouting.tsx index 50a72417c8b..b0928eca3c2 100644 --- a/app/src/organisms/DropTipWizardFlows/hooks/useDropTipRouting.tsx +++ b/app/src/organisms/DropTipWizardFlows/hooks/useDropTipRouting.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useMemo, useState, useEffect } from 'react' import head from 'lodash/head' import last from 'lodash/last' @@ -27,8 +27,11 @@ export interface UseDropTipRoutingResult { goBack: () => Promise /* Proceed a step within the current route. Reroutes to "Before Beginning" if currently on the last step. */ proceed: () => Promise - /* Proceed to the first step of a given route. */ - proceedToRoute: (route: DropTipFlowsRoute) => Promise + /* Proceed to a given step of a given route or the first step of a given route if none is specified. */ + proceedToRouteAndStep: ( + route: DropTipFlowsRoute, + step?: DropTipFlowsStep + ) => Promise } /** @@ -44,18 +47,16 @@ export interface UseDropTipRoutingResult { export function useDropTipRouting( fixitUtils?: FixitCommandTypeUtils ): UseDropTipRoutingResult { - const [initialRoute, initialStep] = React.useMemo( + const [initialRoute, initialStep] = useMemo( () => getInitialRouteAndStep(fixitUtils), [] ) - const [dropTipFlowsMap, setDropTipFlowsMap] = React.useState( - { - currentRoute: initialRoute as DropTipFlowsRoute, - currentStep: initialStep, - currentStepIdx: 0, - } - ) + const [dropTipFlowsMap, setDropTipFlowsMap] = useState({ + currentRoute: initialRoute as DropTipFlowsRoute, + currentStep: initialStep, + currentStepIdx: 0, + }) useReportMap(dropTipFlowsMap, fixitUtils) @@ -97,19 +98,37 @@ export function useDropTipRouting( }) } - const proceedToRoute = (route: DropTipFlowsRoute): Promise => { + const proceedToRouteAndStep = ( + route: DropTipFlowsRoute, + step?: DropTipFlowsStep + ): Promise => { return new Promise((resolve, reject) => { - setDropTipFlowsMap({ - currentRoute: route, - currentStep: head(route) as DropTipFlowsStep, - currentStepIdx: 0, - }) + // @ts-expect-error Step always valid or handled appropriately. + const isStepNotInRoute = step != null && !route.includes(step) + + if (step == null || isStepNotInRoute) { + setDropTipFlowsMap({ + currentRoute: route, + currentStep: head(route) as DropTipFlowsStep, + currentStepIdx: 0, + }) + if (isStepNotInRoute) { + console.error(`Step ${step} not found in route ${route}`) + } + } else { + setDropTipFlowsMap({ + currentRoute: route, + currentStep: step, + // @ts-expect-error Step always valid or handled appropriately. + currentStepIdx: route.indexOf(step), + }) + } resolve() }) } - return { ...dropTipFlowsMap, goBack, proceed, proceedToRoute } + return { ...dropTipFlowsMap, goBack, proceed, proceedToRouteAndStep } } type DTStepOrInvalid = DropTipFlowsStep | typeof INVALID @@ -186,7 +205,7 @@ export function useReportMap( ): void { const { currentStep, currentRoute } = map - React.useEffect(() => { + useEffect(() => { if (fixitUtils != null) { fixitUtils.reportMap({ route: currentRoute, step: currentStep }) } diff --git a/app/src/organisms/DropTipWizardFlows/hooks/useDropTipWithType.ts b/app/src/organisms/DropTipWizardFlows/hooks/useDropTipWithType.ts index cb7064ac722..df783ca901f 100644 --- a/app/src/organisms/DropTipWizardFlows/hooks/useDropTipWithType.ts +++ b/app/src/organisms/DropTipWizardFlows/hooks/useDropTipWithType.ts @@ -1,5 +1,5 @@ // This is the main unifying function for maintenanceRun and fixit type flows. -import * as React from 'react' +import { useState, useEffect } from 'react' import { useDropTipCommandErrors } from '.' import { useDropTipMaintenanceRun } from './useDropTipMaintenanceRun' @@ -78,9 +78,7 @@ function useErrorDetails(): { errorDetails: ErrorDetails | null setErrorDetails: (errorDetails: SetRobotErrorDetailsParams) => void } { - const [errorDetails, setErrorDetails] = React.useState( - null - ) + const [errorDetails, setErrorDetails] = useState(null) const setRobustErrorDetails = useDropTipCommandErrors(setErrorDetails) return { errorDetails, setErrorDetails: setRobustErrorDetails } @@ -98,7 +96,7 @@ function useIsExitingDT( isExiting: boolean toggleIsExiting: () => void } { - const [isExiting, setIsExiting] = React.useState(false) + const [isExiting, setIsExiting] = useState(false) const toggleIsExiting = (): void => { setIsExiting(!isExiting) @@ -120,7 +118,7 @@ function useRegisterPipetteFixitType({ chainRunCommands, fixitCommandTypeUtils, }: UseRegisterPipetteFixitType): void { - React.useEffect(() => { + useEffect(() => { if (issuedCommandsType === 'fixit') { const command = buildLoadPipetteCommand( instrumentModelSpecs.name, diff --git a/app/src/organisms/DropTipWizardFlows/hooks/useTipAttachmentStatus/index.ts b/app/src/organisms/DropTipWizardFlows/hooks/useTipAttachmentStatus/index.ts index 80d1bb1913c..99d4ea9abd8 100644 --- a/app/src/organisms/DropTipWizardFlows/hooks/useTipAttachmentStatus/index.ts +++ b/app/src/organisms/DropTipWizardFlows/hooks/useTipAttachmentStatus/index.ts @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, useCallback } from 'react' import head from 'lodash/head' import { useInstrumentsQuery } from '@opentrons/react-api-client' @@ -45,10 +45,8 @@ export interface TipAttachmentStatusResult { export function useTipAttachmentStatus( params: Omit ): TipAttachmentStatusResult { - const [pipettesWithTip, setPipettesWithTip] = React.useState< - PipetteWithTip[] - >([]) - const [initialPipettesCount, setInitialPipettesCount] = React.useState< + const [pipettesWithTip, setPipettesWithTip] = useState([]) + const [initialPipettesCount, setInitialPipettesCount] = useState< number | null >(null) const { data: attachedInstruments } = useInstrumentsQuery({ @@ -59,9 +57,7 @@ export function useTipAttachmentStatus( const areTipsAttached = pipettesWithTip.length > 0 && head(pipettesWithTip)?.specs != null - const determineTipStatus = React.useCallback((): Promise< - PipetteWithTip[] - > => { + const determineTipStatus = useCallback((): Promise => { return getPipettesWithTipAttached({ ...params, attachedInstruments: attachedInstruments ?? null, diff --git a/app/src/organisms/DropTipWizardFlows/shared/DropTipFooterButtons.tsx b/app/src/organisms/DropTipWizardFlows/shared/DropTipFooterButtons.tsx index e2f4bcd65ee..6825146c06f 100644 --- a/app/src/organisms/DropTipWizardFlows/shared/DropTipFooterButtons.tsx +++ b/app/src/organisms/DropTipWizardFlows/shared/DropTipFooterButtons.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { css } from 'styled-components' diff --git a/app/src/organisms/DropTipWizardFlows/steps/BeforeBeginning.tsx b/app/src/organisms/DropTipWizardFlows/steps/BeforeBeginning.tsx index 36e9b1f4632..bbcb908ea24 100644 --- a/app/src/organisms/DropTipWizardFlows/steps/BeforeBeginning.tsx +++ b/app/src/organisms/DropTipWizardFlows/steps/BeforeBeginning.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { css } from 'styled-components' import { useTranslation } from 'react-i18next' @@ -32,20 +32,20 @@ import type { DropTipWizardContainerProps } from '../types' type FlowType = 'blowout' | 'drop_tips' | null export const BeforeBeginning = ({ - proceedToRoute, + proceedToRouteAndStep, isOnDevice, issuedCommandsType, fixitCommandTypeUtils, modalStyle, }: DropTipWizardContainerProps): JSX.Element | null => { const { t } = useTranslation('drop_tip_wizard') - const [flowType, setFlowType] = React.useState(null) + const [flowType, setFlowType] = useState(null) const handleProceed = (): void => { if (flowType === 'blowout') { - void proceedToRoute(DT_ROUTES.BLOWOUT) + void proceedToRouteAndStep(DT_ROUTES.BLOWOUT) } else if (flowType === 'drop_tips') { - void proceedToRoute(DT_ROUTES.DROP_TIP) + void proceedToRouteAndStep(DT_ROUTES.DROP_TIP) } } diff --git a/app/src/organisms/DropTipWizardFlows/steps/ChooseDeckLocation.tsx b/app/src/organisms/DropTipWizardFlows/steps/ChooseDeckLocation.tsx new file mode 100644 index 00000000000..2519e1a6e0b --- /dev/null +++ b/app/src/organisms/DropTipWizardFlows/steps/ChooseDeckLocation.tsx @@ -0,0 +1,89 @@ +import { useState } from 'react' +import { Trans, useTranslation } from 'react-i18next' + +import { + DIRECTION_COLUMN, + Flex, + LegacyStyledText, + SPACING, + StyledText, +} from '@opentrons/components' +import { getDeckDefFromRobotType } from '@opentrons/shared-data' + +import { DT_ROUTES } from '/app/organisms/DropTipWizardFlows/constants' +import { DeckMapContent, TwoColumn } from '/app/molecules/InterventionModal' +import { DropTipFooterButtons } from '/app/organisms/DropTipWizardFlows/shared' + +import type { ModuleLocation } from '@opentrons/shared-data' +import type { DropTipWizardContainerProps } from '/app/organisms/DropTipWizardFlows/types' + +export function ChooseDeckLocation({ + robotType, + dropTipCommands, + proceedWithConditionalClose, + goBackRunValid, + currentRoute, + isOnDevice, +}: DropTipWizardContainerProps): JSX.Element { + const { moveToAddressableArea } = dropTipCommands + const { t } = useTranslation('drop_tip_wizard') + const [selectedLocation, setSelectedLocation] = useState() + const deckDef = getDeckDefFromRobotType(robotType) + + const handleConfirmPosition = (): void => { + const deckSlot = deckDef.locations.addressableAreas.find( + l => l.id === selectedLocation?.slotName + )?.id + + if (deckSlot != null) { + void moveToAddressableArea(deckSlot).then(() => { + proceedWithConditionalClose() + }) + } + } + + const buildTitleText = (): string => + currentRoute === DT_ROUTES.BLOWOUT + ? t('choose_blowout_location') + : t('choose_drop_tip_location') + + const buildBodyText = (): string => { + if (currentRoute === DT_ROUTES.BLOWOUT) { + return isOnDevice ? 'select_blowout_slot_odd' : 'select_blowout_slot' + } else { + return isOnDevice ? 'select_drop_tip_slot_odd' : 'select_drop_tip_slot' + } + } + + return ( + <> + + + + {buildTitleText()} + + + }} + /> + + + + + + + ) +} diff --git a/app/src/organisms/DropTipWizardFlows/steps/ChooseLocation.tsx b/app/src/organisms/DropTipWizardFlows/steps/ChooseLocation.tsx index a7915c123ec..6bf0dbbfed5 100644 --- a/app/src/organisms/DropTipWizardFlows/steps/ChooseLocation.tsx +++ b/app/src/organisms/DropTipWizardFlows/steps/ChooseLocation.tsx @@ -1,92 +1,203 @@ -import * as React from 'react' -import { Trans, useTranslation } from 'react-i18next' +import { useState, useLayoutEffect, useCallback } from 'react' +import { useTranslation } from 'react-i18next' +import { css } from 'styled-components' import { DIRECTION_COLUMN, + RESPONSIVENESS, Flex, SPACING, - LegacyStyledText, StyledText, + RadioButton, + OVERFLOW_AUTO, + JUSTIFY_SPACE_BETWEEN, } from '@opentrons/components' -import { getDeckDefFromRobotType } from '@opentrons/shared-data' -import { TwoColumn, DeckMapContent } from '../../../molecules/InterventionModal' -import { CHOOSE_BLOWOUT_LOCATION } from '../constants' +import { BLOWOUT_SUCCESS, DROP_TIP_SUCCESS, DT_ROUTES } from '../constants' import { DropTipFooterButtons } from '../shared' -import type { ModuleLocation } from '@opentrons/shared-data' -import type { DropTipWizardContainerProps } from '../types' +import type { AddressableAreaName } from '@opentrons/shared-data' +import type { + DropTipWizardContainerProps, + ValidDropTipBlowoutLocation, +} from '../types' +import type { + DropTipBlowoutLocationDetails, + DropTipBlowoutSlotName, +} from '../hooks' +import type { UseConfirmPositionResult } from './ConfirmPosition' -export const ChooseLocation = ({ - robotType, +interface ChooseLocationProps extends DropTipWizardContainerProps { + toggleIsRobotPipetteMoving: UseConfirmPositionResult['toggleIsRobotPipetteMoving'] +} + +export function ChooseLocation({ + dropTipCommandLocations, dropTipCommands, - proceedWithConditionalClose, goBackRunValid, - currentStep, - isOnDevice, -}: DropTipWizardContainerProps): JSX.Element | null => { - const { moveToAddressableArea } = dropTipCommands + currentRoute, + proceed, + proceedToRouteAndStep, + toggleIsRobotPipetteMoving, + modalStyle, +}: ChooseLocationProps): JSX.Element { const { t } = useTranslation('drop_tip_wizard') + const { moveToAddressableArea, blowoutOrDropTip } = dropTipCommands + const [ selectedLocation, setSelectedLocation, - ] = React.useState() - const deckDef = getDeckDefFromRobotType(robotType) + ] = useState(null) - const handleConfirmPosition = (): void => { - const deckSlot = deckDef.locations.addressableAreas.find( - l => l.id === selectedLocation?.slotName - )?.id + // On initial render with values, synchronously set the first option as the selected option. + useLayoutEffect(() => { + if (dropTipCommandLocations.length > 0) { + setSelectedLocation(dropTipCommandLocations[0]) + } + }, [dropTipCommandLocations.length]) - if (deckSlot != null) { - void moveToAddressableArea(deckSlot).then(() => { - proceedWithConditionalClose() - }) + const buildTitleCopy = (): string => { + if (currentRoute === DT_ROUTES.BLOWOUT) { + return t('where_to_blowout') + } else if (currentRoute === DT_ROUTES.DROP_TIP) { + return t('where_to_drop_tips') + } else { + console.error('Unhandled choose location copy from step') + return t('where_to_drop_tips') } } - const buildTitleText = (): string => - currentStep === CHOOSE_BLOWOUT_LOCATION - ? t('choose_blowout_location') - : t('choose_drop_tip_location') + const buildLocationCopy = ( + locationValue: ValidDropTipBlowoutLocation, + slotName: DropTipBlowoutSlotName + ): string => { + switch (locationValue) { + case 'trash-bin': + return t('trash_bin_in_slot', { slot: slotName }) + case 'waste-chute': + return t('waste_chute_in_slot', { slot: slotName }) + case 'deck': + return t('choose_deck_location') + default: + console.error('Unexpected location value.') + return '' + } + } - const buildBodyText = (): string => { - if (currentStep === CHOOSE_BLOWOUT_LOCATION) { - return isOnDevice ? 'select_blowout_slot_odd' : 'select_blowout_slot' - } else { - return isOnDevice ? 'select_drop_tip_slot_odd' : 'select_drop_tip_slot' + const handleChange = useCallback( + (locationDetails: DropTipBlowoutLocationDetails) => { + setSelectedLocation(locationDetails) + }, + [] + ) + + const executeCommands = (): void => { + toggleIsRobotPipetteMoving() + void moveToAddressableArea( + selectedLocation?.slotName as AddressableAreaName, + false + ).then(() => { + void blowoutOrDropTip(currentRoute, () => { + const successStep = + currentRoute === DT_ROUTES.BLOWOUT + ? BLOWOUT_SUCCESS + : DROP_TIP_SUCCESS + void proceedToRouteAndStep(currentRoute, successStep) + }) + }) + } + + const primaryOnClick = (): void => { + switch (selectedLocation?.location) { + case 'deck': + void proceed() + break + case 'labware': + case 'trash-bin': + case 'waste-chute': + executeCommands() + break + default: + console.error( + `Unhandled onClick behavior for location: ${selectedLocation?.location}` + ) } } return ( - <> - - - - {buildTitleText()} - - - }} - /> - + + + + {buildTitleCopy()} + + + {dropTipCommandLocations.map(ld => { + const label = buildLocationCopy(ld.location, ld.slotName) + return ( + { + handleChange(ld) + }} + isSelected={ld.slotName === selectedLocation?.slotName} + largeDesktopBorderRadius={true} + /> + ) + })} - - +
    - + ) } + +const CONTAINER_STYLE_BASE = ` + overflow: ${OVERFLOW_AUTO}; + flex-direction: ${DIRECTION_COLUMN}; + grid-gap: ${SPACING.spacing16}; + height: 100%; + width: 100%; + flex-grow: 1; +` + +const CONTAINER_STYLE_INTERVENTION = css` + ${CONTAINER_STYLE_BASE} +` + +const CONTAINER_STYLE_SIMPLE = css` + ${CONTAINER_STYLE_BASE} + justify-content: ${JUSTIFY_SPACE_BETWEEN}; + + @media ${RESPONSIVENESS.touchscreenMediaQuerySpecs} { + height: 80%; + flex-grow: 0; + } +` + +const OPTION_CONTAINER_STYLE = css` + flex-direction: ${DIRECTION_COLUMN}; + grid-gap: ${SPACING.spacing16}; +` + +const BUTTON_CONTAINER_STYLE = css` + flex-direction: ${DIRECTION_COLUMN}; + grid-gap: ${SPACING.spacing4}; + + @media ${RESPONSIVENESS.touchscreenMediaQuerySpecs} { + grid-gap: ${SPACING.spacing8}; + } +` diff --git a/app/src/organisms/DropTipWizardFlows/ConfirmPosition.tsx b/app/src/organisms/DropTipWizardFlows/steps/ConfirmPosition.tsx similarity index 72% rename from app/src/organisms/DropTipWizardFlows/ConfirmPosition.tsx rename to app/src/organisms/DropTipWizardFlows/steps/ConfirmPosition.tsx index 6742672beca..3b3f0e9dfb5 100644 --- a/app/src/organisms/DropTipWizardFlows/ConfirmPosition.tsx +++ b/app/src/organisms/DropTipWizardFlows/steps/ConfirmPosition.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, useEffect } from 'react' import { css } from 'styled-components' import { useTranslation } from 'react-i18next' @@ -16,15 +16,17 @@ import { StyledText, } from '@opentrons/components' -import { POSITION_AND_BLOWOUT, POSITION_AND_DROP_TIP } from './constants' -import { DropTipFooterButtons } from './shared' +import { + CHOOSE_LOCATION_OPTION, + CONFIRM_POSITION, + DT_ROUTES, +} from '../constants' +import { DropTipFooterButtons } from '../shared' -import type { DropTipWizardContainerProps } from './types' +import type { DropTipWizardContainerProps } from '../types' export interface UseConfirmPositionResult { - showConfirmPosition: boolean isRobotPipetteMoving: boolean - toggleShowConfirmPosition: () => void toggleIsRobotPipetteMoving: () => void } @@ -34,33 +36,23 @@ export interface UseConfirmPositionResult { export function useConfirmPosition( currentStep: DropTipWizardContainerProps['currentStep'] ): UseConfirmPositionResult { - const [showConfirmPosition, setShowConfirmPosition] = React.useState(false) - const [isRobotPipetteMoving, setIsRobotPipetteMoving] = React.useState(false) - - const toggleShowConfirmPosition = (): void => { - setShowConfirmPosition(!showConfirmPosition) - } + const [isRobotPipetteMoving, setIsRobotPipetteMoving] = useState(false) const toggleIsRobotPipetteMoving = (): void => { setIsRobotPipetteMoving(!isRobotPipetteMoving) } - // NOTE: The useEffect logic is potentially problematic on views that are not steps, but it is not currently. - React.useEffect(() => { + useEffect(() => { if ( - currentStep !== POSITION_AND_BLOWOUT && - currentStep !== POSITION_AND_DROP_TIP && isRobotPipetteMoving && - showConfirmPosition + currentStep !== CONFIRM_POSITION && + currentStep !== CHOOSE_LOCATION_OPTION ) { - toggleShowConfirmPosition() toggleIsRobotPipetteMoving() } }, [currentStep, isRobotPipetteMoving]) return { - showConfirmPosition, - toggleShowConfirmPosition, toggleIsRobotPipetteMoving, isRobotPipetteMoving, } @@ -70,9 +62,9 @@ type ConfirmPositionProps = DropTipWizardContainerProps & UseConfirmPositionResult export function ConfirmPosition({ - toggleShowConfirmPosition, toggleIsRobotPipetteMoving, - currentStep, + goBackRunValid, + currentRoute, dropTipCommands, proceed, modalStyle, @@ -81,11 +73,11 @@ export function ConfirmPosition({ const { t } = useTranslation('drop_tip_wizard') const buildPrimaryBtnText = (): string => - currentStep === POSITION_AND_BLOWOUT ? t('blowout_liquid') : t('drop_tips') + currentRoute === DT_ROUTES.BLOWOUT ? t('blowout_liquid') : t('drop_tips') const handleProceed = (): void => { toggleIsRobotPipetteMoving() - void blowoutOrDropTip(currentStep, proceed) + void blowoutOrDropTip(currentRoute, proceed) } return ( @@ -99,7 +91,7 @@ export function ConfirmPosition({ > - {currentStep === POSITION_AND_BLOWOUT + {currentRoute === DT_ROUTES.BLOWOUT ? t('confirm_blowout_location') : t('confirm_drop_tip_location')} @@ -107,7 +99,7 @@ export function ConfirmPosition({ ) diff --git a/app/src/organisms/DropTipWizardFlows/steps/JogToPosition.tsx b/app/src/organisms/DropTipWizardFlows/steps/JogToPosition.tsx index 7277b78aff5..93d6c4b3a3c 100644 --- a/app/src/organisms/DropTipWizardFlows/steps/JogToPosition.tsx +++ b/app/src/organisms/DropTipWizardFlows/steps/JogToPosition.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { css } from 'styled-components' @@ -11,22 +10,22 @@ import { RESPONSIVENESS, } from '@opentrons/components' -import { POSITION_AND_BLOWOUT } from '../constants' -import { JogControls } from '../../../molecules/JogControls' +import { DT_ROUTES } from '../constants' +import { JogControls } from '/app/molecules/JogControls' import { DropTipFooterButtons } from '../shared' import type { DropTipWizardContainerProps } from '../types' -import type { UseConfirmPositionResult } from '../ConfirmPosition' +import type { UseConfirmPositionResult } from './ConfirmPosition' type JogToPositionProps = DropTipWizardContainerProps & UseConfirmPositionResult export const JogToPosition = ({ goBackRunValid, dropTipCommands, - currentStep, + currentRoute, isOnDevice, - toggleShowConfirmPosition, modalStyle, + proceed, }: JogToPositionProps): JSX.Element | null => { const { handleJog } = dropTipCommands const { t } = useTranslation('drop_tip_wizard') @@ -41,7 +40,7 @@ export const JogToPosition = ({ {t('position_the_pipette')} - {currentStep === POSITION_AND_BLOWOUT + {currentRoute === DT_ROUTES.BLOWOUT ? t('position_and_blowout') : t('position_and_drop_tip')} @@ -59,7 +58,7 @@ export const JogToPosition = ({ height={isOnDevice ? '80%' : '100%'} /> diff --git a/app/src/organisms/DropTipWizardFlows/steps/Success.tsx b/app/src/organisms/DropTipWizardFlows/steps/Success.tsx index 12c56fa48de..cc67ea47d9c 100644 --- a/app/src/organisms/DropTipWizardFlows/steps/Success.tsx +++ b/app/src/organisms/DropTipWizardFlows/steps/Success.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { css } from 'styled-components' import { useTranslation } from 'react-i18next' @@ -13,15 +12,15 @@ import { } from '@opentrons/components' import { DropTipFooterButtons } from '../shared' -import { BLOWOUT_SUCCESS, DROP_TIP_SUCCESS, DT_ROUTES } from '../constants' +import { DT_ROUTES } from '../constants' import SuccessIcon from '../../../assets/images/icon_success.png' import type { DropTipWizardContainerProps } from '../types' export const Success = ({ - currentStep, - proceedToRoute, + currentRoute, + proceedToRouteAndStep, fixitCommandTypeUtils, proceedWithConditionalClose, modalStyle, @@ -31,8 +30,8 @@ export const Success = ({ // Route to the drop tip route if user is at the blowout success screen, otherwise proceed conditionally. const handleProceed = (): void => { - if (currentStep === BLOWOUT_SUCCESS) { - void proceedToRoute(DT_ROUTES.DROP_TIP) + if (currentRoute === DT_ROUTES.BLOWOUT) { + void proceedToRouteAndStep(DT_ROUTES.DROP_TIP) } else { // Clear the error recovery submap upon completion of drop tip wizard. fixitCommandTypeUtils?.reportMap(null) @@ -46,10 +45,10 @@ export const Success = ({ } const buildProceedText = (): string => { - if (fixitCommandTypeUtils != null && currentStep === DROP_TIP_SUCCESS) { + if (fixitCommandTypeUtils != null && currentRoute === DT_ROUTES.DROP_TIP) { return fixitCommandTypeUtils.copyOverrides.tipDropCompleteBtnCopy } else { - return currentStep === BLOWOUT_SUCCESS ? t('continue') : t('exit') + return currentRoute === DT_ROUTES.BLOWOUT ? t('continue') : t('exit') } } @@ -66,7 +65,7 @@ export const Success = ({ } /> - {currentStep === BLOWOUT_SUCCESS + {currentRoute === DT_ROUTES.BLOWOUT ? t('blowout_complete') : t('drop_tip_complete')} diff --git a/app/src/organisms/DropTipWizardFlows/steps/index.ts b/app/src/organisms/DropTipWizardFlows/steps/index.ts index df34b2caa6f..8b18a998c03 100644 --- a/app/src/organisms/DropTipWizardFlows/steps/index.ts +++ b/app/src/organisms/DropTipWizardFlows/steps/index.ts @@ -1,4 +1,6 @@ export * from './BeforeBeginning' export * from './ChooseLocation' +export * from './ChooseDeckLocation' export * from './JogToPosition' export * from './Success' +export * from './ConfirmPosition' diff --git a/app/src/organisms/DropTipWizardFlows/types.ts b/app/src/organisms/DropTipWizardFlows/types.ts index 43243ba673b..513c3277ab5 100644 --- a/app/src/organisms/DropTipWizardFlows/types.ts +++ b/app/src/organisms/DropTipWizardFlows/types.ts @@ -59,3 +59,12 @@ export type DropTipWizardContainerProps = DropTipWizardProps & { proceedWithConditionalClose: () => void goBackRunValid: () => void } + +/** + * Drop-tip/Blowout location types + */ +export type ValidDropTipBlowoutLocation = + | 'trash-bin' + | 'waste-chute' + | 'labware' + | 'deck' diff --git a/app/src/organisms/EmergencyStop/DesktopEstopMissingModal.stories.tsx b/app/src/organisms/EmergencyStop/DesktopEstopMissingModal.stories.tsx index a1bd81c0654..f8729d48263 100644 --- a/app/src/organisms/EmergencyStop/DesktopEstopMissingModal.stories.tsx +++ b/app/src/organisms/EmergencyStop/DesktopEstopMissingModal.stories.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { Provider } from 'react-redux' import { createStore } from 'redux' diff --git a/app/src/organisms/EmergencyStop/DesktopEstopPressedModal.stories.tsx b/app/src/organisms/EmergencyStop/DesktopEstopPressedModal.stories.tsx index 45c7bd121da..5b999ce2bc5 100644 --- a/app/src/organisms/EmergencyStop/DesktopEstopPressedModal.stories.tsx +++ b/app/src/organisms/EmergencyStop/DesktopEstopPressedModal.stories.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { Provider } from 'react-redux' import { createStore } from 'redux' import { QueryClient, QueryClientProvider } from 'react-query' diff --git a/app/src/organisms/EmergencyStop/EmergencyStopContext.ts b/app/src/organisms/EmergencyStop/EmergencyStopContext.ts index fd5be4b25a9..d79fae0eec1 100644 --- a/app/src/organisms/EmergencyStop/EmergencyStopContext.ts +++ b/app/src/organisms/EmergencyStop/EmergencyStopContext.ts @@ -1,4 +1,4 @@ -import * as React from 'react' +import { createContext } from 'react' export interface EmergencyStopContextType { isEmergencyStopModalDismissed: boolean @@ -7,9 +7,7 @@ export interface EmergencyStopContextType { ) => void } -export const EmergencyStopContext = React.createContext( - { - isEmergencyStopModalDismissed: false, - setIsEmergencyStopModalDismissed: () => {}, - } -) +export const EmergencyStopContext = createContext({ + isEmergencyStopModalDismissed: false, + setIsEmergencyStopModalDismissed: () => {}, +}) diff --git a/app/src/organisms/EmergencyStop/EstopMissingModal.tsx b/app/src/organisms/EmergencyStop/EstopMissingModal.tsx index e90ed4bf247..3b862a94a9d 100644 --- a/app/src/organisms/EmergencyStop/EstopMissingModal.tsx +++ b/app/src/organisms/EmergencyStop/EstopMissingModal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { createPortal } from 'react-dom' import { useSelector } from 'react-redux' import { useTranslation } from 'react-i18next' @@ -13,7 +12,7 @@ import { Modal, } from '@opentrons/components' -import { getTopPortalEl } from '../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import { OddModal } from '/app/molecules/OddModal' import { getIsOnDevice } from '/app/redux/config' diff --git a/app/src/organisms/EmergencyStop/EstopPressedModal.tsx b/app/src/organisms/EmergencyStop/EstopPressedModal.tsx index 47aee918e90..8dc996c3374 100644 --- a/app/src/organisms/EmergencyStop/EstopPressedModal.tsx +++ b/app/src/organisms/EmergencyStop/EstopPressedModal.tsx @@ -4,6 +4,7 @@ import { useSelector } from 'react-redux' import { useTranslation } from 'react-i18next' import { ALIGN_CENTER, + Banner, BORDERS, Chip, COLORS, @@ -23,8 +24,7 @@ import { import { useAcknowledgeEstopDisengageMutation } from '@opentrons/react-api-client' -import { getTopPortalEl } from '../../App/portal' -import { Banner } from '/app/atoms/Banner' +import { getTopPortalEl } from '/app/App/portal' import { SmallButton } from '/app/atoms/buttons' import { OddModal } from '/app/molecules/OddModal' import { getIsOnDevice } from '/app/redux/config' diff --git a/app/src/organisms/EmergencyStop/EstopTakeover.tsx b/app/src/organisms/EmergencyStop/EstopTakeover.tsx index f7f1977be5d..5967edae75a 100644 --- a/app/src/organisms/EmergencyStop/EstopTakeover.tsx +++ b/app/src/organisms/EmergencyStop/EstopTakeover.tsx @@ -1,11 +1,11 @@ -import * as React from 'react' +import { useState } from 'react' import { useSelector } from 'react-redux' import { useEstopQuery } from '@opentrons/react-api-client' import { EstopPressedModal } from './EstopPressedModal' import { EstopMissingModal } from './EstopMissingModal' import { useEstopContext } from './hooks' -import { useIsUnboxingFlowOngoing } from '../ODD/hooks' +import { useIsUnboxingFlowOngoing } from '/app/redux-resources/config' import { getLocalRobot } from '/app/redux/discovery' import { PHYSICALLY_ENGAGED, @@ -22,11 +22,11 @@ interface EstopTakeoverProps { } export function EstopTakeover({ robotName }: EstopTakeoverProps): JSX.Element { - const [estopEngaged, setEstopEngaged] = React.useState(false) + const [estopEngaged, setEstopEngaged] = useState(false) const [ isWaitingForLogicalDisengage, setIsWaitingForLogicalDisengage, - ] = React.useState(false) + ] = useState(false) const { data: estopStatus } = useEstopQuery({ refetchInterval: estopEngaged ? ESTOP_CURRENTLY_ENGAGED_REFETCH_INTERVAL_MS diff --git a/app/src/organisms/EmergencyStop/TouchscreenEstopMissingModal.stories.tsx b/app/src/organisms/EmergencyStop/TouchscreenEstopMissingModal.stories.tsx index 27421ac61c6..7b02f215d42 100644 --- a/app/src/organisms/EmergencyStop/TouchscreenEstopMissingModal.stories.tsx +++ b/app/src/organisms/EmergencyStop/TouchscreenEstopMissingModal.stories.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { Provider } from 'react-redux' import { createStore } from 'redux' diff --git a/app/src/organisms/EmergencyStop/TouchscreenEstopPressedModal.stories.tsx b/app/src/organisms/EmergencyStop/TouchscreenEstopPressedModal.stories.tsx index 8e5f30575f9..bfc2c920a34 100644 --- a/app/src/organisms/EmergencyStop/TouchscreenEstopPressedModal.stories.tsx +++ b/app/src/organisms/EmergencyStop/TouchscreenEstopPressedModal.stories.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { Provider } from 'react-redux' import { createStore } from 'redux' import { QueryClient, QueryClientProvider } from 'react-query' diff --git a/app/src/organisms/EmergencyStop/__tests__/EstopMissingModal.test.tsx b/app/src/organisms/EmergencyStop/__tests__/EstopMissingModal.test.tsx index bd6fd7bb7fb..c2ce7cea0e1 100644 --- a/app/src/organisms/EmergencyStop/__tests__/EstopMissingModal.test.tsx +++ b/app/src/organisms/EmergencyStop/__tests__/EstopMissingModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import '@testing-library/jest-dom/vitest' import { describe, it, vi, beforeEach, expect } from 'vitest' diff --git a/app/src/organisms/EmergencyStop/__tests__/EstopPressedModal.test.tsx b/app/src/organisms/EmergencyStop/__tests__/EstopPressedModal.test.tsx index 3393c9072a1..124ea72b3ed 100644 --- a/app/src/organisms/EmergencyStop/__tests__/EstopPressedModal.test.tsx +++ b/app/src/organisms/EmergencyStop/__tests__/EstopPressedModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import '@testing-library/jest-dom/vitest' import { describe, it, vi, beforeEach, expect } from 'vitest' diff --git a/app/src/organisms/EmergencyStop/__tests__/EstopTakeover.test.tsx b/app/src/organisms/EmergencyStop/__tests__/EstopTakeover.test.tsx index 4c3deece780..3ff0503dc69 100644 --- a/app/src/organisms/EmergencyStop/__tests__/EstopTakeover.test.tsx +++ b/app/src/organisms/EmergencyStop/__tests__/EstopTakeover.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, beforeEach, expect, vi } from 'vitest' import { screen } from '@testing-library/react' import '@testing-library/jest-dom/vitest' @@ -8,7 +8,7 @@ import { useEstopQuery } from '@opentrons/react-api-client' import { i18n } from '/app/i18n' import { EstopMissingModal } from '../EstopMissingModal' import { EstopPressedModal } from '../EstopPressedModal' -import { useIsUnboxingFlowOngoing } from '../../ODD/hooks' +import { useIsUnboxingFlowOngoing } from '/app/redux-resources/config' import { ENGAGED, LOGICALLY_ENGAGED, @@ -22,7 +22,7 @@ import { EstopTakeover } from '../EstopTakeover' vi.mock('@opentrons/react-api-client') vi.mock('../EstopMissingModal') vi.mock('../EstopPressedModal') -vi.mock('../../ODD/hooks') +vi.mock('/app/redux-resources/config') vi.mock('/app/redux/discovery') const mockPressed = { diff --git a/app/src/organisms/EmergencyStop/hooks.ts b/app/src/organisms/EmergencyStop/hooks.ts index 6ded6e100ad..775903e0dc9 100644 --- a/app/src/organisms/EmergencyStop/hooks.ts +++ b/app/src/organisms/EmergencyStop/hooks.ts @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useContext } from 'react' import { EmergencyStopContext } from './EmergencyStopContext' import type { EmergencyStopContextType } from './EmergencyStopContext' @@ -7,7 +7,7 @@ export function useEstopContext(): EmergencyStopContextType { const { isEmergencyStopModalDismissed, setIsEmergencyStopModalDismissed, - } = React.useContext(EmergencyStopContext) + } = useContext(EmergencyStopContext) return { isEmergencyStopModalDismissed, diff --git a/app/src/organisms/ErrorRecoveryFlows/ErrorRecoveryWizard.tsx b/app/src/organisms/ErrorRecoveryFlows/ErrorRecoveryWizard.tsx index 1f01ca85028..b42ffa9c9cd 100644 --- a/app/src/organisms/ErrorRecoveryFlows/ErrorRecoveryWizard.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/ErrorRecoveryWizard.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, useEffect, useLayoutEffect } from 'react' import { useTranslation } from 'react-i18next' import { css } from 'styled-components' @@ -17,6 +17,8 @@ import { SkipStepSameTips, SkipStepNewTips, IgnoreErrorSkipStep, + ManualMoveLwAndSkip, + ManualReplaceLwAndRetry, } from './RecoveryOptions' import { useErrorDetailsModal, @@ -40,11 +42,11 @@ export interface UseERWizardResult { } export function useERWizard(): UseERWizardResult { - const [showERWizard, setShowERWizard] = React.useState(false) + const [showERWizard, setShowERWizard] = useState(false) // Because RunPausedSplash has access to some ER Wiz routes but is not a part of the ER wizard, the splash screen // is the "home" route as opposed to SelectRecoveryOption (accessed by pressing "go back" or "continue" enough times) // when recovery mode has not been launched. - const [hasLaunchedRecovery, setHasLaunchedRecovery] = React.useState(false) + const [hasLaunchedRecovery, setHasLaunchedRecovery] = useState(false) const toggleERWizard = ( isActive: boolean, @@ -64,7 +66,6 @@ export type ErrorRecoveryWizardProps = ErrorRecoveryFlowsProps & ERUtilsResults & { robotType: RobotType isOnDevice: boolean - isDoorOpen: boolean analytics: UseRecoveryAnalyticsResult failedCommand: ReturnType } @@ -95,15 +96,16 @@ export function ErrorRecoveryComponent( const { recoveryMap, hasLaunchedRecovery, - isDoorOpen, + doorStatusUtils, isOnDevice, analytics, } = props + const { isProhibitedDoorOpen } = doorStatusUtils const { route, step } = recoveryMap const { t } = useTranslation('error_recovery') const { showModal, toggleModal } = useErrorDetailsModal() - React.useEffect(() => { + useEffect(() => { if (showModal) { analytics.reportViewErrorDetailsEvent(route, step) } @@ -135,7 +137,7 @@ export function ErrorRecoveryComponent( // TODO(jh, 07-29-24): Make RecoveryDoorOpen render logic equivalent to RecoveryTakeover. Do not nest it in RecoveryWizard. const buildInterventionContent = (): JSX.Element => { - if (isDoorOpen) { + if (isProhibitedDoorOpen) { return } else { return @@ -143,7 +145,7 @@ export function ErrorRecoveryComponent( } const isLargeDesktopStyle = - !isDoorOpen && + !isProhibitedDoorOpen && route === RECOVERY_MAP.DROP_TIP_FLOWS.ROUTE && step !== RECOVERY_MAP.DROP_TIP_FLOWS.STEPS.BEGIN_REMOVAL const desktopType = isLargeDesktopStyle ? 'desktop-large' : 'desktop-small' @@ -218,12 +220,24 @@ export function ErrorRecoveryContent(props: RecoveryContentProps): JSX.Element { return } + const buildManualMoveLwAndSkip = (): JSX.Element => { + return + } + + const buildManualReplaceLwAndRetry = (): JSX.Element => { + return + } + + const buildManuallyRouteToDoorOpen = (): JSX.Element => { + return + } + switch (props.recoveryMap.route) { case RECOVERY_MAP.OPTION_SELECTION.ROUTE: return buildSelectRecoveryOption() case RECOVERY_MAP.ERROR_WHILE_RECOVERING.ROUTE: return buildRecoveryError() - case RECOVERY_MAP.RETRY_FAILED_COMMAND.ROUTE: + case RECOVERY_MAP.RETRY_STEP.ROUTE: return buildResumeRun() case RECOVERY_MAP.CANCEL_RUN.ROUTE: return buildCancelRun() @@ -233,7 +247,7 @@ export function ErrorRecoveryContent(props: RecoveryContentProps): JSX.Element { return buildRetryNewTips() case RECOVERY_MAP.RETRY_SAME_TIPS.ROUTE: return buildRetrySameTips() - case RECOVERY_MAP.FILL_MANUALLY_AND_SKIP.ROUTE: + case RECOVERY_MAP.MANUAL_FILL_AND_SKIP.ROUTE: return buildFillWellAndSkip() case RECOVERY_MAP.SKIP_STEP_WITH_SAME_TIPS.ROUTE: return buildSkipStepSameTips() @@ -241,13 +255,20 @@ export function ErrorRecoveryContent(props: RecoveryContentProps): JSX.Element { return buildSkipStepNewTips() case RECOVERY_MAP.IGNORE_AND_SKIP.ROUTE: return buildIgnoreErrorSkipStep() + case RECOVERY_MAP.MANUAL_MOVE_AND_SKIP.ROUTE: + return buildManualMoveLwAndSkip() + case RECOVERY_MAP.MANUAL_REPLACE_AND_RETRY.ROUTE: + return buildManualReplaceLwAndRetry() case RECOVERY_MAP.ROBOT_IN_MOTION.ROUTE: case RECOVERY_MAP.ROBOT_RESUMING.ROUTE: case RECOVERY_MAP.ROBOT_RETRYING_STEP.ROUTE: case RECOVERY_MAP.ROBOT_CANCELING.ROUTE: case RECOVERY_MAP.ROBOT_PICKING_UP_TIPS.ROUTE: case RECOVERY_MAP.ROBOT_SKIPPING_STEP.ROUTE: + case RECOVERY_MAP.ROBOT_RELEASING_LABWARE.ROUTE: return buildRecoveryInProgress() + case RECOVERY_MAP.ROBOT_DOOR_OPEN.ROUTE: + return buildManuallyRouteToDoorOpen() default: return buildSelectRecoveryOption() } @@ -264,14 +285,14 @@ export function useInitialPipetteHome({ routeUpdateActions, }: UseInitialPipetteHomeParams): void { const { homePipetteZAxes } = recoveryCommands - const { setRobotInMotion } = routeUpdateActions + const { handleMotionRouting } = routeUpdateActions // Synchronously set the recovery route to "robot in motion" before initial render to prevent screen flicker on ER launch. - React.useLayoutEffect(() => { + useLayoutEffect(() => { if (hasLaunchedRecovery) { - void setRobotInMotion(true) + void handleMotionRouting(true) .then(() => homePipetteZAxes()) - .finally(() => setRobotInMotion(false)) + .finally(() => handleMotionRouting(false)) } }, [hasLaunchedRecovery]) } diff --git a/app/src/organisms/ErrorRecoveryFlows/RecoveryDoorOpen.tsx b/app/src/organisms/ErrorRecoveryFlows/RecoveryDoorOpen.tsx index 17bf1cf0379..3aa1b0f7b74 100644 --- a/app/src/organisms/ErrorRecoveryFlows/RecoveryDoorOpen.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/RecoveryDoorOpen.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { css } from 'styled-components' import { useTranslation } from 'react-i18next' @@ -23,16 +22,33 @@ import { import type { RecoveryContentProps } from './types' +// There are two code paths that render this component: +// 1) The door is open on a route & step in which it is not permitted to have the door open. +// 2) The door is open on a route & step in which it is permitted to have the door open, but the app manually redirects +// to this component. This is commonly done when the route & step itself allows the user to keep the door open, but some +// action on that route & step is about to occur that requires the door to be closed. In this case, once the door event +// has been satisfied, manually route back to the previous route & step. export function RecoveryDoorOpen({ recoveryActionMutationUtils, runStatus, + routeUpdateActions, }: RecoveryContentProps): JSX.Element { const { resumeRecovery, isResumeRecoveryLoading, } = recoveryActionMutationUtils + const { stashedMap, proceedToRouteAndStep } = routeUpdateActions const { t } = useTranslation('error_recovery') + const primaryOnClick = (): void => { + void resumeRecovery().then(() => { + // See comments above for why we do this. + if (stashedMap != null) { + void proceedToRouteAndStep(stashedMap.route, stashedMap.step) + } + }) + } + return ( { - void setRobotInMotion(true) + void handleMotionRouting(true) .then(() => homePipetteZAxes()) - .finally(() => setRobotInMotion(false)) + .finally(() => handleMotionRouting(false)) .then(() => proceedToRouteAndStep(OPTION_SELECTION.ROUTE)) } diff --git a/app/src/organisms/ErrorRecoveryFlows/RecoveryInProgress.tsx b/app/src/organisms/ErrorRecoveryFlows/RecoveryInProgress.tsx index 2fba61f0293..dc06fd1979f 100644 --- a/app/src/organisms/ErrorRecoveryFlows/RecoveryInProgress.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/RecoveryInProgress.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, useEffect } from 'react' import { useTranslation } from 'react-i18next' import { css } from 'styled-components' @@ -18,6 +18,8 @@ import type { RobotMovingRoute, RecoveryContentProps } from './types' export function RecoveryInProgress({ recoveryMap, + recoveryCommands, + routeUpdateActions, }: RecoveryContentProps): JSX.Element { const { ROBOT_CANCELING, @@ -26,10 +28,17 @@ export function RecoveryInProgress({ ROBOT_RETRYING_STEP, ROBOT_PICKING_UP_TIPS, ROBOT_SKIPPING_STEP, + ROBOT_RELEASING_LABWARE, } = RECOVERY_MAP const { t } = useTranslation('error_recovery') const { route } = recoveryMap + const gripperReleaseCountdown = useGripperRelease({ + recoveryMap, + recoveryCommands, + routeUpdateActions, + }) + const buildDescription = (): RobotMovingRoute => { switch (route) { case ROBOT_CANCELING.ROUTE: @@ -44,6 +53,15 @@ export function RecoveryInProgress({ return t('stand_back_picking_up_tips') case ROBOT_SKIPPING_STEP.ROUTE: return t('stand_back_skipping_to_next_step') + case ROBOT_RELEASING_LABWARE.ROUTE: { + if (gripperReleaseCountdown > 0) { + return t('gripper_will_release_in_s', { + seconds: gripperReleaseCountdown, + }) + } else { + return t('gripper_releasing_labware') + } + } default: return t('stand_back') } @@ -58,6 +76,83 @@ export function RecoveryInProgress({ ) } +const GRIPPER_RELEASE_COUNTDOWN_S = 5 + +type UseGripperReleaseProps = Pick< + RecoveryContentProps, + 'recoveryMap' | 'recoveryCommands' | 'routeUpdateActions' +> + +// Handles the gripper release copy and action, which operates on an interval. At T=0, release the labware then proceed +// to the next step in the active route. +export function useGripperRelease({ + recoveryMap, + recoveryCommands, + routeUpdateActions, +}: UseGripperReleaseProps): number { + const { releaseGripperJaws } = recoveryCommands + const { + proceedToRouteAndStep, + proceedNextStep, + handleMotionRouting, + stashedMap, + } = routeUpdateActions + const { MANUAL_MOVE_AND_SKIP, MANUAL_REPLACE_AND_RETRY } = RECOVERY_MAP + const [countdown, setCountdown] = useState(GRIPPER_RELEASE_COUNTDOWN_S) + + const proceedToValidNextStep = (): void => { + switch (stashedMap?.route) { + case MANUAL_MOVE_AND_SKIP.ROUTE: + void proceedToRouteAndStep( + MANUAL_MOVE_AND_SKIP.ROUTE, + MANUAL_MOVE_AND_SKIP.STEPS.MANUAL_MOVE + ) + break + case MANUAL_REPLACE_AND_RETRY.ROUTE: + void proceedToRouteAndStep( + MANUAL_REPLACE_AND_RETRY.ROUTE, + MANUAL_REPLACE_AND_RETRY.STEPS.MANUAL_REPLACE + ) + break + default: + console.error('Unhandled post grip-release routing.') + void proceedNextStep() + } + } + + useEffect(() => { + let intervalId: NodeJS.Timeout | null = null + + if (recoveryMap.route === RECOVERY_MAP.ROBOT_RELEASING_LABWARE.ROUTE) { + intervalId = setInterval(() => { + setCountdown(prevCountdown => { + const updatedCountdown = prevCountdown - 1 + + if (updatedCountdown === 0) { + if (intervalId != null) { + clearInterval(intervalId) + } + void releaseGripperJaws() + .finally(() => handleMotionRouting(false)) + .then(() => { + proceedToValidNextStep() + }) + } + + return updatedCountdown + }) + }, 1000) + } + + return () => { + if (intervalId != null) { + clearInterval(intervalId) + } + } + }, [recoveryMap.route]) + + return countdown +} const CONTAINER_STYLE = css` align-items: ${ALIGN_CENTER}; justify-content: ${JUSTIFY_CENTER}; diff --git a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/CancelRun.tsx b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/CancelRun.tsx index 8f49634a3ad..b3cdd5fe257 100644 --- a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/CancelRun.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/CancelRun.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, useEffect } from 'react' import { useTranslation } from 'react-i18next' import { @@ -23,11 +23,7 @@ import { import { SelectRecoveryOption } from './SelectRecoveryOption' import type { RecoveryContentProps } from '../types' -import type { - RecoveryTipStatusUtils, - UseRecoveryCommandsResult, - UseRouteUpdateActionsResult, -} from '../hooks' +import type { ERUtilsResults } from '../hooks' export function CancelRun(props: RecoveryContentProps): JSX.Element { const { recoveryMap } = props @@ -104,9 +100,9 @@ function CancelRunConfirmation({ } interface OnCancelRunProps { - tipStatusUtils: RecoveryTipStatusUtils - recoveryCommands: UseRecoveryCommandsResult - routeUpdateActions: UseRouteUpdateActionsResult + tipStatusUtils: ERUtilsResults['tipStatusUtils'] + recoveryCommands: ERUtilsResults['recoveryCommands'] + routeUpdateActions: ERUtilsResults['routeUpdateActions'] } // Manages routing to cancel route or drop tip route, depending on tip attachment status. @@ -122,20 +118,20 @@ export function useOnCancelRun({ } { const { ROBOT_CANCELING, DROP_TIP_FLOWS } = RECOVERY_MAP const { isLoadingTipStatus, areTipsAttached } = tipStatusUtils - const { setRobotInMotion, proceedToRouteAndStep } = routeUpdateActions + const { handleMotionRouting, proceedToRouteAndStep } = routeUpdateActions const { cancelRun } = recoveryCommands - const [hasUserClicked, setHasUserClicked] = React.useState(false) + const [hasUserClicked, setHasUserClicked] = useState(false) const showBtnLoadingState = hasUserClicked && isLoadingTipStatus - React.useEffect(() => { + useEffect(() => { if (hasUserClicked) { if (!isLoadingTipStatus) { if (areTipsAttached) { void proceedToRouteAndStep(DROP_TIP_FLOWS.ROUTE) } else { - void setRobotInMotion(true, ROBOT_CANCELING.ROUTE).then(() => { + void handleMotionRouting(true, ROBOT_CANCELING.ROUTE).then(() => { cancelRun() }) } diff --git a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/FillWellAndSkip.tsx b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/FillWellAndSkip.tsx index 36cce4fdbf9..d01a5c343fb 100644 --- a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/FillWellAndSkip.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/FillWellAndSkip.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { Trans, useTranslation } from 'react-i18next' import { @@ -24,13 +23,13 @@ import type { RecoveryContentProps } from '../types' export function FillWellAndSkip(props: RecoveryContentProps): JSX.Element { const { recoveryMap } = props const { step, route } = recoveryMap - const { FILL_MANUALLY_AND_SKIP, CANCEL_RUN } = RECOVERY_MAP + const { MANUAL_FILL_AND_SKIP, CANCEL_RUN } = RECOVERY_MAP const buildContent = (): JSX.Element => { switch (step) { - case FILL_MANUALLY_AND_SKIP.STEPS.MANUALLY_FILL: + case MANUAL_FILL_AND_SKIP.STEPS.MANUAL_FILL: return - case FILL_MANUALLY_AND_SKIP.STEPS.SKIP: + case MANUAL_FILL_AND_SKIP.STEPS.SKIP: return case CANCEL_RUN.STEPS.CONFIRM_CANCEL: return @@ -81,7 +80,7 @@ export function SkipToNextStep( currentRecoveryOptionUtils, } = props const { - setRobotInMotion, + handleMotionRouting, goBackPrevStep, proceedToRouteAndStep, } = routeUpdateActions @@ -100,7 +99,7 @@ export function SkipToNextStep( } const primaryBtnOnClick = (): Promise => { - return setRobotInMotion(true, ROBOT_SKIPPING_STEP.ROUTE).then(() => { + return handleMotionRouting(true, ROBOT_SKIPPING_STEP.ROUTE).then(() => { skipFailedCommand() }) } diff --git a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/IgnoreErrorSkipStep.tsx b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/IgnoreErrorSkipStep.tsx index 1c537ccce8a..dfe9226a267 100644 --- a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/IgnoreErrorSkipStep.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/IgnoreErrorSkipStep.tsx @@ -50,7 +50,7 @@ export function IgnoreErrorStepHome({ routeUpdateActions, }: RecoveryContentProps): JSX.Element | null { const { t } = useTranslation('error_recovery') - const { FILL_MANUALLY_AND_SKIP } = RECOVERY_MAP + const { MANUAL_FILL_AND_SKIP } = RECOVERY_MAP const { ignoreErrorKindThisRun } = recoveryCommands const { proceedToRouteAndStep, goBackPrevStep } = routeUpdateActions @@ -63,8 +63,8 @@ export function IgnoreErrorStepHome({ // and route appropriately. const ignoreOnce = (): void => { void proceedToRouteAndStep( - FILL_MANUALLY_AND_SKIP.ROUTE, - FILL_MANUALLY_AND_SKIP.STEPS.SKIP + MANUAL_FILL_AND_SKIP.ROUTE, + MANUAL_FILL_AND_SKIP.STEPS.SKIP ) } @@ -72,8 +72,8 @@ export function IgnoreErrorStepHome({ const ignoreAlways = (): void => { void ignoreErrorKindThisRun().then(() => proceedToRouteAndStep( - FILL_MANUALLY_AND_SKIP.ROUTE, - FILL_MANUALLY_AND_SKIP.STEPS.SKIP + MANUAL_FILL_AND_SKIP.ROUTE, + MANUAL_FILL_AND_SKIP.STEPS.SKIP ) ) } diff --git a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/ManageTips.tsx b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/ManageTips.tsx index b830f9b3114..5d2ad93c80a 100644 --- a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/ManageTips.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/ManageTips.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { Trans, useTranslation } from 'react-i18next' import { @@ -20,15 +19,15 @@ import { RecoveryFooterButtons, RecoverySingleColumnContentWrapper, } from '../shared' -import { DropTipWizardFlows } from '../../DropTipWizardFlows' -import { DT_ROUTES } from '../../DropTipWizardFlows/constants' +import { DropTipWizardFlows } from '/app/organisms/DropTipWizardFlows' +import { DT_ROUTES } from '/app/organisms/DropTipWizardFlows/constants' import { SelectRecoveryOption } from './SelectRecoveryOption' import type { RecoveryContentProps, RecoveryRoute, RouteStep } from '../types' import type { FixitCommandTypeUtils, PipetteWithTip, -} from '../../DropTipWizardFlows' +} from '/app/organisms/DropTipWizardFlows' // The Drop Tip flow entry point. Includes entry from SelectRecoveryOption and CancelRun. export function ManageTips(props: RecoveryContentProps): JSX.Element { @@ -66,7 +65,7 @@ export function BeginRemoval({ const { aPipetteWithTip } = tipStatusUtils const { proceedNextStep, - setRobotInMotion, + handleMotionRouting, proceedToRouteAndStep, } = routeUpdateActions const { cancelRun } = recoveryCommands @@ -85,7 +84,7 @@ export function BeginRemoval({ RETRY_NEW_TIPS.STEPS.REPLACE_TIPS ) } else { - void setRobotInMotion(true, ROBOT_CANCELING.ROUTE).then(() => { + void handleMotionRouting(true, ROBOT_CANCELING.ROUTE).then(() => { cancelRun() }) } @@ -153,7 +152,7 @@ function DropTipFlowsContainer( currentRecoveryOptionUtils, } = props const { DROP_TIP_FLOWS, ROBOT_CANCELING, RETRY_NEW_TIPS } = RECOVERY_MAP - const { proceedToRouteAndStep, setRobotInMotion } = routeUpdateActions + const { proceedToRouteAndStep, handleMotionRouting } = routeUpdateActions const { selectedRecoveryOption } = currentRecoveryOptionUtils const { setTipStatusResolved } = tipStatusUtils const { cancelRun } = recoveryCommands @@ -172,7 +171,7 @@ function DropTipFlowsContainer( } const onEmptyCache = (): void => { - void setRobotInMotion(true, ROBOT_CANCELING.ROUTE).then(() => { + void handleMotionRouting(true, ROBOT_CANCELING.ROUTE).then(() => { cancelRun() }) } diff --git a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/ManualMoveLwAndSkip.tsx b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/ManualMoveLwAndSkip.tsx new file mode 100644 index 00000000000..391674b54f1 --- /dev/null +++ b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/ManualMoveLwAndSkip.tsx @@ -0,0 +1,34 @@ +import { RECOVERY_MAP } from '../constants' +import { + GripperIsHoldingLabware, + GripperReleaseLabware, + SkipStepInfo, + TwoColLwInfoAndDeck, +} from '../shared' +import { SelectRecoveryOption } from './SelectRecoveryOption' + +import type { RecoveryContentProps } from '../types' + +export function ManualMoveLwAndSkip(props: RecoveryContentProps): JSX.Element { + const { recoveryMap } = props + const { step, route } = recoveryMap + const { MANUAL_MOVE_AND_SKIP } = RECOVERY_MAP + + const buildContent = (): JSX.Element => { + switch (step) { + case MANUAL_MOVE_AND_SKIP.STEPS.GRIPPER_HOLDING_LABWARE: + return + case MANUAL_MOVE_AND_SKIP.STEPS.GRIPPER_RELEASE_LABWARE: + return + case MANUAL_MOVE_AND_SKIP.STEPS.MANUAL_MOVE: + return + case MANUAL_MOVE_AND_SKIP.STEPS.SKIP: + return + default: + console.warn(`${step} in ${route} not explicitly handled. Rerouting.`) + return + } + } + + return buildContent() +} diff --git a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/ManualReplaceLwAndRetry.tsx b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/ManualReplaceLwAndRetry.tsx new file mode 100644 index 00000000000..01d9f7fb282 --- /dev/null +++ b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/ManualReplaceLwAndRetry.tsx @@ -0,0 +1,36 @@ +import { RECOVERY_MAP } from '../constants' +import { + GripperIsHoldingLabware, + GripperReleaseLabware, + TwoColLwInfoAndDeck, + RetryStepInfo, +} from '../shared' +import { SelectRecoveryOption } from './SelectRecoveryOption' + +import type { RecoveryContentProps } from '../types' + +export function ManualReplaceLwAndRetry( + props: RecoveryContentProps +): JSX.Element { + const { recoveryMap } = props + const { step, route } = recoveryMap + const { MANUAL_REPLACE_AND_RETRY } = RECOVERY_MAP + + const buildContent = (): JSX.Element => { + switch (step) { + case MANUAL_REPLACE_AND_RETRY.STEPS.GRIPPER_HOLDING_LABWARE: + return + case MANUAL_REPLACE_AND_RETRY.STEPS.GRIPPER_RELEASE_LABWARE: + return + case MANUAL_REPLACE_AND_RETRY.STEPS.MANUAL_REPLACE: + return + case MANUAL_REPLACE_AND_RETRY.STEPS.RETRY: + return + default: + console.warn(`${step} in ${route} not explicitly handled. Rerouting.`) + return + } + } + + return buildContent() +} diff --git a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/RetryNewTips.tsx b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/RetryNewTips.tsx index 0a87c7c9234..f6e86cd6923 100644 --- a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/RetryNewTips.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/RetryNewTips.tsx @@ -1,11 +1,10 @@ -import * as React from 'react' import { Trans, useTranslation } from 'react-i18next' import { LegacyStyledText } from '@opentrons/components' import { RECOVERY_MAP } from '../constants' import { - ReplaceTips, + TwoColLwInfoAndDeck, SelectTips, TwoColTextAndFailedStepNextStep, } from '../shared' @@ -30,7 +29,7 @@ export function RetryNewTips(props: RecoveryContentProps): JSX.Element { const buildContent = (): JSX.Element => { switch (step) { case RETRY_NEW_TIPS.STEPS.REPLACE_TIPS: - return + return case RETRY_NEW_TIPS.STEPS.SELECT_TIPS: return case RETRY_NEW_TIPS.STEPS.RETRY: @@ -47,12 +46,12 @@ export function RetryNewTips(props: RecoveryContentProps): JSX.Element { export function RetryWithNewTips(props: RecoveryContentProps): JSX.Element { const { recoveryCommands, routeUpdateActions } = props const { retryFailedCommand, resumeRun } = recoveryCommands - const { setRobotInMotion } = routeUpdateActions + const { handleMotionRouting } = routeUpdateActions const { ROBOT_RETRYING_STEP } = RECOVERY_MAP const { t } = useTranslation('error_recovery') const primaryBtnOnClick = (): Promise => { - return setRobotInMotion(true, ROBOT_RETRYING_STEP.ROUTE) + return handleMotionRouting(true, ROBOT_RETRYING_STEP.ROUTE) .then(() => retryFailedCommand()) .then(() => { resumeRun() diff --git a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/RetrySameTips.tsx b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/RetrySameTips.tsx index 1d8fa933c42..93a0d84689d 100644 --- a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/RetrySameTips.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/RetrySameTips.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { Trans, useTranslation } from 'react-i18next' import { LegacyStyledText } from '@opentrons/components' @@ -30,12 +29,12 @@ export function RetrySameTips(props: RecoveryContentProps): JSX.Element { export function RetrySameTipsInfo(props: RecoveryContentProps): JSX.Element { const { routeUpdateActions, recoveryCommands } = props const { retryFailedCommand, resumeRun } = recoveryCommands - const { setRobotInMotion } = routeUpdateActions + const { handleMotionRouting } = routeUpdateActions const { ROBOT_RETRYING_STEP } = RECOVERY_MAP const { t } = useTranslation('error_recovery') const primaryBtnOnClick = (): Promise => { - return setRobotInMotion(true, ROBOT_RETRYING_STEP.ROUTE) + return handleMotionRouting(true, ROBOT_RETRYING_STEP.ROUTE) .then(() => retryFailedCommand()) .then(() => { resumeRun() diff --git a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/RetryStep.tsx b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/RetryStep.tsx index ddaf6b5ee3c..9b1f4d2c85a 100644 --- a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/RetryStep.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/RetryStep.tsx @@ -1,10 +1,5 @@ -import * as React from 'react' -import { Trans, useTranslation } from 'react-i18next' - -import { LegacyStyledText } from '@opentrons/components' - import { RECOVERY_MAP } from '../constants' -import { TwoColTextAndFailedStepNextStep } from '../shared' +import { RetryStepInfo } from '../shared' import { SelectRecoveryOption } from './SelectRecoveryOption' import type { RecoveryContentProps } from '../types' @@ -12,11 +7,11 @@ import type { RecoveryContentProps } from '../types' export function RetryStep(props: RecoveryContentProps): JSX.Element { const { recoveryMap } = props const { step, route } = recoveryMap - const { RETRY_FAILED_COMMAND } = RECOVERY_MAP + const { RETRY_STEP } = RECOVERY_MAP const buildContent = (): JSX.Element => { switch (step) { - case RETRY_FAILED_COMMAND.STEPS.CONFIRM_RETRY: + case RETRY_STEP.STEPS.CONFIRM_RETRY: return default: console.warn(`${step} in ${route} not explicitly handled. Rerouting.`) @@ -26,42 +21,3 @@ export function RetryStep(props: RecoveryContentProps): JSX.Element { return buildContent() } - -export function RetryStepInfo(props: RecoveryContentProps): JSX.Element { - const { routeUpdateActions, recoveryCommands } = props - const { ROBOT_RETRYING_STEP } = RECOVERY_MAP - const { t } = useTranslation('error_recovery') - - const { retryFailedCommand, resumeRun } = recoveryCommands - const { setRobotInMotion } = routeUpdateActions - - const primaryBtnOnClick = (): Promise => { - return setRobotInMotion(true, ROBOT_RETRYING_STEP.ROUTE) - .then(() => retryFailedCommand()) - .then(() => { - resumeRun() - }) - } - - const buildBodyText = (): JSX.Element => { - return ( - , - }} - /> - ) - } - - return ( - - ) -} diff --git a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/SelectRecoveryOption.tsx b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/SelectRecoveryOption.tsx index c56a7ede638..731f443f1dc 100644 --- a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/SelectRecoveryOption.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/SelectRecoveryOption.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, useEffect } from 'react' import head from 'lodash/head' import { useTranslation } from 'react-i18next' @@ -24,7 +24,7 @@ import { } from '../shared' import type { ErrorKind, RecoveryContentProps, RecoveryRoute } from '../types' -import type { PipetteWithTip } from '../../DropTipWizardFlows' +import type { PipetteWithTip } from '/app/organisms/DropTipWizardFlows' // The "home" route within Error Recovery. When a user completes a non-terminal flow or presses "Go back" enough // to escape the boundaries of any route, they will be redirected here. @@ -59,7 +59,7 @@ export function SelectRecoveryOptionHome({ const { determineTipStatus } = tipStatusUtils const { setSelectedRecoveryOption } = currentRecoveryOptionUtils const validRecoveryOptions = getRecoveryOptions(errorKind) - const [selectedRoute, setSelectedRoute] = React.useState( + const [selectedRoute, setSelectedRoute] = useState( head(validRecoveryOptions) as RecoveryRoute ) @@ -178,7 +178,7 @@ export function DesktopRecoveryOptions({ export function useCurrentTipStatus( determineTipStatus: () => Promise ): void { - React.useEffect(() => { + useEffect(() => { void determineTipStatus() }, []) } @@ -193,13 +193,17 @@ export function getRecoveryOptions(errorKind: ErrorKind): RecoveryRoute[] { return OVERPRESSURE_WHILE_ASPIRATING_OPTIONS case ERROR_KINDS.OVERPRESSURE_WHILE_DISPENSING: return OVERPRESSURE_WHILE_DISPENSING_OPTIONS + case ERROR_KINDS.TIP_NOT_DETECTED: + return TIP_NOT_DETECTED_OPTIONS + case ERROR_KINDS.GRIPPER_ERROR: + return GRIPPER_ERROR_OPTIONS case ERROR_KINDS.GENERAL_ERROR: return GENERAL_ERROR_OPTIONS } } export const NO_LIQUID_DETECTED_OPTIONS: RecoveryRoute[] = [ - RECOVERY_MAP.FILL_MANUALLY_AND_SKIP.ROUTE, + RECOVERY_MAP.MANUAL_FILL_AND_SKIP.ROUTE, RECOVERY_MAP.IGNORE_AND_SKIP.ROUTE, RECOVERY_MAP.CANCEL_RUN.ROUTE, ] @@ -221,8 +225,20 @@ export const OVERPRESSURE_WHILE_DISPENSING_OPTIONS: RecoveryRoute[] = [ RECOVERY_MAP.CANCEL_RUN.ROUTE, ] +export const TIP_NOT_DETECTED_OPTIONS: RecoveryRoute[] = [ + RECOVERY_MAP.RETRY_STEP.ROUTE, + RECOVERY_MAP.IGNORE_AND_SKIP.ROUTE, + RECOVERY_MAP.CANCEL_RUN.ROUTE, +] + +export const GRIPPER_ERROR_OPTIONS: RecoveryRoute[] = [ + RECOVERY_MAP.MANUAL_MOVE_AND_SKIP.ROUTE, + RECOVERY_MAP.MANUAL_REPLACE_AND_RETRY.ROUTE, + RECOVERY_MAP.CANCEL_RUN.ROUTE, +] + export const GENERAL_ERROR_OPTIONS: RecoveryRoute[] = [ - RECOVERY_MAP.RETRY_FAILED_COMMAND.ROUTE, + RECOVERY_MAP.RETRY_STEP.ROUTE, RECOVERY_MAP.CANCEL_RUN.ROUTE, ] diff --git a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/SkipStepNewTips.tsx b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/SkipStepNewTips.tsx index 33c0f199cd8..647bded71e1 100644 --- a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/SkipStepNewTips.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/SkipStepNewTips.tsx @@ -1,14 +1,5 @@ -import * as React from 'react' -import { Trans, useTranslation } from 'react-i18next' - -import { LegacyStyledText } from '@opentrons/components' - import { RECOVERY_MAP } from '../constants' -import { - ReplaceTips, - SelectTips, - TwoColTextAndFailedStepNextStep, -} from '../shared' +import { TwoColLwInfoAndDeck, SelectTips, SkipStepInfo } from '../shared' import { SelectRecoveryOption } from './SelectRecoveryOption' import type { RecoveryContentProps } from '../types' @@ -32,11 +23,11 @@ export function SkipStepNewTips( const buildContent = (): JSX.Element => { switch (step) { case SKIP_STEP_WITH_NEW_TIPS.STEPS.REPLACE_TIPS: - return + return case SKIP_STEP_WITH_NEW_TIPS.STEPS.SELECT_TIPS: return case SKIP_STEP_WITH_NEW_TIPS.STEPS.SKIP: - return + return default: console.warn(`${step} in ${route} not explicitly handled. Rerouting.`) return @@ -45,39 +36,3 @@ export function SkipStepNewTips( return buildContent() } - -export function SkipStepWithNewTips(props: RecoveryContentProps): JSX.Element { - const { recoveryCommands, routeUpdateActions } = props - const { skipFailedCommand } = recoveryCommands - const { setRobotInMotion } = routeUpdateActions - const { ROBOT_SKIPPING_STEP } = RECOVERY_MAP - const { t } = useTranslation('error_recovery') - - const primaryBtnOnClick = (): Promise => { - return setRobotInMotion(true, ROBOT_SKIPPING_STEP.ROUTE).then(() => { - skipFailedCommand() - }) - } - - const buildBodyText = (): JSX.Element => { - return ( - , - }} - /> - ) - } - - return ( - - ) -} diff --git a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/SkipStepSameTips.tsx b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/SkipStepSameTips.tsx index aed84372ccf..2b56012d5ab 100644 --- a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/SkipStepSameTips.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/SkipStepSameTips.tsx @@ -1,9 +1,4 @@ -import * as React from 'react' -import { Trans, useTranslation } from 'react-i18next' - -import { LegacyStyledText } from '@opentrons/components' - -import { TwoColTextAndFailedStepNextStep } from '../shared' +import { SkipStepInfo } from '../shared' import { RECOVERY_MAP } from '../constants' import { SelectRecoveryOption } from './SelectRecoveryOption' @@ -17,7 +12,7 @@ export function SkipStepSameTips(props: RecoveryContentProps): JSX.Element { const buildContent = (): JSX.Element => { switch (step) { case SKIP_STEP_WITH_SAME_TIPS.STEPS.SKIP: - return + return default: console.warn(`${step} in ${route} not explicitly handled. Rerouting.`) return @@ -26,39 +21,3 @@ export function SkipStepSameTips(props: RecoveryContentProps): JSX.Element { return buildContent() } - -export function SkipStepSameTipsInfo(props: RecoveryContentProps): JSX.Element { - const { routeUpdateActions, recoveryCommands } = props - const { skipFailedCommand } = recoveryCommands - const { setRobotInMotion } = routeUpdateActions - const { ROBOT_SKIPPING_STEP } = RECOVERY_MAP - const { t } = useTranslation('error_recovery') - - const primaryBtnOnClick = (): Promise => { - return setRobotInMotion(true, ROBOT_SKIPPING_STEP.ROUTE).then(() => { - skipFailedCommand() - }) - } - - const buildBodyText = (): JSX.Element => { - return ( - , - }} - /> - ) - } - - return ( - - ) -} diff --git a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/CancelRun.test.tsx b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/CancelRun.test.tsx index 3786e50e699..cbf8126e353 100644 --- a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/CancelRun.test.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/CancelRun.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { vi, describe, it, expect, beforeEach } from 'vitest' import { screen, waitFor } from '@testing-library/react' @@ -23,16 +23,16 @@ describe('RecoveryFooterButtons', () => { const { CANCEL_RUN, ROBOT_CANCELING, DROP_TIP_FLOWS } = RECOVERY_MAP let props: React.ComponentProps let mockGoBackPrevStep: Mock - let mockSetRobotInMotion: Mock + let mockhandleMotionRouting: Mock let mockProceedToRouteAndStep: Mock beforeEach(() => { mockGoBackPrevStep = vi.fn() - mockSetRobotInMotion = vi.fn(() => Promise.resolve()) + mockhandleMotionRouting = vi.fn(() => Promise.resolve()) mockProceedToRouteAndStep = vi.fn() const mockRouteUpdateActions = { goBackPrevStep: mockGoBackPrevStep, - setRobotInMotion: mockSetRobotInMotion, + handleMotionRouting: mockhandleMotionRouting, proceedToRouteAndStep: mockProceedToRouteAndStep, } as any @@ -56,7 +56,10 @@ describe('RecoveryFooterButtons', () => { }) it('renders SelectRecoveryOption when the route is unknown', () => { - props = { ...props, recoveryMap: { ...props.recoveryMap, step: 'UNKNOWN' } } + props = { + ...props, + recoveryMap: { ...props.recoveryMap, step: 'UNKNOWN' as any }, + } render(props) screen.getByText('MOCK SELECT RECOVERY OPTION') @@ -76,7 +79,7 @@ describe('RecoveryFooterButtons', () => { }) it('should call commands in the correct order for the primaryOnClick callback', async () => { - const setRobotInMotionMock = vi.fn(() => Promise.resolve()) + const handleMotionRoutingMock = vi.fn(() => Promise.resolve()) const cancelRunMock = vi.fn(() => Promise.resolve()) const mockRecoveryCommands = { @@ -84,7 +87,7 @@ describe('RecoveryFooterButtons', () => { } as any const mockRouteUpdateActions = { - setRobotInMotion: setRobotInMotionMock, + handleMotionRouting: handleMotionRoutingMock, } as any render({ @@ -96,10 +99,10 @@ describe('RecoveryFooterButtons', () => { clickButtonLabeled('Confirm') await waitFor(() => { - expect(setRobotInMotionMock).toHaveBeenCalledTimes(1) + expect(handleMotionRoutingMock).toHaveBeenCalledTimes(1) }) await waitFor(() => { - expect(setRobotInMotionMock).toHaveBeenCalledWith( + expect(handleMotionRoutingMock).toHaveBeenCalledWith( true, ROBOT_CANCELING.ROUTE ) @@ -108,7 +111,7 @@ describe('RecoveryFooterButtons', () => { expect(cancelRunMock).toHaveBeenCalledTimes(1) }) - expect(setRobotInMotionMock.mock.invocationCallOrder[0]).toBeLessThan( + expect(handleMotionRoutingMock.mock.invocationCallOrder[0]).toBeLessThan( cancelRunMock.mock.invocationCallOrder[0] ) }) @@ -141,7 +144,7 @@ describe('RecoveryFooterButtons', () => { clickButtonLabeled('Confirm') expect(mockProceedToRouteAndStep).not.toHaveBeenCalled() - expect(mockSetRobotInMotion).not.toHaveBeenCalled() + expect(mockhandleMotionRouting).not.toHaveBeenCalled() }) it('should will cancel the run if no tips are detected', () => { @@ -157,6 +160,6 @@ describe('RecoveryFooterButtons', () => { clickButtonLabeled('Confirm') expect(mockProceedToRouteAndStep).not.toHaveBeenCalled() - expect(mockSetRobotInMotion).toHaveBeenCalled() + expect(mockhandleMotionRouting).toHaveBeenCalled() }) }) diff --git a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/FillWellAndSkip.test.tsx b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/FillWellAndSkip.test.tsx index 4d839340805..3c7675ec21c 100644 --- a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/FillWellAndSkip.test.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/FillWellAndSkip.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, vi, expect, beforeEach } from 'vitest' import { screen, waitFor } from '@testing-library/react' @@ -66,12 +66,12 @@ describe('FillWellAndSkip', () => { ) }) - it(`renders FillWell when step is ${RECOVERY_MAP.FILL_MANUALLY_AND_SKIP.STEPS.MANUALLY_FILL}`, () => { + it(`renders FillWell when step is ${RECOVERY_MAP.MANUAL_FILL_AND_SKIP.STEPS.MANUAL_FILL}`, () => { props = { ...props, recoveryMap: { ...props.recoveryMap, - step: RECOVERY_MAP.FILL_MANUALLY_AND_SKIP.STEPS.MANUALLY_FILL, + step: RECOVERY_MAP.MANUAL_FILL_AND_SKIP.STEPS.MANUAL_FILL, }, } render(props) @@ -80,12 +80,12 @@ describe('FillWellAndSkip', () => { ) }) - it(`renders SkipToNextStep when step is ${RECOVERY_MAP.FILL_MANUALLY_AND_SKIP.STEPS.SKIP}`, () => { + it(`renders SkipToNextStep when step is ${RECOVERY_MAP.MANUAL_FILL_AND_SKIP.STEPS.SKIP}`, () => { props = { ...props, recoveryMap: { ...props.recoveryMap, - step: RECOVERY_MAP.FILL_MANUALLY_AND_SKIP.STEPS.SKIP, + step: RECOVERY_MAP.MANUAL_FILL_AND_SKIP.STEPS.SKIP, }, } render(props) @@ -109,7 +109,7 @@ describe('FillWellAndSkip', () => { ...props, recoveryMap: { ...props.recoveryMap, - step: 'UNKNOWN_STEP', + step: 'UNKNOWN_STEP' as any, }, } render(props) @@ -137,13 +137,13 @@ describe('FillWell', () => { describe('SkipToNextStep', () => { let props: React.ComponentProps - let mockSetRobotInMotion: Mock + let mockhandleMotionRouting: Mock let mockGoBackPrevStep: Mock let mockProceedToRouteAndStep: Mock let mockSkipFailedCommand: Mock beforeEach(() => { - mockSetRobotInMotion = vi.fn(() => Promise.resolve()) + mockhandleMotionRouting = vi.fn(() => Promise.resolve()) mockGoBackPrevStep = vi.fn() mockProceedToRouteAndStep = vi.fn() mockSkipFailedCommand = vi.fn(() => Promise.resolve()) @@ -151,7 +151,7 @@ describe('SkipToNextStep', () => { props = { ...mockRecoveryContentProps, routeUpdateActions: { - setRobotInMotion: mockSetRobotInMotion, + handleMotionRouting: mockhandleMotionRouting, goBackPrevStep: mockGoBackPrevStep, proceedToRouteAndStep: mockProceedToRouteAndStep, } as any, @@ -186,7 +186,7 @@ describe('SkipToNextStep', () => { renderSkipToNextStep(props) clickButtonLabeled('Continue run now') await waitFor(() => { - expect(mockSetRobotInMotion).toHaveBeenCalledWith( + expect(mockhandleMotionRouting).toHaveBeenCalledWith( true, RECOVERY_MAP.ROBOT_SKIPPING_STEP.ROUTE ) @@ -195,7 +195,7 @@ describe('SkipToNextStep', () => { expect(mockSkipFailedCommand).toHaveBeenCalled() }) - expect(mockSetRobotInMotion.mock.invocationCallOrder[0]).toBeLessThan( + expect(mockhandleMotionRouting.mock.invocationCallOrder[0]).toBeLessThan( mockSkipFailedCommand.mock.invocationCallOrder[0] ) }) diff --git a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/IgnoreErrorSkipStep.test.tsx b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/IgnoreErrorSkipStep.test.tsx index 6ddc55506bc..0e1789aa797 100644 --- a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/IgnoreErrorSkipStep.test.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/IgnoreErrorSkipStep.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, vi, expect, beforeEach } from 'vitest' import { screen, fireEvent, waitFor } from '@testing-library/react' @@ -71,7 +71,7 @@ describe('IgnoreErrorSkipStep', () => { ...props, recoveryMap: { ...props.recoveryMap, - step: 'UNKNOWN_STEP', + step: 'UNKNOWN_STEP' as any, }, } render(props) @@ -109,8 +109,8 @@ describe('IgnoreErrorStepHome', () => { clickButtonLabeled('Continue') await waitFor(() => { expect(mockProceedToRouteAndStep).toHaveBeenCalledWith( - RECOVERY_MAP.FILL_MANUALLY_AND_SKIP.ROUTE, - RECOVERY_MAP.FILL_MANUALLY_AND_SKIP.STEPS.SKIP + RECOVERY_MAP.MANUAL_FILL_AND_SKIP.ROUTE, + RECOVERY_MAP.MANUAL_FILL_AND_SKIP.STEPS.SKIP ) }) }) @@ -124,8 +124,8 @@ describe('IgnoreErrorStepHome', () => { }) await waitFor(() => { expect(mockProceedToRouteAndStep).toHaveBeenCalledWith( - RECOVERY_MAP.FILL_MANUALLY_AND_SKIP.ROUTE, - RECOVERY_MAP.FILL_MANUALLY_AND_SKIP.STEPS.SKIP + RECOVERY_MAP.MANUAL_FILL_AND_SKIP.ROUTE, + RECOVERY_MAP.MANUAL_FILL_AND_SKIP.STEPS.SKIP ) }) }) diff --git a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/ManageTips.test.tsx b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/ManageTips.test.tsx index 373b357d188..dd86409e7d6 100644 --- a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/ManageTips.test.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/ManageTips.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, vi, expect, beforeEach } from 'vitest' import { screen, @@ -13,15 +13,15 @@ import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' import { ManageTips, useDropTipFlowUtils } from '../ManageTips' import { RECOVERY_MAP } from '../../constants' -import { DropTipWizardFlows } from '../../../DropTipWizardFlows' -import { DT_ROUTES } from '../../../DropTipWizardFlows/constants' +import { DropTipWizardFlows } from '/app/organisms/DropTipWizardFlows' +import { DT_ROUTES } from '/app/organisms/DropTipWizardFlows/constants' import { SelectRecoveryOption } from '../SelectRecoveryOption' import { clickButtonLabeled } from '../../__tests__/util' import type { Mock } from 'vitest' import type { PipetteModelSpecs } from '@opentrons/shared-data' -vi.mock('../../../DropTipWizardFlows') +vi.mock('/app/organisms/DropTipWizardFlows') vi.mock('../SelectRecoveryOption') const { DROP_TIP_FLOWS, RETRY_NEW_TIPS } = RECOVERY_MAP @@ -44,12 +44,12 @@ describe('ManageTips', () => { let props: React.ComponentProps let mockProceedNextStep: Mock let mockProceedToRouteAndStep: Mock - let mockSetRobotInMotion: Mock + let mockhandleMotionRouting: Mock beforeEach(() => { mockProceedNextStep = vi.fn() mockProceedToRouteAndStep = vi.fn(() => Promise.resolve()) - mockSetRobotInMotion = vi.fn(() => Promise.resolve()) + mockhandleMotionRouting = vi.fn(() => Promise.resolve()) props = { ...mockRecoveryContentProps, @@ -62,7 +62,7 @@ describe('ManageTips', () => { } as any, routeUpdateActions: { proceedNextStep: mockProceedNextStep, - setRobotInMotion: mockSetRobotInMotion, + handleMotionRouting: mockhandleMotionRouting, proceedToRouteAndStep: mockProceedToRouteAndStep, } as any, recoveryCommands: { cancelRun: vi.fn() } as any, @@ -82,7 +82,10 @@ describe('ManageTips', () => { }) it('renders SelectRecoveryOption when the route is unknown', () => { - props = { ...props, recoveryMap: { ...props.recoveryMap, step: 'UNKNOWN' } } + props = { + ...props, + recoveryMap: { ...props.recoveryMap, step: 'UNKNOWN' as any }, + } render(props) screen.getByText('MOCK SELECT RECOVERY OPTION') @@ -113,7 +116,7 @@ describe('ManageTips', () => { fireEvent.click(skipBtn) clickButtonLabeled('Skip and home pipette') - expect(mockSetRobotInMotion).toHaveBeenCalled() + expect(mockhandleMotionRouting).toHaveBeenCalled() }) it(`handles special routing for ${RETRY_NEW_TIPS.ROUTE} when skipping tip drop`, () => { diff --git a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/ManualMoveLwAndSkip.test.tsx b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/ManualMoveLwAndSkip.test.tsx new file mode 100644 index 00000000000..863b406e1c5 --- /dev/null +++ b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/ManualMoveLwAndSkip.test.tsx @@ -0,0 +1,71 @@ +import { describe, it, vi, beforeEach } from 'vitest' +import { screen } from '@testing-library/react' + +import { renderWithProviders } from '/app/__testing-utils__' +import { i18n } from '/app/i18n' +import { ManualMoveLwAndSkip } from '../ManualMoveLwAndSkip' +import { RECOVERY_MAP } from '../../constants' + +import type * as React from 'react' + +vi.mock('../../shared', () => ({ + GripperIsHoldingLabware: vi.fn(() => ( +
    MOCK_GRIPPER_IS_HOLDING_LABWARE
    + )), + GripperReleaseLabware: vi.fn(() =>
    MOCK_GRIPPER_RELEASE_LABWARE
    ), + TwoColLwInfoAndDeck: vi.fn(() =>
    MOCK_TWO_COL_LW_INFO_AND_DECK
    ), + SkipStepInfo: vi.fn(() =>
    MOCK_SKIP_STEP_INFO
    ), +})) + +vi.mock('../SelectRecoveryOption', () => ({ + SelectRecoveryOption: vi.fn(() =>
    MOCK_SELECT_RECOVERY_OPTION
    ), +})) + +describe('ManualMoveLwAndSkip', () => { + let props: React.ComponentProps + + beforeEach(() => { + props = { + recoveryMap: { + route: RECOVERY_MAP.MANUAL_MOVE_AND_SKIP.ROUTE, + step: RECOVERY_MAP.MANUAL_MOVE_AND_SKIP.STEPS.GRIPPER_HOLDING_LABWARE, + }, + } as any + }) + + const render = (props: React.ComponentProps) => { + return renderWithProviders(, { + i18nInstance: i18n, + })[0] + } + + it(`renders GripperIsHoldingLabware for ${RECOVERY_MAP.MANUAL_MOVE_AND_SKIP.STEPS.GRIPPER_HOLDING_LABWARE}`, () => { + render(props) + screen.getByText('MOCK_GRIPPER_IS_HOLDING_LABWARE') + }) + + it(`renders GripperReleaseLabware for ${RECOVERY_MAP.MANUAL_MOVE_AND_SKIP.STEPS.GRIPPER_RELEASE_LABWARE} step`, () => { + props.recoveryMap.step = + RECOVERY_MAP.MANUAL_MOVE_AND_SKIP.STEPS.GRIPPER_RELEASE_LABWARE + render(props) + screen.getByText('MOCK_GRIPPER_RELEASE_LABWARE') + }) + + it(`renders TwoColLwInfoAndDeck for ${RECOVERY_MAP.MANUAL_MOVE_AND_SKIP.STEPS.MANUAL_MOVE} step`, () => { + props.recoveryMap.step = RECOVERY_MAP.MANUAL_MOVE_AND_SKIP.STEPS.MANUAL_MOVE + render(props) + screen.getByText('MOCK_TWO_COL_LW_INFO_AND_DECK') + }) + + it(`renders SkipStepInfo for ${RECOVERY_MAP.MANUAL_MOVE_AND_SKIP.STEPS.SKIP} step`, () => { + props.recoveryMap.step = RECOVERY_MAP.MANUAL_MOVE_AND_SKIP.STEPS.SKIP + render(props) + screen.getByText('MOCK_SKIP_STEP_INFO') + }) + + it('renders SelectRecoveryOption for unknown step', () => { + props.recoveryMap.step = 'UNKNOWN_STEP' as any + render(props) + screen.getByText('MOCK_SELECT_RECOVERY_OPTION') + }) +}) diff --git a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/ManualReplaceLwAndRetry.test.tsx b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/ManualReplaceLwAndRetry.test.tsx new file mode 100644 index 00000000000..12fc8e5151c --- /dev/null +++ b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/ManualReplaceLwAndRetry.test.tsx @@ -0,0 +1,76 @@ +import { describe, it, vi, beforeEach } from 'vitest' +import { screen } from '@testing-library/react' + +import { renderWithProviders } from '/app/__testing-utils__' +import { i18n } from '/app/i18n' +import { ManualReplaceLwAndRetry } from '../ManualReplaceLwAndRetry' +import { RECOVERY_MAP } from '../../constants' + +import type * as React from 'react' + +vi.mock('../../shared', () => ({ + GripperIsHoldingLabware: vi.fn(() => ( +
    MOCK_GRIPPER_IS_HOLDING_LABWARE
    + )), + GripperReleaseLabware: vi.fn(() =>
    MOCK_GRIPPER_RELEASE_LABWARE
    ), + TwoColLwInfoAndDeck: vi.fn(() =>
    MOCK_TWO_COL_LW_INFO_AND_DECK
    ), + RetryStepInfo: vi.fn(() =>
    MOCK_RETRY_STEP_INFO
    ), +})) + +vi.mock('../SelectRecoveryOption', () => ({ + SelectRecoveryOption: vi.fn(() =>
    MOCK_SELECT_RECOVERY_OPTION
    ), +})) + +describe('ManualReplaceLwAndRetry', () => { + let props: React.ComponentProps + + beforeEach(() => { + props = { + recoveryMap: { + route: RECOVERY_MAP.MANUAL_REPLACE_AND_RETRY.ROUTE, + step: + RECOVERY_MAP.MANUAL_REPLACE_AND_RETRY.STEPS.GRIPPER_HOLDING_LABWARE, + }, + } as any + }) + + const render = ( + props: React.ComponentProps + ) => { + return renderWithProviders(, { + i18nInstance: i18n, + })[0] + } + + it(`renders GripperIsHoldingLabware for ${RECOVERY_MAP.MANUAL_REPLACE_AND_RETRY.STEPS.GRIPPER_HOLDING_LABWARE}`, () => { + render(props) + screen.getByText('MOCK_GRIPPER_IS_HOLDING_LABWARE') + }) + + it(`renders GripperReleaseLabware for ${RECOVERY_MAP.MANUAL_REPLACE_AND_RETRY.STEPS.GRIPPER_RELEASE_LABWARE} step`, () => { + props.recoveryMap.step = + RECOVERY_MAP.MANUAL_REPLACE_AND_RETRY.STEPS.GRIPPER_RELEASE_LABWARE + render(props) + screen.getByText('MOCK_GRIPPER_RELEASE_LABWARE') + }) + + it(`renders TwoColLwInfoAndDeck for ${RECOVERY_MAP.MANUAL_REPLACE_AND_RETRY.STEPS.MANUAL_REPLACE} step`, () => { + props.recoveryMap.step = + RECOVERY_MAP.MANUAL_REPLACE_AND_RETRY.STEPS.MANUAL_REPLACE + render(props) + screen.getByText('MOCK_TWO_COL_LW_INFO_AND_DECK') + }) + + it(`renders RetryStepInfo for ${RECOVERY_MAP.MANUAL_REPLACE_AND_RETRY.STEPS.RETRY} step`, () => { + props.recoveryMap.step = RECOVERY_MAP.MANUAL_REPLACE_AND_RETRY.STEPS.RETRY + render(props) + screen.getByText('MOCK_RETRY_STEP_INFO') + }) + + it('renders SelectRecoveryOption for unknown step', () => { + props.recoveryMap.step = + RECOVERY_MAP.SKIP_STEP_WITH_NEW_TIPS.STEPS.REPLACE_TIPS + render(props) + screen.getByText('MOCK_SELECT_RECOVERY_OPTION') + }) +}) diff --git a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/RetryNewTips.test.tsx b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/RetryNewTips.test.tsx index 8ddb269aca5..dcee4c10c56 100644 --- a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/RetryNewTips.test.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/RetryNewTips.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, vi, expect, beforeEach, afterEach } from 'vitest' import { screen, waitFor } from '@testing-library/react' @@ -18,7 +18,7 @@ vi.mock('../../shared', async () => { const actual = await vi.importActual('../../shared') return { ...actual, - ReplaceTips: vi.fn(() =>
    MOCK_REPLACE_TIPS
    ), + TwoColLwInfoAndDeck: vi.fn(() =>
    MOCK_REPLACE_TIPS
    ), SelectTips: vi.fn(() =>
    MOCK_SELECT_TIPS
    ), } }) @@ -97,7 +97,7 @@ describe('RetryNewTips', () => { ...props, recoveryMap: { ...props.recoveryMap, - step: 'UNKNOWN_STEP', + step: 'UNKNOWN_STEP' as any, }, } render(props) @@ -122,19 +122,19 @@ describe('RetryNewTips', () => { describe('RetryWithNewTips', () => { let props: React.ComponentProps - let mockSetRobotInMotion: Mock + let mockhandleMotionRouting: Mock let mockRetryFailedCommand: Mock let mockResumeRun: Mock beforeEach(() => { - mockSetRobotInMotion = vi.fn(() => Promise.resolve()) + mockhandleMotionRouting = vi.fn(() => Promise.resolve()) mockRetryFailedCommand = vi.fn(() => Promise.resolve()) mockResumeRun = vi.fn() props = { ...mockRecoveryContentProps, routeUpdateActions: { - setRobotInMotion: mockSetRobotInMotion, + handleMotionRouting: mockhandleMotionRouting, } as any, recoveryCommands: { retryFailedCommand: mockRetryFailedCommand, @@ -159,7 +159,7 @@ describe('RetryWithNewTips', () => { clickButtonLabeled('Retry now') await waitFor(() => { - expect(mockSetRobotInMotion).toHaveBeenCalledWith( + expect(mockhandleMotionRouting).toHaveBeenCalledWith( true, RECOVERY_MAP.ROBOT_RETRYING_STEP.ROUTE ) @@ -171,7 +171,7 @@ describe('RetryWithNewTips', () => { expect(mockResumeRun).toHaveBeenCalled() }) - expect(mockSetRobotInMotion.mock.invocationCallOrder[0]).toBeLessThan( + expect(mockhandleMotionRouting.mock.invocationCallOrder[0]).toBeLessThan( mockRetryFailedCommand.mock.invocationCallOrder[0] ) expect(mockRetryFailedCommand.mock.invocationCallOrder[0]).toBeLessThan( diff --git a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/RetrySameTips.test.tsx b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/RetrySameTips.test.tsx index b79a96c036d..4514c9cc350 100644 --- a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/RetrySameTips.test.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/RetrySameTips.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, vi, expect, beforeEach, afterEach } from 'vitest' import { screen, waitFor } from '@testing-library/react' @@ -63,7 +63,7 @@ describe('RetrySameTips', () => { ...props, recoveryMap: { ...props.recoveryMap, - step: 'UNKNOWN_STEP', + step: 'UNKNOWN_STEP' as any, }, } render(props) @@ -73,19 +73,19 @@ describe('RetrySameTips', () => { describe('RetrySameTipsInfo', () => { let props: React.ComponentProps - let mockSetRobotInMotion: Mock + let mockhandleMotionRouting: Mock let mockRetryFailedCommand: Mock let mockResumeRun: Mock beforeEach(() => { - mockSetRobotInMotion = vi.fn(() => Promise.resolve()) + mockhandleMotionRouting = vi.fn(() => Promise.resolve()) mockRetryFailedCommand = vi.fn(() => Promise.resolve()) mockResumeRun = vi.fn() props = { ...mockRecoveryContentProps, routeUpdateActions: { - setRobotInMotion: mockSetRobotInMotion, + handleMotionRouting: mockhandleMotionRouting, } as any, recoveryCommands: { retryFailedCommand: mockRetryFailedCommand, @@ -111,7 +111,7 @@ describe('RetrySameTipsInfo', () => { clickButtonLabeled('Retry now') await waitFor(() => { - expect(mockSetRobotInMotion).toHaveBeenCalledWith( + expect(mockhandleMotionRouting).toHaveBeenCalledWith( true, RECOVERY_MAP.ROBOT_RETRYING_STEP.ROUTE ) @@ -123,7 +123,7 @@ describe('RetrySameTipsInfo', () => { expect(mockResumeRun).toHaveBeenCalled() }) - expect(mockSetRobotInMotion.mock.invocationCallOrder[0]).toBeLessThan( + expect(mockhandleMotionRouting.mock.invocationCallOrder[0]).toBeLessThan( mockRetryFailedCommand.mock.invocationCallOrder[0] ) expect(mockRetryFailedCommand.mock.invocationCallOrder[0]).toBeLessThan( diff --git a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/RetryStep.test.tsx b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/RetryStep.test.tsx index 25a9deee482..ec39f5b7c18 100644 --- a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/RetryStep.test.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/RetryStep.test.tsx @@ -1,18 +1,14 @@ -import * as React from 'react' -import { describe, it, vi, expect, beforeEach, afterEach } from 'vitest' -import { screen, waitFor } from '@testing-library/react' +import type * as React from 'react' +import { describe, it, vi, beforeEach, afterEach } from 'vitest' +import { screen } from '@testing-library/react' import { mockRecoveryContentProps } from '../../__fixtures__' import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' -import { RetryStep, RetryStepInfo } from '../RetryStep' +import { RetryStep } from '../RetryStep' import { RECOVERY_MAP } from '../../constants' import { SelectRecoveryOption } from '../SelectRecoveryOption' -import { clickButtonLabeled } from '../../__tests__/util' - -import type { Mock } from 'vitest' - vi.mock('/app/molecules/Command') vi.mock('../SelectRecoveryOption') @@ -22,14 +18,6 @@ const render = (props: React.ComponentProps) => { })[0] } -const renderRetryStepInfo = ( - props: React.ComponentProps -) => { - return renderWithProviders(, { - i18nInstance: i18n, - })[0] -} - describe('RetryStep', () => { let props: React.ComponentProps @@ -47,12 +35,12 @@ describe('RetryStep', () => { vi.resetAllMocks() }) - it(`renders RetryStepInfo when step is ${RECOVERY_MAP.RETRY_FAILED_COMMAND.STEPS.CONFIRM_RETRY}`, () => { + it(`renders RetryStepInfo when step is ${RECOVERY_MAP.RETRY_STEP.STEPS.CONFIRM_RETRY}`, () => { props = { ...props, recoveryMap: { ...props.recoveryMap, - step: RECOVERY_MAP.RETRY_FAILED_COMMAND.STEPS.CONFIRM_RETRY, + step: RECOVERY_MAP.RETRY_STEP.STEPS.CONFIRM_RETRY, }, } render(props) @@ -64,72 +52,10 @@ describe('RetryStep', () => { ...props, recoveryMap: { ...props.recoveryMap, - step: 'UNKNOWN_STEP', + step: 'UNKNOWN_STEP' as any, }, } render(props) screen.getByText('MOCK_SELECT_RECOVERY_OPTION') }) }) - -describe('RetryStepInfo', () => { - let props: React.ComponentProps - let mockSetRobotInMotion: Mock - let mockRetryFailedCommand: Mock - let mockResumeRun: Mock - - beforeEach(() => { - mockSetRobotInMotion = vi.fn(() => Promise.resolve()) - mockRetryFailedCommand = vi.fn(() => Promise.resolve()) - mockResumeRun = vi.fn() - - props = { - ...mockRecoveryContentProps, - routeUpdateActions: { - setRobotInMotion: mockSetRobotInMotion, - } as any, - recoveryCommands: { - retryFailedCommand: mockRetryFailedCommand, - resumeRun: mockResumeRun, - } as any, - } - }) - - afterEach(() => { - vi.resetAllMocks() - }) - - it('renders the component with the correct text', () => { - renderRetryStepInfo(props) - screen.getByText('Retry step') - screen.queryByText( - 'First, take any necessary actions to prepare the robot to retry the failed step.' - ) - screen.queryByText('Then, close the robot door before proceeding.') - }) - - it('calls the correct routeUpdateActions and recoveryCommands in the correct order when the primary button is clicked', async () => { - renderRetryStepInfo(props) - clickButtonLabeled('Retry now') - - await waitFor(() => { - expect(mockSetRobotInMotion).toHaveBeenCalledWith( - true, - RECOVERY_MAP.ROBOT_RETRYING_STEP.ROUTE - ) - }) - await waitFor(() => { - expect(mockRetryFailedCommand).toHaveBeenCalled() - }) - await waitFor(() => { - expect(mockResumeRun).toHaveBeenCalled() - }) - - expect(mockSetRobotInMotion.mock.invocationCallOrder[0]).toBeLessThan( - mockRetryFailedCommand.mock.invocationCallOrder[0] - ) - expect(mockRetryFailedCommand.mock.invocationCallOrder[0]).toBeLessThan( - mockResumeRun.mock.invocationCallOrder[0] - ) - }) -}) diff --git a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/SelectRecoveryOptions.test.tsx b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/SelectRecoveryOptions.test.tsx index 7f4e8932070..dd3acb06ece 100644 --- a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/SelectRecoveryOptions.test.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/SelectRecoveryOptions.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { vi, describe, it, expect, beforeEach } from 'vitest' import { screen, fireEvent } from '@testing-library/react' import { when } from 'vitest-when' @@ -16,6 +16,8 @@ import { OVERPRESSURE_PREPARE_TO_ASPIRATE, OVERPRESSURE_WHILE_DISPENSING_OPTIONS, NO_LIQUID_DETECTED_OPTIONS, + TIP_NOT_DETECTED_OPTIONS, + GRIPPER_ERROR_OPTIONS, } from '../SelectRecoveryOption' import { RECOVERY_MAP, ERROR_KINDS } from '../../constants' import { clickButtonLabeled } from '../../__tests__/util' @@ -49,7 +51,7 @@ const renderDesktopRecoveryOptions = ( } describe('SelectRecoveryOption', () => { - const { RETRY_FAILED_COMMAND, RETRY_NEW_TIPS } = RECOVERY_MAP + const { RETRY_STEP, RETRY_NEW_TIPS } = RECOVERY_MAP let props: React.ComponentProps let mockProceedToRouteAndStep: Mock let mockSetSelectedRecoveryOption: Mock @@ -67,8 +69,8 @@ describe('SelectRecoveryOption', () => { ...mockRecoveryContentProps, routeUpdateActions: mockRouteUpdateActions, recoveryMap: { - route: RETRY_FAILED_COMMAND.ROUTE, - step: RETRY_FAILED_COMMAND.STEPS.CONFIRM_RETRY, + route: RETRY_STEP.ROUTE, + step: RETRY_STEP.STEPS.CONFIRM_RETRY, }, tipStatusUtils: { determineTipStatus: vi.fn() } as any, currentRecoveryOptionUtils: { @@ -78,7 +80,7 @@ describe('SelectRecoveryOption', () => { } when(mockGetRecoveryOptionCopy) - .calledWith(RECOVERY_MAP.RETRY_FAILED_COMMAND.ROUTE) + .calledWith(RECOVERY_MAP.RETRY_STEP.ROUTE) .thenReturn('Retry step') when(mockGetRecoveryOptionCopy) .calledWith(RECOVERY_MAP.CANCEL_RUN.ROUTE) @@ -87,7 +89,7 @@ describe('SelectRecoveryOption', () => { .calledWith(RECOVERY_MAP.RETRY_NEW_TIPS.ROUTE) .thenReturn('Retry with new tips') when(mockGetRecoveryOptionCopy) - .calledWith(RECOVERY_MAP.FILL_MANUALLY_AND_SKIP.ROUTE) + .calledWith(RECOVERY_MAP.MANUAL_FILL_AND_SKIP.ROUTE) .thenReturn('Manually fill well and skip to next step') when(mockGetRecoveryOptionCopy) .calledWith(RECOVERY_MAP.RETRY_SAME_TIPS.ROUTE) @@ -102,9 +104,7 @@ describe('SelectRecoveryOption', () => { clickButtonLabeled('Continue') - expect(mockSetSelectedRecoveryOption).toHaveBeenCalledWith( - RETRY_FAILED_COMMAND.ROUTE - ) + expect(mockSetSelectedRecoveryOption).toHaveBeenCalledWith(RETRY_STEP.ROUTE) }) it('renders appropriate "General Error" copy and click behavior', () => { @@ -121,9 +121,7 @@ describe('SelectRecoveryOption', () => { fireEvent.click(retryStepOption[0]) clickButtonLabeled('Continue') - expect(mockProceedToRouteAndStep).toHaveBeenCalledWith( - RETRY_FAILED_COMMAND.ROUTE - ) + expect(mockProceedToRouteAndStep).toHaveBeenCalledWith(RETRY_STEP.ROUTE) }) it('renders appropriate "Overpressure while aspirating" copy and click behavior', () => { @@ -167,7 +165,7 @@ describe('SelectRecoveryOption', () => { clickButtonLabeled('Continue') expect(mockProceedToRouteAndStep).toHaveBeenCalledWith( - RECOVERY_MAP.FILL_MANUALLY_AND_SKIP.ROUTE + RECOVERY_MAP.MANUAL_FILL_AND_SKIP.ROUTE ) }) @@ -238,7 +236,7 @@ describe('SelectRecoveryOption', () => { } when(mockGetRecoveryOptionCopy) - .calledWith(RECOVERY_MAP.RETRY_FAILED_COMMAND.ROUTE) + .calledWith(RECOVERY_MAP.RETRY_STEP.ROUTE) .thenReturn('Retry step') when(mockGetRecoveryOptionCopy) .calledWith(RECOVERY_MAP.CANCEL_RUN.ROUTE) @@ -247,7 +245,7 @@ describe('SelectRecoveryOption', () => { .calledWith(RECOVERY_MAP.RETRY_NEW_TIPS.ROUTE) .thenReturn('Retry with new tips') when(mockGetRecoveryOptionCopy) - .calledWith(RECOVERY_MAP.FILL_MANUALLY_AND_SKIP.ROUTE) + .calledWith(RECOVERY_MAP.MANUAL_FILL_AND_SKIP.ROUTE) .thenReturn('Manually fill well and skip to next step') when(mockGetRecoveryOptionCopy) .calledWith(RECOVERY_MAP.RETRY_SAME_TIPS.ROUTE) @@ -261,6 +259,12 @@ describe('SelectRecoveryOption', () => { when(mockGetRecoveryOptionCopy) .calledWith(RECOVERY_MAP.IGNORE_AND_SKIP.ROUTE) .thenReturn('Ignore error and skip to next step') + when(mockGetRecoveryOptionCopy) + .calledWith(RECOVERY_MAP.MANUAL_MOVE_AND_SKIP.ROUTE) + .thenReturn('Manually move labware and skip to next step') + when(mockGetRecoveryOptionCopy) + .calledWith(RECOVERY_MAP.MANUAL_REPLACE_AND_RETRY.ROUTE) + .thenReturn('Manually replace labware on deck and retry step') }) it('renders valid recovery options for a general error errorKind', () => { @@ -332,6 +336,40 @@ describe('SelectRecoveryOption', () => { screen.getByRole('label', { name: 'Skip to next step with new tips' }) screen.getByRole('label', { name: 'Cancel run' }) }) + + it(`renders valid recovery options for a ${ERROR_KINDS.TIP_NOT_DETECTED} errorKind`, () => { + props = { + ...props, + validRecoveryOptions: TIP_NOT_DETECTED_OPTIONS, + } + + renderer(props) + + screen.getByRole('label', { + name: 'Retry step', + }) + screen.getByRole('label', { + name: 'Ignore error and skip to next step', + }) + screen.getByRole('label', { name: 'Cancel run' }) + }) + + it(`renders valid recovery options for a ${ERROR_KINDS.GRIPPER_ERROR} errorKind`, () => { + props = { + ...props, + validRecoveryOptions: GRIPPER_ERROR_OPTIONS, + } + + renderer(props) + + screen.getByRole('label', { + name: 'Manually move labware and skip to next step', + }) + screen.getByRole('label', { + name: 'Manually replace labware on deck and retry step', + }) + screen.getByRole('label', { name: 'Cancel run' }) + }) }) }) @@ -372,4 +410,18 @@ describe('getRecoveryOptions', () => { OVERPRESSURE_WHILE_DISPENSING_OPTIONS ) }) + + it(`returns valid options when the errorKind is ${ERROR_KINDS.TIP_NOT_DETECTED}`, () => { + const overpressureWhileDispensingOptions = getRecoveryOptions( + ERROR_KINDS.TIP_NOT_DETECTED + ) + expect(overpressureWhileDispensingOptions).toBe(TIP_NOT_DETECTED_OPTIONS) + }) + + it(`returns valid options when the errorKind is ${ERROR_KINDS.GRIPPER_ERROR}`, () => { + const overpressureWhileDispensingOptions = getRecoveryOptions( + ERROR_KINDS.GRIPPER_ERROR + ) + expect(overpressureWhileDispensingOptions).toBe(GRIPPER_ERROR_OPTIONS) + }) }) diff --git a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/SkipStepNewTips.test.tsx b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/SkipStepNewTips.test.tsx index 389ebe3b7db..09afa086dca 100644 --- a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/SkipStepNewTips.test.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/SkipStepNewTips.test.tsx @@ -1,14 +1,13 @@ -import * as React from 'react' -import { describe, it, vi, expect, beforeEach, afterEach } from 'vitest' -import { screen, waitFor } from '@testing-library/react' +import type * as React from 'react' +import { describe, it, vi, expect, beforeEach } from 'vitest' +import { screen } from '@testing-library/react' import { mockRecoveryContentProps } from '../../__fixtures__' import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' -import { SkipStepNewTips, SkipStepWithNewTips } from '../SkipStepNewTips' +import { SkipStepNewTips } from '../SkipStepNewTips' import { RECOVERY_MAP } from '../../constants' import { SelectRecoveryOption } from '../SelectRecoveryOption' -import { clickButtonLabeled } from '../../__tests__/util' import type { Mock } from 'vitest' @@ -18,8 +17,9 @@ vi.mock('../../shared', async () => { const actual = await vi.importActual('../../shared') return { ...actual, - ReplaceTips: vi.fn(() =>
    MOCK_REPLACE_TIPS
    ), SelectTips: vi.fn(() =>
    MOCK_SELECT_TIPS
    ), + TwoColLwInfoAndDeck: vi.fn(() =>
    MOCK_REPLACE_TIPS
    ), + SkipStepInfo: vi.fn(() =>
    MOCK_SKIP_STEP_INFO
    ), } }) @@ -29,14 +29,6 @@ const render = (props: React.ComponentProps) => { })[0] } -const renderSkipStepWithNewTips = ( - props: React.ComponentProps -) => { - return renderWithProviders(, { - i18nInstance: i18n, - })[0] -} - describe('SkipStepNewTips', () => { let props: React.ComponentProps let mockProceedToRouteAndStep: Mock @@ -89,7 +81,7 @@ describe('SkipStepNewTips', () => { }, } render(props) - screen.getByText('Skip to next step with new tips') + screen.getByText('MOCK_SKIP_STEP_INFO') }) it('renders SelectRecoveryOption as a fallback', () => { @@ -97,7 +89,7 @@ describe('SkipStepNewTips', () => { ...props, recoveryMap: { ...props.recoveryMap, - step: 'UNKNOWN_STEP', + step: 'UNKNOWN_STEP' as any, }, } render(props) @@ -119,56 +111,3 @@ describe('SkipStepNewTips', () => { ) }) }) - -describe('SkipStepWithNewTips', () => { - let props: React.ComponentProps - let mockSetRobotInMotion: Mock - let mockSkipFailedCommand: Mock - - beforeEach(() => { - mockSetRobotInMotion = vi.fn(() => Promise.resolve()) - mockSkipFailedCommand = vi.fn(() => Promise.resolve()) - - props = { - ...mockRecoveryContentProps, - routeUpdateActions: { - setRobotInMotion: mockSetRobotInMotion, - } as any, - recoveryCommands: { - skipFailedCommand: mockSkipFailedCommand, - } as any, - } - }) - - afterEach(() => { - vi.resetAllMocks() - }) - - it('renders the component with the correct text', () => { - renderSkipStepWithNewTips(props) - screen.getByText('Skip to next step with new tips') - screen.queryByText( - 'The failed dispense step will not be completed. The run will continue from the next step.' - ) - screen.queryByText('Close the robot door before proceeding.') - }) - - it('calls the correct routeUpdateActions and recoveryCommands in the correct order when the primary button is clicked', async () => { - renderSkipStepWithNewTips(props) - clickButtonLabeled('Continue run now') - - await waitFor(() => { - expect(mockSetRobotInMotion).toHaveBeenCalledWith( - true, - RECOVERY_MAP.ROBOT_SKIPPING_STEP.ROUTE - ) - }) - await waitFor(() => { - expect(mockSkipFailedCommand).toHaveBeenCalled() - }) - - expect(mockSetRobotInMotion.mock.invocationCallOrder[0]).toBeLessThan( - mockSkipFailedCommand.mock.invocationCallOrder[0] - ) - }) -}) diff --git a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/SkipStepSameTips.test.tsx b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/SkipStepSameTips.test.tsx index c17957103f6..157825b3322 100644 --- a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/SkipStepSameTips.test.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/__tests__/SkipStepSameTips.test.tsx @@ -1,19 +1,17 @@ -import * as React from 'react' -import { describe, it, vi, expect, beforeEach, afterEach } from 'vitest' -import { screen, waitFor } from '@testing-library/react' +import type * as React from 'react' +import { describe, it, vi, beforeEach } from 'vitest' +import { screen } from '@testing-library/react' import { mockRecoveryContentProps } from '../../__fixtures__' import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' -import { SkipStepSameTips, SkipStepSameTipsInfo } from '../SkipStepSameTips' +import { SkipStepSameTips } from '../SkipStepSameTips' import { RECOVERY_MAP } from '../../constants' import { SelectRecoveryOption } from '../SelectRecoveryOption' - -import { clickButtonLabeled } from '../../__tests__/util' - -import type { Mock } from 'vitest' +import { SkipStepInfo } from '/app/organisms/ErrorRecoveryFlows/shared' vi.mock('/app/molecules/Command') +vi.mock('/app/organisms/ErrorRecoveryFlows/shared') vi.mock('../SelectRecoveryOption') const render = (props: React.ComponentProps) => { @@ -22,14 +20,6 @@ const render = (props: React.ComponentProps) => { })[0] } -const renderSkipStepSameTipsInfo = ( - props: React.ComponentProps -) => { - return renderWithProviders(, { - i18nInstance: i18n, - })[0] -} - describe('SkipStepSameTips', () => { let props: React.ComponentProps @@ -41,6 +31,7 @@ describe('SkipStepSameTips', () => { vi.mocked(SelectRecoveryOption).mockReturnValue(
    MOCK_SELECT_RECOVERY_OPTION
    ) + vi.mocked(SkipStepInfo).mockReturnValue(
    MOCK_SKIP_STEP_INFO
    ) }) it(`renders SkipStepSameTipsInfo when step is ${RECOVERY_MAP.SKIP_STEP_WITH_SAME_TIPS.STEPS.SKIP}`, () => { @@ -52,7 +43,7 @@ describe('SkipStepSameTips', () => { }, } render(props) - screen.getByText('Skip to next step with same tips') + screen.getByText('MOCK_SKIP_STEP_INFO') }) it('renders SelectRecoveryOption as a fallback', () => { @@ -60,64 +51,10 @@ describe('SkipStepSameTips', () => { ...props, recoveryMap: { ...props.recoveryMap, - step: 'UNKNOWN_STEP', + step: 'UNKNOWN_STEP' as any, }, } render(props) screen.getByText('MOCK_SELECT_RECOVERY_OPTION') }) }) - -describe('SkipStepSameTipsInfo', () => { - let props: React.ComponentProps - let mockSetRobotInMotion: Mock - let mockSkipFailedCommand: Mock - - beforeEach(() => { - mockSetRobotInMotion = vi.fn(() => Promise.resolve()) - mockSkipFailedCommand = vi.fn(() => Promise.resolve()) - - props = { - ...mockRecoveryContentProps, - routeUpdateActions: { - setRobotInMotion: mockSetRobotInMotion, - } as any, - recoveryCommands: { - skipFailedCommand: mockSkipFailedCommand, - } as any, - } - }) - - afterEach(() => { - vi.resetAllMocks() - }) - - it('renders the component with the correct text', () => { - renderSkipStepSameTipsInfo(props) - screen.getByText('Skip to next step with same tips') - screen.queryByText( - 'The failed dispense step will not be completed. The run will continue from the next step.' - ) - screen.queryByText('Close the robot door before proceeding.') - }) - - it('calls the correct routeUpdateActions and recoveryCommands in the correct order when the primary button is clicked', async () => { - renderSkipStepSameTipsInfo(props) - clickButtonLabeled('Continue run now') - - await waitFor(() => { - expect(mockSetRobotInMotion).toHaveBeenCalledWith( - true, - RECOVERY_MAP.ROBOT_SKIPPING_STEP.ROUTE - ) - }) - - await waitFor(() => { - expect(mockSkipFailedCommand).toHaveBeenCalled() - }) - - expect(mockSetRobotInMotion.mock.invocationCallOrder[0]).toBeLessThan( - mockSkipFailedCommand.mock.invocationCallOrder[0] - ) - }) -}) diff --git a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/index.ts b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/index.ts index 154b315f66c..0e50d054523 100644 --- a/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/index.ts +++ b/app/src/organisms/ErrorRecoveryFlows/RecoveryOptions/index.ts @@ -8,3 +8,5 @@ export { RetrySameTips } from './RetrySameTips' export { SkipStepSameTips } from './SkipStepSameTips' export { SkipStepNewTips } from './SkipStepNewTips' export { IgnoreErrorSkipStep } from './IgnoreErrorSkipStep' +export { ManualMoveLwAndSkip } from './ManualMoveLwAndSkip' +export { ManualReplaceLwAndRetry } from './ManualReplaceLwAndRetry' diff --git a/app/src/organisms/ErrorRecoveryFlows/RunPausedSplash.tsx b/app/src/organisms/ErrorRecoveryFlows/RecoverySplash.tsx similarity index 65% rename from app/src/organisms/ErrorRecoveryFlows/RunPausedSplash.tsx rename to app/src/organisms/ErrorRecoveryFlows/RecoverySplash.tsx index 4e2642aac85..01cf1faa65b 100644 --- a/app/src/organisms/ErrorRecoveryFlows/RunPausedSplash.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/RecoverySplash.tsx @@ -1,36 +1,41 @@ -import * as React from 'react' +import { useEffect } from 'react' import styled, { css } from 'styled-components' import { useTranslation } from 'react-i18next' import { - Flex, - Icon, - JUSTIFY_CENTER, ALIGN_CENTER, - SPACING, COLORS, DIRECTION_COLUMN, - POSITION_ABSOLUTE, - TYPOGRAPHY, - OVERFLOW_WRAP_BREAK_WORD, DISPLAY_FLEX, + Flex, + Icon, + JUSTIFY_CENTER, JUSTIFY_SPACE_BETWEEN, - TEXT_ALIGN_CENTER, - StyledText, + OVERFLOW_WRAP_BREAK_WORD, + POSITION_ABSOLUTE, PrimaryButton, SecondaryButton, LargeButton, + SPACING, + StyledText, + TEXT_ALIGN_CENTER, + TYPOGRAPHY, + WARNING_TOAST, } from '@opentrons/components' +import { + RUN_STATUS_AWAITING_RECOVERY_BLOCKED_BY_OPEN_DOOR, + RUN_STATUS_AWAITING_RECOVERY_PAUSED, +} from '@opentrons/api-client' import { useErrorName } from './hooks' import { getErrorKind } from './utils' - import { BANNER_TEXT_CONTAINER_STYLE, BANNER_TEXT_CONTENT_STYLE, RECOVERY_MAP, } from './constants' import { RecoveryInterventionModal, StepInfo } from './shared' +import { useToaster } from '../ToasterOven' import type { RobotType } from '@opentrons/shared-data' import type { ErrorRecoveryFlowsProps } from '.' @@ -40,10 +45,9 @@ import type { useRetainedFailedCommandBySource, } from './hooks' import type { RecoveryRoute, RouteStep } from './types' - import type { UseRecoveryAnalyticsResult } from '/app/redux-resources/analytics' -export function useRunPausedSplash( +export function useRecoverySplash( isOnDevice: boolean, showERWizard: boolean ): boolean { @@ -56,18 +60,18 @@ export function useRunPausedSplash( } } -type RunPausedSplashProps = ERUtilsResults & { - isOnDevice: boolean - failedCommand: ReturnType - protocolAnalysis: ErrorRecoveryFlowsProps['protocolAnalysis'] - robotType: RobotType - robotName: string - toggleERWizAsActiveUser: UseRecoveryTakeoverResult['toggleERWizAsActiveUser'] - analytics: UseRecoveryAnalyticsResult -} -export function RunPausedSplash( - props: RunPausedSplashProps -): JSX.Element | null { +type RecoverySplashProps = ErrorRecoveryFlowsProps & + ERUtilsResults & { + isOnDevice: boolean + failedCommand: ReturnType + robotType: RobotType + robotName: string + /* Whether the app should resume any paused recovery state without user action. */ + resumePausedRecovery: boolean + toggleERWizAsActiveUser: UseRecoveryTakeoverResult['toggleERWizAsActiveUser'] + analytics: UseRecoveryAnalyticsResult + } +export function RecoverySplash(props: RecoverySplashProps): JSX.Element | null { const { isOnDevice, toggleERWizAsActiveUser, @@ -75,10 +79,14 @@ export function RunPausedSplash( failedCommand, analytics, robotName, + runStatus, + recoveryActionMutationUtils, + resumePausedRecovery, } = props const { t } = useTranslation('error_recovery') const errorKind = getErrorKind(failedCommand?.byRunRecord ?? null) const title = useErrorName(errorKind) + const { makeToast } = useToaster() const { proceedToRouteAndStep } = routeUpdateActions const { reportErrorEvent } = analytics @@ -91,18 +99,58 @@ export function RunPausedSplash( ) } + // Resume recovery when the run when the door is closed. + // The CTA/flow for handling a door open event within the ER wizard is different, and because this splash always renders + // behind the wizard, we want to ensure we only implicitly resume recovery when only viewing the splash from this app. + useEffect(() => { + if ( + runStatus === RUN_STATUS_AWAITING_RECOVERY_PAUSED && + resumePausedRecovery + ) { + recoveryActionMutationUtils.resumeRecovery() + } + }, [runStatus, resumePausedRecovery]) + const buildDoorOpenAlert = (): void => { + makeToast(t('close_door_to_resume') as string, WARNING_TOAST) + } + + const handleConditionalClick = (onClick: () => void): void => { + switch (runStatus) { + case RUN_STATUS_AWAITING_RECOVERY_BLOCKED_BY_OPEN_DOOR: + buildDoorOpenAlert() + break + default: + onClick() + break + } + } // Do not launch error recovery, but do utilize the wizard's cancel route. - const onCancelClick = (): Promise => { - return toggleERWizAsActiveUser(true, false).then(() => { - reportErrorEvent(failedCommand?.byRunRecord ?? null, 'cancel-run') - void proceedToRouteAndStep(RECOVERY_MAP.CANCEL_RUN.ROUTE) - }) + const onCancelClick = (): void => { + const onClick = (): void => { + void toggleERWizAsActiveUser(true, false).then(() => { + reportErrorEvent(failedCommand?.byRunRecord ?? null, 'cancel-run') + void proceedToRouteAndStep(RECOVERY_MAP.CANCEL_RUN.ROUTE) + }) + } + handleConditionalClick(onClick) + } + + const onLaunchERClick = (): void => { + const onClick = (): void => { + void toggleERWizAsActiveUser(true, true).then(() => { + reportErrorEvent(failedCommand?.byRunRecord ?? null, 'launch-recovery') + }) + } + handleConditionalClick(onClick) } - const onLaunchERClick = (): Promise => { - return toggleERWizAsActiveUser(true, true).then(() => { - reportErrorEvent(failedCommand?.byRunRecord ?? null, 'launch-recovery') - }) + const isDisabled = (): boolean => { + switch (runStatus) { + case RUN_STATUS_AWAITING_RECOVERY_BLOCKED_BY_OPEN_DOOR: + return true + default: + return false + } } // TODO(jh 05-22-24): The hardcoded Z-indexing is non-ideal but must be done to keep the splash page above @@ -150,17 +198,19 @@ export function RunPausedSplash( gridGap={SPACING.spacing16} >
    @@ -197,12 +247,20 @@ export function RunPausedSplash(
    - + {t('cancel_run')} {t('launch_recovery_mode')} @@ -248,3 +306,17 @@ const PRIMARY_BTN_STYLES_DESKTOP = css` background-color: ${COLORS.red55}; } ` +const BTN_STYLES_DISABLED_DESKTOP = css` + background-color: ${COLORS.grey30}; + color: ${COLORS.grey40}; + border: none; + box-shadow: none; + + &:active, + &:focus, + &:hover { + background-color: ${COLORS.grey30}; + color: ${COLORS.grey40}; + } + cursor: default; +` diff --git a/app/src/organisms/ErrorRecoveryFlows/RecoveryTakeover.tsx b/app/src/organisms/ErrorRecoveryFlows/RecoveryTakeover.tsx index f42201a7f8f..eccd4e972a7 100644 --- a/app/src/organisms/ErrorRecoveryFlows/RecoveryTakeover.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/RecoveryTakeover.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { useTranslation } from 'react-i18next' import { @@ -16,7 +16,7 @@ import { } from '@opentrons/api-client' import { useUpdateClientDataRecovery } from '/app/resources/client_data' -import { TakeoverModal } from '../TakeoverModal/TakeoverModal' +import { TakeoverModal } from '/app/organisms/TakeoverModal/TakeoverModal' import { RecoveryInterventionModal } from './shared' import type { @@ -99,7 +99,7 @@ export function RecoveryTakeoverODD({ clearClientData, isRunStatusAwaitingRecovery, }: RecoveryTakeoverProps): JSX.Element { - const [showConfirmation, setShowConfirmation] = React.useState(false) + const [showConfirmation, setShowConfirmation] = useState(false) return ( { @@ -144,17 +143,17 @@ describe('ErrorRecoveryFlows', () => { protocolAnalysis: {} as any, } vi.mocked(ErrorRecoveryWizard).mockReturnValue(
    MOCK WIZARD
    ) - vi.mocked(RunPausedSplash).mockReturnValue( -
    MOCK RUN PAUSED SPLASH
    - ) + vi.mocked(RecoverySplash).mockReturnValue(
    MOCK RUN PAUSED SPLASH
    ) vi.mocked(useERWizard).mockReturnValue({ hasLaunchedRecovery: true, toggleERWizard: () => Promise.resolve(), showERWizard: true, }) - vi.mocked(useRunPausedSplash).mockReturnValue(true) - vi.mocked(useERUtils).mockReturnValue({ routeUpdateActions: {} } as any) - vi.mocked(useShowDoorInfo).mockReturnValue(false) + vi.mocked(useRecoverySplash).mockReturnValue(true) + vi.mocked(useERUtils).mockReturnValue({ + routeUpdateActions: {}, + doorStatusUtils: { isDoorOpen: false, isProhibitedDoorOpen: false }, + } as any) vi.mocked(useRecoveryAnalytics).mockReturnValue({ reportErrorEvent: vi.fn(), } as any) @@ -174,13 +173,17 @@ describe('ErrorRecoveryFlows', () => { }) it('renders the wizard when isDoorOpen is true', () => { - vi.mocked(useShowDoorInfo).mockReturnValue(true) vi.mocked(useERWizard).mockReturnValue({ hasLaunchedRecovery: false, toggleERWizard: () => Promise.resolve(), showERWizard: false, }) + vi.mocked(useERUtils).mockReturnValue({ + routeUpdateActions: {}, + doorStatusUtils: { isDoorOpen: true, isProhibitedDoorOpen: true }, + } as any) + render(props) screen.getByText('MOCK WIZARD') }) @@ -191,7 +194,10 @@ describe('ErrorRecoveryFlows', () => { toggleERWizard: () => Promise.resolve(), showERWizard: false, }) - vi.mocked(useShowDoorInfo).mockReturnValue(false) + vi.mocked(useERUtils).mockReturnValue({ + routeUpdateActions: {}, + doorStatusUtils: { isDoorOpen: false, isProhibitedDoorOpen: false }, + } as any) render(props) expect(screen.queryByText('MOCK WIZARD')).not.toBeInTheDocument() @@ -203,7 +209,7 @@ describe('ErrorRecoveryFlows', () => { }) it('does not render the splash when showSplash is false', () => { - vi.mocked(useRunPausedSplash).mockReturnValue(false) + vi.mocked(useRecoverySplash).mockReturnValue(false) render(props) expect(screen.queryByText('MOCK RUN PAUSED SPLASH')).not.toBeInTheDocument() }) diff --git a/app/src/organisms/ErrorRecoveryFlows/__tests__/ErrorRecoveryWizard.test.tsx b/app/src/organisms/ErrorRecoveryFlows/__tests__/ErrorRecoveryWizard.test.tsx index 312c90cc7cc..ceaea85e58c 100644 --- a/app/src/organisms/ErrorRecoveryFlows/__tests__/ErrorRecoveryWizard.test.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/__tests__/ErrorRecoveryWizard.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { vi, describe, it, expect, beforeEach } from 'vitest' import { renderHook, act, screen, waitFor } from '@testing-library/react' @@ -23,6 +23,8 @@ import { SkipStepNewTips, SkipStepSameTips, IgnoreErrorSkipStep, + ManualReplaceLwAndRetry, + ManualMoveLwAndSkip, } from '../RecoveryOptions' import { RecoveryInProgress } from '../RecoveryInProgress' import { RecoveryError } from '../RecoveryError' @@ -134,7 +136,10 @@ describe('ErrorRecoveryComponent', () => { }) it('renders the recovery door modal when isDoorOpen is true', () => { - props = { ...props, isDoorOpen: true } + props = { + ...props, + doorStatusUtils: { isProhibitedDoorOpen: true, isDoorOpen: true }, + } renderRecoveryComponent(props) @@ -159,7 +164,7 @@ const renderRecoveryContent = ( describe('ErrorRecoveryContent', () => { const { OPTION_SELECTION, - RETRY_FAILED_COMMAND, + RETRY_STEP, ROBOT_CANCELING, ROBOT_RESUMING, ROBOT_IN_MOTION, @@ -168,13 +173,17 @@ describe('ErrorRecoveryContent', () => { ROBOT_SKIPPING_STEP, RETRY_NEW_TIPS, RETRY_SAME_TIPS, - FILL_MANUALLY_AND_SKIP, + MANUAL_FILL_AND_SKIP, SKIP_STEP_WITH_SAME_TIPS, SKIP_STEP_WITH_NEW_TIPS, IGNORE_AND_SKIP, CANCEL_RUN, DROP_TIP_FLOWS, ERROR_WHILE_RECOVERING, + ROBOT_DOOR_OPEN, + ROBOT_RELEASING_LABWARE, + MANUAL_REPLACE_AND_RETRY, + MANUAL_MOVE_AND_SKIP, } = RECOVERY_MAP let props: React.ComponentProps @@ -199,9 +208,16 @@ describe('ErrorRecoveryContent', () => {
    MOCK_SKIP_STEP_SAME_TIPS
    ) vi.mocked(SkipStepNewTips).mockReturnValue(
    MOCK_STEP_NEW_TIPS
    ) + vi.mocked(ManualReplaceLwAndRetry).mockReturnValue( +
    MOCK_REPLACE_LW_AND_RETRY
    + ) + vi.mocked(ManualMoveLwAndSkip).mockReturnValue( +
    MOCK_MOVE_LW_AND_SKIP
    + ) vi.mocked(IgnoreErrorSkipStep).mockReturnValue(
    MOCK_IGNORE_ERROR_SKIP_STEP
    ) + vi.mocked(RecoveryDoorOpen).mockReturnValue(
    MOCK_DOOR_OPEN
    ) }) it(`returns SelectRecoveryOption when the route is ${OPTION_SELECTION.ROUTE}`, () => { @@ -210,12 +226,12 @@ describe('ErrorRecoveryContent', () => { screen.getByText('MOCK_SELECT_RECOVERY_OPTION') }) - it(`returns ResumeRun when the route is ${RETRY_FAILED_COMMAND.ROUTE}`, () => { + it(`returns ResumeRun when the route is ${RETRY_STEP.ROUTE}`, () => { props = { ...props, recoveryMap: { ...props.recoveryMap, - route: RETRY_FAILED_COMMAND.ROUTE, + route: RETRY_STEP.ROUTE, }, } renderRecoveryContent(props) @@ -223,7 +239,7 @@ describe('ErrorRecoveryContent', () => { screen.getByText('MOCK_RESUME_RUN') }) - it(`returns ManageTips when the route is ${DROP_TIP_FLOWS.ROUTE}`, () => { + it(`returns appropriate view when the route is ${DROP_TIP_FLOWS.ROUTE}`, () => { props = { ...props, recoveryMap: { @@ -236,7 +252,7 @@ describe('ErrorRecoveryContent', () => { screen.getByText('MOCK_DROP_TIP_FLOWS') }) - it(`returns CancelRun when the route is ${CANCEL_RUN.ROUTE}`, () => { + it(`returns appropriate view when the route is ${CANCEL_RUN.ROUTE}`, () => { props = { ...props, recoveryMap: { @@ -249,7 +265,7 @@ describe('ErrorRecoveryContent', () => { screen.getByText('MOCK_CANCEL_RUN') }) - it(`returns RetryNewTips when the route is ${RETRY_NEW_TIPS.ROUTE}`, () => { + it(`returns appropriate view when the route is ${RETRY_NEW_TIPS.ROUTE}`, () => { props = { ...props, recoveryMap: { @@ -262,7 +278,7 @@ describe('ErrorRecoveryContent', () => { screen.getByText('MOCK_RETRY_NEW_TIPS') }) - it(`returns RetrySameTips when the route is ${RETRY_SAME_TIPS.ROUTE}`, () => { + it(`returns appropriate view when the route is ${RETRY_SAME_TIPS.ROUTE}`, () => { props = { ...props, recoveryMap: { @@ -275,12 +291,12 @@ describe('ErrorRecoveryContent', () => { screen.getByText('MOCK_RETRY_SAME_TIPS') }) - it(`returns RetrySameTips when the route is ${FILL_MANUALLY_AND_SKIP.ROUTE}`, () => { + it(`returns appropriate view when the route is ${MANUAL_FILL_AND_SKIP.ROUTE}`, () => { props = { ...props, recoveryMap: { ...props.recoveryMap, - route: FILL_MANUALLY_AND_SKIP.ROUTE, + route: MANUAL_FILL_AND_SKIP.ROUTE, }, } renderRecoveryContent(props) @@ -288,7 +304,7 @@ describe('ErrorRecoveryContent', () => { screen.getByText('MOCK_FILL_WELL_AND_SKIP') }) - it(`returns RetrySameTips when the route is ${SKIP_STEP_WITH_SAME_TIPS.ROUTE}`, () => { + it(`returns appropriate view when the route is ${SKIP_STEP_WITH_SAME_TIPS.ROUTE}`, () => { props = { ...props, recoveryMap: { @@ -301,7 +317,7 @@ describe('ErrorRecoveryContent', () => { screen.getByText('MOCK_SKIP_STEP_SAME_TIPS') }) - it(`returns RetrySameTips when the route is ${SKIP_STEP_WITH_NEW_TIPS.ROUTE}`, () => { + it(`returns appropriate view when the route is ${SKIP_STEP_WITH_NEW_TIPS.ROUTE}`, () => { props = { ...props, recoveryMap: { @@ -314,7 +330,7 @@ describe('ErrorRecoveryContent', () => { screen.getByText('MOCK_STEP_NEW_TIPS') }) - it(`returns RetrySameTips when the route is ${IGNORE_AND_SKIP.ROUTE}`, () => { + it(`returns appropriate view when the route is ${IGNORE_AND_SKIP.ROUTE}`, () => { props = { ...props, recoveryMap: { @@ -327,6 +343,32 @@ describe('ErrorRecoveryContent', () => { screen.getByText('MOCK_IGNORE_ERROR_SKIP_STEP') }) + it(`returns appropriate view when the route is ${MANUAL_MOVE_AND_SKIP.ROUTE}`, () => { + props = { + ...props, + recoveryMap: { + ...props.recoveryMap, + route: MANUAL_MOVE_AND_SKIP.ROUTE, + }, + } + renderRecoveryContent(props) + + screen.getByText('MOCK_MOVE_LW_AND_SKIP') + }) + + it(`returns appropriate view when the route is ${MANUAL_REPLACE_AND_RETRY.ROUTE}`, () => { + props = { + ...props, + recoveryMap: { + ...props.recoveryMap, + route: MANUAL_REPLACE_AND_RETRY.ROUTE, + }, + } + renderRecoveryContent(props) + + screen.getByText('MOCK_REPLACE_LW_AND_RETRY') + }) + it(`returns RecoveryError when the route is ${ERROR_WHILE_RECOVERING.ROUTE}`, () => { props = { ...props, @@ -417,26 +459,52 @@ describe('ErrorRecoveryContent', () => { screen.getByText('MOCK_IN_PROGRESS') }) + + it(`returns RecoveryInProgressModal when the route is ${ROBOT_RELEASING_LABWARE.ROUTE}`, () => { + props = { + ...props, + recoveryMap: { + ...props.recoveryMap, + route: ROBOT_RELEASING_LABWARE.ROUTE, + }, + } + renderRecoveryContent(props) + + screen.getByText('MOCK_IN_PROGRESS') + }) + + it(`returns RecoveryDoorOpen when the route is ${ROBOT_DOOR_OPEN.ROUTE}`, () => { + props = { + ...props, + recoveryMap: { + ...props.recoveryMap, + route: ROBOT_DOOR_OPEN.ROUTE, + }, + } + renderRecoveryContent(props) + + screen.getByText('MOCK_DOOR_OPEN') + }) }) describe('useInitialPipetteHome', () => { let mockZHomePipetteZAxes: Mock - let mockSetRobotInMotion: Mock + let mockhandleMotionRouting: Mock let mockRecoveryCommands: any let mockRouteUpdateActions: any beforeEach(() => { mockZHomePipetteZAxes = vi.fn() - mockSetRobotInMotion = vi.fn() + mockhandleMotionRouting = vi.fn() - mockSetRobotInMotion.mockResolvedValue(() => mockZHomePipetteZAxes()) - mockZHomePipetteZAxes.mockResolvedValue(() => mockSetRobotInMotion()) + mockhandleMotionRouting.mockResolvedValue(() => mockZHomePipetteZAxes()) + mockZHomePipetteZAxes.mockResolvedValue(() => mockhandleMotionRouting()) mockRecoveryCommands = { homePipetteZAxes: mockZHomePipetteZAxes, } as any mockRouteUpdateActions = { - setRobotInMotion: mockSetRobotInMotion, + handleMotionRouting: mockhandleMotionRouting, } as any }) @@ -449,7 +517,7 @@ describe('useInitialPipetteHome', () => { }) ) - expect(mockSetRobotInMotion).not.toHaveBeenCalled() + expect(mockhandleMotionRouting).not.toHaveBeenCalled() }) it('sets the motion screen properly and z-homes all pipettes only on the initial render of Error Recovery', async () => { @@ -462,26 +530,26 @@ describe('useInitialPipetteHome', () => { ) await waitFor(() => { - expect(mockSetRobotInMotion).toHaveBeenCalledWith(true) + expect(mockhandleMotionRouting).toHaveBeenCalledWith(true) }) await waitFor(() => { expect(mockZHomePipetteZAxes).toHaveBeenCalledTimes(1) }) await waitFor(() => { - expect(mockSetRobotInMotion).toHaveBeenCalledWith(false) + expect(mockhandleMotionRouting).toHaveBeenCalledWith(false) }) - expect(mockSetRobotInMotion.mock.invocationCallOrder[0]).toBeLessThan( + expect(mockhandleMotionRouting.mock.invocationCallOrder[0]).toBeLessThan( mockZHomePipetteZAxes.mock.invocationCallOrder[0] ) expect(mockZHomePipetteZAxes.mock.invocationCallOrder[0]).toBeLessThan( - mockSetRobotInMotion.mock.invocationCallOrder[1] + mockhandleMotionRouting.mock.invocationCallOrder[1] ) rerender() await waitFor(() => { - expect(mockSetRobotInMotion).toHaveBeenCalledTimes(2) + expect(mockhandleMotionRouting).toHaveBeenCalledTimes(2) }) await waitFor(() => { expect(mockZHomePipetteZAxes).toHaveBeenCalledTimes(1) diff --git a/app/src/organisms/ErrorRecoveryFlows/__tests__/RecoveryDoorOpen.test.tsx b/app/src/organisms/ErrorRecoveryFlows/__tests__/RecoveryDoorOpen.test.tsx index aed255ba9a1..a9fc92e1b84 100644 --- a/app/src/organisms/ErrorRecoveryFlows/__tests__/RecoveryDoorOpen.test.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/__tests__/RecoveryDoorOpen.test.tsx @@ -1,5 +1,6 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, beforeEach, vi, expect } from 'vitest' + import { screen } from '@testing-library/react' import { RUN_STATUS_AWAITING_RECOVERY_PAUSED } from '@opentrons/api-client' @@ -7,9 +8,9 @@ import { renderWithProviders } from '/app/__testing-utils__' import { mockRecoveryContentProps } from '../__fixtures__' import { i18n } from '/app/i18n' import { RecoveryDoorOpen } from '../RecoveryDoorOpen' +import { clickButtonLabeled } from './util' import type { Mock } from 'vitest' -import { clickButtonLabeled } from './util' const render = (props: React.ComponentProps) => { return renderWithProviders(, { @@ -20,9 +21,11 @@ const render = (props: React.ComponentProps) => { describe('RecoveryDoorOpen', () => { let props: React.ComponentProps let mockResumeRecovery: Mock + let mockProceedToRouteAndStep: Mock beforeEach(() => { - mockResumeRecovery = vi.fn() + mockResumeRecovery = vi.fn().mockResolvedValue(undefined) + mockProceedToRouteAndStep = vi.fn() props = { ...mockRecoveryContentProps, recoveryActionMutationUtils: { @@ -30,6 +33,10 @@ describe('RecoveryDoorOpen', () => { isResumeRecoveryLoading: false, }, runStatus: RUN_STATUS_AWAITING_RECOVERY_PAUSED, + routeUpdateActions: { + stashedMap: null, + proceedToRouteAndStep: mockProceedToRouteAndStep, + } as any, } }) @@ -50,4 +57,22 @@ describe('RecoveryDoorOpen', () => { expect(mockResumeRecovery).toHaveBeenCalledTimes(1) }) + + it('calls proceedToRouteAndStep after resumeRecovery if stashedMap is provided', async () => { + const stashedMap = { route: 'testRoute', step: 'testStep' } as any + props.routeUpdateActions.stashedMap = stashedMap + + render(props) + + clickButtonLabeled('Resume') + + await vi.waitFor(() => { + expect(mockResumeRecovery).toHaveBeenCalledTimes(1) + expect(mockProceedToRouteAndStep).toHaveBeenCalledTimes(1) + expect(mockProceedToRouteAndStep).toHaveBeenCalledWith( + stashedMap.route, + stashedMap.step + ) + }) + }) }) diff --git a/app/src/organisms/ErrorRecoveryFlows/__tests__/RecoveryError.test.tsx b/app/src/organisms/ErrorRecoveryFlows/__tests__/RecoveryError.test.tsx index 4e2a415d8ea..1394993746b 100644 --- a/app/src/organisms/ErrorRecoveryFlows/__tests__/RecoveryError.test.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/__tests__/RecoveryError.test.tsx @@ -1,5 +1,5 @@ /* eslint-disable testing-library/prefer-presence-queries */ -import * as React from 'react' +import type * as React from 'react' import { describe, it, vi, expect, beforeEach } from 'vitest' import { screen, fireEvent, waitFor } from '@testing-library/react' @@ -23,13 +23,13 @@ describe('RecoveryError', () => { let props: React.ComponentProps let proceedToRouteAndStepMock: Mock let getRecoverOptionCopyMock: Mock - let setRobotInMotionMock: Mock + let handleMotionRoutingMock: Mock let homePipetteZAxesMock: Mock beforeEach(() => { proceedToRouteAndStepMock = vi.fn() getRecoverOptionCopyMock = vi.fn() - setRobotInMotionMock = vi.fn().mockResolvedValue(undefined) + handleMotionRoutingMock = vi.fn().mockResolvedValue(undefined) homePipetteZAxesMock = vi.fn().mockResolvedValue(undefined) props = { @@ -37,7 +37,7 @@ describe('RecoveryError', () => { routeUpdateActions: { ...mockRecoveryContentProps.routeUpdateActions, proceedToRouteAndStep: proceedToRouteAndStepMock, - setRobotInMotion: setRobotInMotionMock, + handleMotionRouting: handleMotionRoutingMock, }, recoveryCommands: { ...mockRecoveryContentProps.recoveryCommands, @@ -151,14 +151,14 @@ describe('RecoveryError', () => { fireEvent.click(screen.queryAllByText('Back to menu')[0]) - expect(setRobotInMotionMock).toHaveBeenCalledWith(true) + expect(handleMotionRoutingMock).toHaveBeenCalledWith(true) await waitFor(() => { expect(homePipetteZAxesMock).toHaveBeenCalled() }) await waitFor(() => { - expect(setRobotInMotionMock).toHaveBeenCalledWith(false) + expect(handleMotionRoutingMock).toHaveBeenCalledWith(false) }) await waitFor(() => { @@ -167,17 +167,17 @@ describe('RecoveryError', () => { ) }) - expect(setRobotInMotionMock).toHaveBeenCalledTimes(2) + expect(handleMotionRoutingMock).toHaveBeenCalledTimes(2) expect(homePipetteZAxesMock).toHaveBeenCalledTimes(1) expect(proceedToRouteAndStepMock).toHaveBeenCalledTimes(1) - expect(setRobotInMotionMock.mock.invocationCallOrder[0]).toBeLessThan( + expect(handleMotionRoutingMock.mock.invocationCallOrder[0]).toBeLessThan( homePipetteZAxesMock.mock.invocationCallOrder[0] ) expect(homePipetteZAxesMock.mock.invocationCallOrder[0]).toBeLessThan( - setRobotInMotionMock.mock.invocationCallOrder[1] + handleMotionRoutingMock.mock.invocationCallOrder[1] ) - expect(setRobotInMotionMock.mock.invocationCallOrder[1]).toBeLessThan( + expect(handleMotionRoutingMock.mock.invocationCallOrder[1]).toBeLessThan( proceedToRouteAndStepMock.mock.invocationCallOrder[0] ) }) diff --git a/app/src/organisms/ErrorRecoveryFlows/__tests__/RecoveryInProgress.test.tsx b/app/src/organisms/ErrorRecoveryFlows/__tests__/RecoveryInProgress.test.tsx index 75f96a88dab..0eb61b8f5b0 100644 --- a/app/src/organisms/ErrorRecoveryFlows/__tests__/RecoveryInProgress.test.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/__tests__/RecoveryInProgress.test.tsx @@ -1,11 +1,11 @@ -import * as React from 'react' -import { beforeEach, describe, it } from 'vitest' -import { screen } from '@testing-library/react' +import type * as React from 'react' +import { beforeEach, describe, it, vi, afterEach, expect } from 'vitest' +import { act, renderHook, screen } from '@testing-library/react' import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' import { mockRecoveryContentProps } from '../__fixtures__' -import { RecoveryInProgress } from '../RecoveryInProgress' +import { RecoveryInProgress, useGripperRelease } from '../RecoveryInProgress' import { RECOVERY_MAP } from '../constants' const render = (props: React.ComponentProps) => { @@ -22,6 +22,7 @@ describe('RecoveryInProgress', () => { ROBOT_RETRYING_STEP, ROBOT_PICKING_UP_TIPS, ROBOT_SKIPPING_STEP, + ROBOT_RELEASING_LABWARE, } = RECOVERY_MAP let props: React.ComponentProps @@ -32,6 +33,13 @@ describe('RecoveryInProgress', () => { route: ROBOT_IN_MOTION.ROUTE, step: ROBOT_IN_MOTION.STEPS.IN_MOTION, }, + recoveryCommands: { + releaseGripperJaws: vi.fn(() => Promise.resolve()), + } as any, + routeUpdateActions: { + handleMotionRouting: vi.fn(() => Promise.resolve()), + proceedNextStep: vi.fn(() => Promise.resolve()), + } as any, } }) @@ -105,4 +113,159 @@ describe('RecoveryInProgress', () => { screen.getByText('Stand back, skipping to next step') }) + + it(`renders appropriate copy when the route is ${ROBOT_RELEASING_LABWARE.ROUTE}`, () => { + props = { + ...props, + recoveryMap: { + route: ROBOT_RELEASING_LABWARE.ROUTE, + step: ROBOT_RELEASING_LABWARE.STEPS.RELEASING_LABWARE, + }, + } + render(props) + + screen.getByText('Gripper will release labware in 5 seconds') + }) + + it('updates countdown for gripper release', () => { + vi.useFakeTimers() + props = { + ...props, + recoveryMap: { + route: ROBOT_RELEASING_LABWARE.ROUTE, + step: ROBOT_RELEASING_LABWARE.STEPS.RELEASING_LABWARE, + }, + } + render(props) + + screen.getByText('Gripper will release labware in 5 seconds') + + act(() => { + vi.advanceTimersByTime(1000) + }) + + screen.getByText('Gripper will release labware in 4 seconds') + + act(() => { + vi.advanceTimersByTime(4000) + }) + + screen.getByText('Gripper releasing labware') + }) +}) + +describe('useGripperRelease', () => { + const mockProps = { + recoveryMap: { + route: RECOVERY_MAP.ROBOT_RELEASING_LABWARE.ROUTE, + step: RECOVERY_MAP.ROBOT_RELEASING_LABWARE.STEPS.RELEASING_LABWARE, + }, + recoveryCommands: { + releaseGripperJaws: vi.fn().mockResolvedValue(undefined), + }, + routeUpdateActions: { + proceedToRouteAndStep: vi.fn(), + proceedNextStep: vi.fn(), + handleMotionRouting: vi.fn(), + stashedMap: { + route: RECOVERY_MAP.MANUAL_MOVE_AND_SKIP.ROUTE, + }, + }, + } as any + + beforeEach(() => { + vi.useFakeTimers() + }) + + afterEach(() => { + vi.useRealTimers() + }) + + it('counts down from 5 seconds', () => { + const { result } = renderHook(() => useGripperRelease(mockProps)) + + expect(result.current).toBe(5) + + act(() => { + vi.advanceTimersByTime(1000) + }) + + expect(result.current).toBe(4) + + act(() => { + vi.advanceTimersByTime(4000) + }) + + expect(result.current).toBe(0) + }) + + it('releases gripper jaws and proceeds to next step after countdown', async () => { + renderHook(() => useGripperRelease(mockProps)) + + act(() => { + vi.advanceTimersByTime(5000) + }) + + await vi.runAllTimersAsync() + + expect(mockProps.recoveryCommands.releaseGripperJaws).toHaveBeenCalled() + expect( + mockProps.routeUpdateActions.handleMotionRouting + ).toHaveBeenCalledWith(false) + expect( + mockProps.routeUpdateActions.proceedToRouteAndStep + ).toHaveBeenCalledWith( + RECOVERY_MAP.MANUAL_MOVE_AND_SKIP.ROUTE, + RECOVERY_MAP.MANUAL_MOVE_AND_SKIP.STEPS.MANUAL_MOVE + ) + }) + + it('handles MANUAL_REPLACE_AND_RETRY route', async () => { + const modifiedProps = { + ...mockProps, + routeUpdateActions: { + ...mockProps.routeUpdateActions, + stashedMap: { + route: RECOVERY_MAP.MANUAL_REPLACE_AND_RETRY.ROUTE, + }, + }, + } + + renderHook(() => useGripperRelease(modifiedProps)) + + act(() => { + vi.advanceTimersByTime(5000) + }) + + await vi.runAllTimersAsync() + + expect( + modifiedProps.routeUpdateActions.proceedToRouteAndStep + ).toHaveBeenCalledWith( + RECOVERY_MAP.MANUAL_REPLACE_AND_RETRY.ROUTE, + RECOVERY_MAP.MANUAL_REPLACE_AND_RETRY.STEPS.MANUAL_REPLACE + ) + }) + + it('calls proceedNextStep for unhandled routes', async () => { + const modifiedProps = { + ...mockProps, + routeUpdateActions: { + ...mockProps.routeUpdateActions, + stashedMap: { + route: 'UNHANDLED_ROUTE', + }, + }, + } + + renderHook(() => useGripperRelease(modifiedProps)) + + act(() => { + vi.advanceTimersByTime(5000) + }) + + await vi.runAllTimersAsync() + + expect(modifiedProps.routeUpdateActions.proceedNextStep).toHaveBeenCalled() + }) }) diff --git a/app/src/organisms/ErrorRecoveryFlows/__tests__/RunPausedSplash.test.tsx b/app/src/organisms/ErrorRecoveryFlows/__tests__/RecoverySplash.test.tsx similarity index 72% rename from app/src/organisms/ErrorRecoveryFlows/__tests__/RunPausedSplash.test.tsx rename to app/src/organisms/ErrorRecoveryFlows/__tests__/RecoverySplash.test.tsx index f1d5e17b616..da3ddc07629 100644 --- a/app/src/organisms/ErrorRecoveryFlows/__tests__/RunPausedSplash.test.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/__tests__/RecoverySplash.test.tsx @@ -1,22 +1,31 @@ -import * as React from 'react' +import type * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { fireEvent, screen, waitFor, renderHook } from '@testing-library/react' import { createStore } from 'redux' +import { QueryClient, QueryClientProvider } from 'react-query' +import { Provider } from 'react-redux' + +import { + RUN_STATUS_AWAITING_RECOVERY_BLOCKED_BY_OPEN_DOOR, + RUN_STATUS_AWAITING_RECOVERY, + RUN_STATUS_AWAITING_RECOVERY_PAUSED, +} from '@opentrons/api-client' import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' import { mockRecoveryContentProps } from '../__fixtures__' import { getIsOnDevice } from '/app/redux/config' -import { useRunPausedSplash, RunPausedSplash } from '../RunPausedSplash' +import { useRecoverySplash, RecoverySplash } from '../RecoverySplash' import { StepInfo } from '../shared' +import { useToaster } from '../../ToasterOven' +import { clickButtonLabeled } from './util' import type { Store } from 'redux' -import { QueryClient, QueryClientProvider } from 'react-query' -import { Provider } from 'react-redux' vi.mock('/app/redux/config') vi.mock('../shared') +vi.mock('../../ToasterOven') const store: Store = createStore(vi.fn(), {}) @@ -45,7 +54,7 @@ describe('useRunPausedSplash', () => { TEST_CASES.forEach(({ isOnDevice, showERWizard, expected }) => { it(`returns ${expected} when isOnDevice is ${isOnDevice} and showERWizard is ${showERWizard}`, () => { const { result } = renderHook( - () => useRunPausedSplash(isOnDevice, showERWizard), + () => useRecoverySplash(isOnDevice, showERWizard), { wrapper, } @@ -56,10 +65,10 @@ describe('useRunPausedSplash', () => { }) }) -const render = (props: React.ComponentProps) => { +const render = (props: React.ComponentProps) => { return renderWithProviders( - + , { i18nInstance: i18n, @@ -67,13 +76,15 @@ const render = (props: React.ComponentProps) => { ) } -describe('RunPausedSplash', () => { - let props: React.ComponentProps +describe('RecoverySplash', () => { + let props: React.ComponentProps const mockToggleERWiz = vi.fn(() => Promise.resolve()) const mockProceedToRouteAndStep = vi.fn() const mockRouteUpdateActions = { proceedToRouteAndStep: mockProceedToRouteAndStep, } as any + const mockMakeToast = vi.fn() + const mockResumeRecovery = vi.fn() beforeEach(() => { props = { @@ -81,9 +92,14 @@ describe('RunPausedSplash', () => { robotName: 'testRobot', toggleERWizAsActiveUser: mockToggleERWiz, routeUpdateActions: mockRouteUpdateActions, + recoveryActionMutationUtils: { + resumeRecovery: mockResumeRecovery, + } as any, + resumePausedRecovery: true, } vi.mocked(StepInfo).mockReturnValue(
    MOCK STEP INFO
    ) + vi.mocked(useToaster).mockReturnValue({ makeToast: mockMakeToast } as any) }) afterEach(() => { @@ -147,4 +163,25 @@ describe('RunPausedSplash', () => { expect(mockToggleERWiz).toHaveBeenCalledWith(true, true) }) }) + + it('should render a door open toast if the door is open', () => { + props = { + ...props, + runStatus: RUN_STATUS_AWAITING_RECOVERY_BLOCKED_BY_OPEN_DOOR, + } + + render(props) + + clickButtonLabeled('Launch Recovery Mode') + + expect(mockMakeToast).toHaveBeenCalled() + }) + + it(`should transition the run status from ${RUN_STATUS_AWAITING_RECOVERY_PAUSED} to ${RUN_STATUS_AWAITING_RECOVERY} when resumePausedRecovery is true`, () => { + props = { ...props, runStatus: RUN_STATUS_AWAITING_RECOVERY_PAUSED } + + render(props) + + expect(mockResumeRecovery).toHaveBeenCalled() + }) }) diff --git a/app/src/organisms/ErrorRecoveryFlows/__tests__/RecoveryTakeover.test.tsx b/app/src/organisms/ErrorRecoveryFlows/__tests__/RecoveryTakeover.test.tsx index 6a3fe495366..1eec7782713 100644 --- a/app/src/organisms/ErrorRecoveryFlows/__tests__/RecoveryTakeover.test.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/__tests__/RecoveryTakeover.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, vi, expect, beforeEach } from 'vitest' import { screen } from '@testing-library/react' diff --git a/app/src/organisms/ErrorRecoveryFlows/constants.ts b/app/src/organisms/ErrorRecoveryFlows/constants.ts index faadf0730aa..b32416220b9 100644 --- a/app/src/organisms/ErrorRecoveryFlows/constants.ts +++ b/app/src/organisms/ErrorRecoveryFlows/constants.ts @@ -10,13 +10,15 @@ import { TEXT_ALIGN_CENTER, } from '@opentrons/components' -import type { StepOrder } from './types' +import type { RecoveryRouteStepMetadata, StepOrder } from './types' // Server-defined error types. // (Values for the .error.errorType property of a run command.) export const DEFINED_ERROR_TYPES = { OVERPRESSURE: 'overpressure', LIQUID_NOT_FOUND: 'liquidNotFound', + TIP_PHYSICALLY_MISSING: 'tipPhysicallyMissing', + GRIPPER_MOVEMENT: 'gripperMovement', } // Client-defined error-handling flows. @@ -26,9 +28,10 @@ export const ERROR_KINDS = { OVERPRESSURE_PREPARE_TO_ASPIRATE: 'OVERPRESSURE_PREPARE_TO_ASPIRATE', OVERPRESSURE_WHILE_ASPIRATING: 'OVERPRESSURE_WHILE_ASPIRATING', OVERPRESSURE_WHILE_DISPENSING: 'OVERPRESSURE_WHILE_DISPENSING', + TIP_NOT_DETECTED: 'TIP_NOT_DETECTED', + GRIPPER_ERROR: 'GRIPPER_ERROR', } as const -// TODO(jh, 05-09-24): Refactor to a directed graph. EXEC-430. // TODO(jh, 06-14-24): Consolidate motion routes to a single route with several steps. // Valid recovery routes and steps. export const RECOVERY_MAP = { @@ -68,6 +71,12 @@ export const RECOVERY_MAP = { PICKING_UP_TIPS: 'picking-up-tips', }, }, + ROBOT_RELEASING_LABWARE: { + ROUTE: 'robot-releasing-labware', + STEPS: { + RELEASING_LABWARE: 'releasing-labware', + }, + }, ROBOT_RESUMING: { ROUTE: 'robot-resuming', STEPS: { @@ -86,6 +95,12 @@ export const RECOVERY_MAP = { SKIPPING: 'skipping', }, }, + ROBOT_DOOR_OPEN: { + ROUTE: 'door', + STEPS: { + DOOR_OPEN: 'door-open', + }, + }, // Recovery options below OPTION_SELECTION: { ROUTE: 'option-selection', @@ -99,13 +114,34 @@ export const RECOVERY_MAP = { ROUTE: 'ignore-and-skip-step', STEPS: { SELECT_IGNORE_KIND: 'select-ignore' }, }, - FILL_MANUALLY_AND_SKIP: { - ROUTE: 'manually-fill-well-and-skip', - STEPS: { MANUALLY_FILL: 'manually-fill', SKIP: 'skip' }, + MANUAL_FILL_AND_SKIP: { + ROUTE: 'manual-fill-well-and-skip', + STEPS: { + MANUAL_FILL: 'manual-fill', + SKIP: 'skip', + }, + }, + MANUAL_MOVE_AND_SKIP: { + ROUTE: 'manual-move-labware-and-skip', + STEPS: { + GRIPPER_HOLDING_LABWARE: 'gripper-holding-labware', + GRIPPER_RELEASE_LABWARE: 'gripper-release-labware', + MANUAL_MOVE: 'manual-move', + SKIP: 'skip', + }, + }, + MANUAL_REPLACE_AND_RETRY: { + ROUTE: 'manual-replace-and-retry', + STEPS: { + GRIPPER_HOLDING_LABWARE: 'gripper-holding-labware', + GRIPPER_RELEASE_LABWARE: 'gripper-release-labware', + MANUAL_REPLACE: 'manual-replace', + RETRY: 'retry', + }, }, REFILL_AND_RESUME: { ROUTE: 'refill-and-resume', STEPS: {} }, - RETRY_FAILED_COMMAND: { - ROUTE: 'retry-failed-command', + RETRY_STEP: { + ROUTE: 'retry-step', STEPS: { CONFIRM_RETRY: 'confirm-retry' }, }, RETRY_NEW_TIPS: { @@ -142,13 +178,15 @@ export const RECOVERY_MAP = { const { OPTION_SELECTION, - RETRY_FAILED_COMMAND, + RETRY_STEP, ROBOT_CANCELING, ROBOT_PICKING_UP_TIPS, + ROBOT_RELEASING_LABWARE, ROBOT_RESUMING, ROBOT_IN_MOTION, ROBOT_RETRYING_STEP, ROBOT_SKIPPING_STEP, + ROBOT_DOOR_OPEN, DROP_TIP_FLOWS, REFILL_AND_RESUME, IGNORE_AND_SKIP, @@ -156,7 +194,9 @@ const { RETRY_NEW_TIPS, RETRY_SAME_TIPS, ERROR_WHILE_RECOVERING, - FILL_MANUALLY_AND_SKIP, + MANUAL_FILL_AND_SKIP, + MANUAL_MOVE_AND_SKIP, + MANUAL_REPLACE_AND_RETRY, SKIP_STEP_WITH_NEW_TIPS, SKIP_STEP_WITH_SAME_TIPS, } = RECOVERY_MAP @@ -164,7 +204,7 @@ const { // The deterministic ordering of steps for a given route. export const STEP_ORDER: StepOrder = { [OPTION_SELECTION.ROUTE]: [OPTION_SELECTION.STEPS.SELECT], - [RETRY_FAILED_COMMAND.ROUTE]: [RETRY_FAILED_COMMAND.STEPS.CONFIRM_RETRY], + [RETRY_STEP.ROUTE]: [RETRY_STEP.STEPS.CONFIRM_RETRY], [RETRY_NEW_TIPS.ROUTE]: [ RETRY_NEW_TIPS.STEPS.DROP_TIPS, RETRY_NEW_TIPS.STEPS.REPLACE_TIPS, @@ -182,9 +222,13 @@ export const STEP_ORDER: StepOrder = { [ROBOT_CANCELING.ROUTE]: [ROBOT_CANCELING.STEPS.CANCELING], [ROBOT_IN_MOTION.ROUTE]: [ROBOT_IN_MOTION.STEPS.IN_MOTION], [ROBOT_PICKING_UP_TIPS.ROUTE]: [ROBOT_PICKING_UP_TIPS.STEPS.PICKING_UP_TIPS], + [ROBOT_RELEASING_LABWARE.ROUTE]: [ + ROBOT_RELEASING_LABWARE.STEPS.RELEASING_LABWARE, + ], [ROBOT_RESUMING.ROUTE]: [ROBOT_RESUMING.STEPS.RESUMING], [ROBOT_RETRYING_STEP.ROUTE]: [ROBOT_RETRYING_STEP.STEPS.RETRYING], [ROBOT_SKIPPING_STEP.ROUTE]: [ROBOT_SKIPPING_STEP.STEPS.SKIPPING], + [ROBOT_DOOR_OPEN.ROUTE]: [ROBOT_DOOR_OPEN.STEPS.DOOR_OPEN], [DROP_TIP_FLOWS.ROUTE]: [ DROP_TIP_FLOWS.STEPS.BEGIN_REMOVAL, DROP_TIP_FLOWS.STEPS.BEFORE_BEGINNING, @@ -194,9 +238,21 @@ export const STEP_ORDER: StepOrder = { [REFILL_AND_RESUME.ROUTE]: [], [IGNORE_AND_SKIP.ROUTE]: [IGNORE_AND_SKIP.STEPS.SELECT_IGNORE_KIND], [CANCEL_RUN.ROUTE]: [CANCEL_RUN.STEPS.CONFIRM_CANCEL], - [FILL_MANUALLY_AND_SKIP.ROUTE]: [ - FILL_MANUALLY_AND_SKIP.STEPS.MANUALLY_FILL, - FILL_MANUALLY_AND_SKIP.STEPS.SKIP, + [MANUAL_FILL_AND_SKIP.ROUTE]: [ + MANUAL_FILL_AND_SKIP.STEPS.MANUAL_FILL, + MANUAL_FILL_AND_SKIP.STEPS.SKIP, + ], + [MANUAL_MOVE_AND_SKIP.ROUTE]: [ + MANUAL_MOVE_AND_SKIP.STEPS.GRIPPER_HOLDING_LABWARE, + MANUAL_MOVE_AND_SKIP.STEPS.GRIPPER_RELEASE_LABWARE, + MANUAL_MOVE_AND_SKIP.STEPS.MANUAL_MOVE, + MANUAL_MOVE_AND_SKIP.STEPS.SKIP, + ], + [MANUAL_REPLACE_AND_RETRY.ROUTE]: [ + MANUAL_REPLACE_AND_RETRY.STEPS.GRIPPER_HOLDING_LABWARE, + MANUAL_REPLACE_AND_RETRY.STEPS.GRIPPER_RELEASE_LABWARE, + MANUAL_REPLACE_AND_RETRY.STEPS.MANUAL_REPLACE, + MANUAL_REPLACE_AND_RETRY.STEPS.RETRY, ], [ERROR_WHILE_RECOVERING.ROUTE]: [ ERROR_WHILE_RECOVERING.STEPS.RECOVERY_ACTION_FAILED, @@ -206,6 +262,131 @@ export const STEP_ORDER: StepOrder = { ], } +// Contains metadata specific to all routes and/or steps. +export const RECOVERY_MAP_METADATA: RecoveryRouteStepMetadata = { + [DROP_TIP_FLOWS.ROUTE]: { + [DROP_TIP_FLOWS.STEPS.BEGIN_REMOVAL]: { allowDoorOpen: false }, + [DROP_TIP_FLOWS.STEPS.BEFORE_BEGINNING]: { + allowDoorOpen: false, + }, + [DROP_TIP_FLOWS.STEPS.CHOOSE_TIP_DROP]: { + allowDoorOpen: false, + }, + [DROP_TIP_FLOWS.STEPS.CHOOSE_BLOWOUT]: { + allowDoorOpen: false, + }, + }, + [ERROR_WHILE_RECOVERING.ROUTE]: { + [ERROR_WHILE_RECOVERING.STEPS.RECOVERY_ACTION_FAILED]: { + allowDoorOpen: false, + }, + [ERROR_WHILE_RECOVERING.STEPS.DROP_TIP_BLOWOUT_FAILED]: { + allowDoorOpen: false, + }, + [ERROR_WHILE_RECOVERING.STEPS.DROP_TIP_TIP_DROP_FAILED]: { + allowDoorOpen: false, + }, + [ERROR_WHILE_RECOVERING.STEPS.DROP_TIP_GENERAL_ERROR]: { + allowDoorOpen: false, + }, + }, + [ROBOT_CANCELING.ROUTE]: { + [ROBOT_CANCELING.STEPS.CANCELING]: { allowDoorOpen: false }, + }, + [ROBOT_IN_MOTION.ROUTE]: { + [ROBOT_IN_MOTION.STEPS.IN_MOTION]: { allowDoorOpen: false }, + }, + [ROBOT_PICKING_UP_TIPS.ROUTE]: { + [ROBOT_PICKING_UP_TIPS.STEPS.PICKING_UP_TIPS]: { + allowDoorOpen: false, + }, + }, + [ROBOT_RELEASING_LABWARE.ROUTE]: { + [ROBOT_RELEASING_LABWARE.STEPS.RELEASING_LABWARE]: { allowDoorOpen: false }, + }, + [ROBOT_RESUMING.ROUTE]: { + [ROBOT_RESUMING.STEPS.RESUMING]: { allowDoorOpen: false }, + }, + [ROBOT_RETRYING_STEP.ROUTE]: { + [ROBOT_RETRYING_STEP.STEPS.RETRYING]: { allowDoorOpen: false }, + }, + [ROBOT_SKIPPING_STEP.ROUTE]: { + [ROBOT_SKIPPING_STEP.STEPS.SKIPPING]: { allowDoorOpen: false }, + }, + [ROBOT_DOOR_OPEN.ROUTE]: { + [ROBOT_DOOR_OPEN.STEPS.DOOR_OPEN]: { allowDoorOpen: false }, + }, + [OPTION_SELECTION.ROUTE]: { + [OPTION_SELECTION.STEPS.SELECT]: { allowDoorOpen: false }, + }, + [CANCEL_RUN.ROUTE]: { + [CANCEL_RUN.STEPS.CONFIRM_CANCEL]: { allowDoorOpen: false }, + }, + [IGNORE_AND_SKIP.ROUTE]: { + [IGNORE_AND_SKIP.STEPS.SELECT_IGNORE_KIND]: { + allowDoorOpen: false, + }, + }, + [MANUAL_FILL_AND_SKIP.ROUTE]: { + [MANUAL_FILL_AND_SKIP.STEPS.MANUAL_FILL]: { + allowDoorOpen: true, + }, + [MANUAL_FILL_AND_SKIP.STEPS.SKIP]: { allowDoorOpen: true }, + }, + [MANUAL_MOVE_AND_SKIP.ROUTE]: { + [MANUAL_MOVE_AND_SKIP.STEPS.GRIPPER_HOLDING_LABWARE]: { + allowDoorOpen: true, + }, + [MANUAL_MOVE_AND_SKIP.STEPS.GRIPPER_RELEASE_LABWARE]: { + allowDoorOpen: true, + }, + [MANUAL_MOVE_AND_SKIP.STEPS.MANUAL_MOVE]: { allowDoorOpen: true }, + [MANUAL_MOVE_AND_SKIP.STEPS.SKIP]: { allowDoorOpen: true }, + }, + [MANUAL_REPLACE_AND_RETRY.ROUTE]: { + [MANUAL_REPLACE_AND_RETRY.STEPS.GRIPPER_HOLDING_LABWARE]: { + allowDoorOpen: true, + }, + [MANUAL_REPLACE_AND_RETRY.STEPS.GRIPPER_RELEASE_LABWARE]: { + allowDoorOpen: true, + }, + [MANUAL_REPLACE_AND_RETRY.STEPS.MANUAL_REPLACE]: { allowDoorOpen: true }, + [MANUAL_REPLACE_AND_RETRY.STEPS.RETRY]: { allowDoorOpen: true }, + }, + [REFILL_AND_RESUME.ROUTE]: {}, + [RETRY_STEP.ROUTE]: { + [RETRY_STEP.STEPS.CONFIRM_RETRY]: { + allowDoorOpen: false, + }, + }, + [RETRY_NEW_TIPS.ROUTE]: { + [RETRY_NEW_TIPS.STEPS.DROP_TIPS]: { allowDoorOpen: false }, + [RETRY_NEW_TIPS.STEPS.REPLACE_TIPS]: { allowDoorOpen: true }, + [RETRY_NEW_TIPS.STEPS.SELECT_TIPS]: { allowDoorOpen: true }, + [RETRY_NEW_TIPS.STEPS.RETRY]: { allowDoorOpen: true }, + }, + [RETRY_SAME_TIPS.ROUTE]: { + [RETRY_SAME_TIPS.STEPS.RETRY]: { allowDoorOpen: true }, + }, + [SKIP_STEP_WITH_NEW_TIPS.ROUTE]: { + [SKIP_STEP_WITH_NEW_TIPS.STEPS.DROP_TIPS]: { + allowDoorOpen: false, + }, + [SKIP_STEP_WITH_NEW_TIPS.STEPS.REPLACE_TIPS]: { + allowDoorOpen: true, + }, + [SKIP_STEP_WITH_NEW_TIPS.STEPS.SELECT_TIPS]: { + allowDoorOpen: true, + }, + [SKIP_STEP_WITH_NEW_TIPS.STEPS.SKIP]: { allowDoorOpen: true }, + }, + [SKIP_STEP_WITH_SAME_TIPS.ROUTE]: { + [SKIP_STEP_WITH_SAME_TIPS.STEPS.SKIP]: { + allowDoorOpen: true, + }, + }, +} as const + export const INVALID = 'INVALID' as const /** diff --git a/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useCleanupRecoveryState.test.ts b/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useCleanupRecoveryState.test.ts new file mode 100644 index 00000000000..f7ba3682799 --- /dev/null +++ b/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useCleanupRecoveryState.test.ts @@ -0,0 +1,78 @@ +import { describe, it, expect, vi, beforeEach } from 'vitest' +import { renderHook } from '@testing-library/react' + +import { useCleanupRecoveryState } from '../useCleanupRecoveryState' +import { RECOVERY_MAP } from '../../constants' + +describe('useCleanupRecoveryState', () => { + let props: Parameters[0] + let mockSetRM: ReturnType + + beforeEach(() => { + mockSetRM = vi.fn() + props = { + isTakeover: false, + stashedMapRef: { + current: { + route: RECOVERY_MAP.MANUAL_FILL_AND_SKIP.ROUTE, + step: RECOVERY_MAP.MANUAL_FILL_AND_SKIP.STEPS.SKIP, + }, + }, + setRM: mockSetRM, + } + }) + + it('does not modify state when isTakeover is false', () => { + renderHook(() => useCleanupRecoveryState(props)) + + expect(props.stashedMapRef.current).toEqual({ + route: RECOVERY_MAP.MANUAL_FILL_AND_SKIP.ROUTE, + step: RECOVERY_MAP.MANUAL_FILL_AND_SKIP.STEPS.SKIP, + }) + expect(mockSetRM).not.toHaveBeenCalled() + }) + + it('resets state when isTakeover is true', () => { + props.isTakeover = true + renderHook(() => useCleanupRecoveryState(props)) + + expect(props.stashedMapRef.current).toBeNull() + expect(mockSetRM).toHaveBeenCalledWith({ + route: RECOVERY_MAP.OPTION_SELECTION.ROUTE, + step: RECOVERY_MAP.OPTION_SELECTION.STEPS.SELECT, + }) + }) + + it('handles case when stashedMapRef.current is already null', () => { + props.isTakeover = true + props.stashedMapRef.current = null + renderHook(() => useCleanupRecoveryState(props)) + + expect(props.stashedMapRef.current).toBeNull() + expect(mockSetRM).toHaveBeenCalledWith({ + route: RECOVERY_MAP.OPTION_SELECTION.ROUTE, + step: RECOVERY_MAP.OPTION_SELECTION.STEPS.SELECT, + }) + }) + + it('does not reset state when isTakeover changes from true to false', () => { + const { rerender } = renderHook( + ({ isTakeover }) => useCleanupRecoveryState({ ...props, isTakeover }), + { initialProps: { isTakeover: true } } + ) + + mockSetRM.mockClear() + props.stashedMapRef.current = { + route: RECOVERY_MAP.MANUAL_FILL_AND_SKIP.ROUTE, + step: RECOVERY_MAP.MANUAL_FILL_AND_SKIP.STEPS.SKIP, + } + + rerender({ isTakeover: false }) + + expect(props.stashedMapRef.current).toEqual({ + route: RECOVERY_MAP.MANUAL_FILL_AND_SKIP.ROUTE, + step: RECOVERY_MAP.MANUAL_FILL_AND_SKIP.STEPS.SKIP, + }) + expect(mockSetRM).not.toHaveBeenCalled() + }) +}) diff --git a/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useCurrentlyRecoveringFrom.test.ts b/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useCurrentlyRecoveringFrom.test.ts index 8213d14fec8..4b177972851 100644 --- a/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useCurrentlyRecoveringFrom.test.ts +++ b/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useCurrentlyRecoveringFrom.test.ts @@ -1,5 +1,6 @@ -import { vi, describe, it, expect } from 'vitest' +import { vi, describe, it, expect, beforeEach } from 'vitest' import { renderHook } from '@testing-library/react' +import { useQueryClient } from 'react-query' import { useCommandQuery } from '@opentrons/react-api-client' import { @@ -10,13 +11,25 @@ import { import { useNotifyAllCommandsQuery } from '/app/resources/runs' import { useCurrentlyRecoveringFrom } from '../useCurrentlyRecoveringFrom' +import type { Mock } from 'vitest' + vi.mock('@opentrons/react-api-client') vi.mock('/app/resources/runs') +vi.mock('react-query') const MOCK_RUN_ID = 'runId' const MOCK_COMMAND_ID = 'commandId' describe('useCurrentlyRecoveringFrom', () => { + let mockInvalidateQueries: Mock + + beforeEach(() => { + mockInvalidateQueries = vi.fn() + vi.mocked(useQueryClient).mockReturnValue({ + invalidateQueries: mockInvalidateQueries, + } as any) + }) + it('disables all queries if the run is not awaiting-recovery', () => { vi.mocked(useNotifyAllCommandsQuery).mockReturnValue({ data: { @@ -97,4 +110,12 @@ describe('useCurrentlyRecoveringFrom', () => { ) expect(result.current).toStrictEqual('mockCommandDetails') }) + + it('calls invalidateQueries when the run enters recovery mode', () => { + renderHook(() => + useCurrentlyRecoveringFrom(MOCK_RUN_ID, RUN_STATUS_AWAITING_RECOVERY) + ) + + expect(mockInvalidateQueries).toHaveBeenCalled() + }) }) diff --git a/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useErrorName.test.tsx b/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useErrorName.test.tsx index 9ed6a072da4..4de37a3a6f5 100644 --- a/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useErrorName.test.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useErrorName.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { describe, it } from 'vitest' import { renderHook, render, screen } from '@testing-library/react' diff --git a/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useRecoveryActionMutation.test.ts b/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useRecoveryActionMutation.test.ts index 029f7d5e239..31ba5873ac2 100644 --- a/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useRecoveryActionMutation.test.ts +++ b/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useRecoveryActionMutation.test.ts @@ -1,55 +1,95 @@ import { describe, it, expect, vi, beforeEach } from 'vitest' import { renderHook } from '@testing-library/react' -import { useRunActionMutations } from '@opentrons/react-api-client' +import { usePlayRunMutation } from '@opentrons/react-api-client' import { useRecoveryActionMutation } from '../useRecoveryActionMutation' +import { RECOVERY_MAP } from '../../constants' import type { Mock } from 'vitest' vi.mock('@opentrons/react-api-client', () => ({ - useRunActionMutations: vi.fn(), + usePlayRunMutation: vi.fn(), })) describe('useRecoveryActionMutation', () => { const mockRunId = 'MOCK_ID' - let mockPlayRun: Mock - let mockIsPlayRunActionLoading: boolean + let mockMutateAsync: Mock + let mockIsLoading: boolean + let mockProceedToRouteAndStep: Mock beforeEach(() => { - mockPlayRun = vi.fn() - mockIsPlayRunActionLoading = false + mockMutateAsync = vi.fn() + mockIsLoading = false + mockProceedToRouteAndStep = vi.fn().mockResolvedValue(undefined) - vi.mocked(useRunActionMutations).mockReturnValue({ - playRun: mockPlayRun, - isPlayRunActionLoading: mockIsPlayRunActionLoading, + vi.mocked(usePlayRunMutation).mockReturnValue({ + mutateAsync: mockMutateAsync, + isLoading: mockIsLoading, } as any) }) it('should return resumeRecovery and isResumeRecoveryLoading', () => { - const { result } = renderHook(() => useRecoveryActionMutation(mockRunId)) + const { result } = renderHook(() => + useRecoveryActionMutation(mockRunId, { + proceedToRouteAndStep: mockProceedToRouteAndStep, + } as any) + ) - expect(result.current).toEqual({ - resumeRecovery: mockPlayRun, - isResumeRecoveryLoading: mockIsPlayRunActionLoading, - }) + expect(result.current).toHaveProperty('resumeRecovery') + expect(result.current).toHaveProperty('isResumeRecoveryLoading') + expect(result.current.isResumeRecoveryLoading).toBe(false) }) it('should return updated isResumeRecoveryLoading when it changes', () => { const { result, rerender } = renderHook(() => - useRecoveryActionMutation(mockRunId) + useRecoveryActionMutation(mockRunId, { + proceedToRouteAndStep: mockProceedToRouteAndStep, + } as any) ) expect(result.current.isResumeRecoveryLoading).toBe(false) - mockIsPlayRunActionLoading = true - vi.mocked(useRunActionMutations).mockReturnValue({ - playRun: mockPlayRun, - isPlayRunActionLoading: mockIsPlayRunActionLoading, + mockIsLoading = true + vi.mocked(usePlayRunMutation).mockReturnValue({ + mutateAsync: mockMutateAsync, + isLoading: mockIsLoading, } as any) rerender() expect(result.current.isResumeRecoveryLoading).toBe(true) }) + + it('should call mutateAsync with runId when resumeRecovery is called', async () => { + const { result } = renderHook(() => + useRecoveryActionMutation(mockRunId, { + proceedToRouteAndStep: mockProceedToRouteAndStep, + } as any) + ) + + mockMutateAsync.mockResolvedValue('MOCK_RESULT') + + await result.current.resumeRecovery() + + expect(mockMutateAsync).toHaveBeenCalledWith(mockRunId) + }) + + it('should handle error and proceed to error route when resumeRecovery fails', async () => { + const { result } = renderHook(() => + useRecoveryActionMutation(mockRunId, { + proceedToRouteAndStep: mockProceedToRouteAndStep, + } as any) + ) + + mockMutateAsync.mockRejectedValue(new Error('MOCK_ERROR')) + + await expect(result.current.resumeRecovery()).rejects.toThrow( + 'Could not resume recovery: Error: MOCK_ERROR' + ) + + expect(mockProceedToRouteAndStep).toHaveBeenCalledWith( + RECOVERY_MAP.ERROR_WHILE_RECOVERING.ROUTE + ) + }) }) diff --git a/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useRecoveryCommands.test.ts b/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useRecoveryCommands.test.ts index c1f9eb9b667..8df2c3ec86b 100644 --- a/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useRecoveryCommands.test.ts +++ b/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useRecoveryCommands.test.ts @@ -249,6 +249,19 @@ describe('useRecoveryCommands', () => { ) }) + it('should call releaseGripperJaws and resolve the promise', async () => { + const { result } = renderHook(() => useRecoveryCommands(props)) + + const consoleLogSpy = vi.spyOn(console, 'log') + + await act(async () => { + await result.current.releaseGripperJaws() + }) + + expect(consoleLogSpy).toHaveBeenCalledWith('PLACEHOLDER RELEASE THE JAWS') + consoleLogSpy.mockRestore() + }) + it('should call skipFailedCommand and show success toast on success', async () => { const { result } = renderHook(() => useRecoveryCommands(props)) diff --git a/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useRecoveryOptionCopy.test.tsx b/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useRecoveryOptionCopy.test.tsx index 0a0b29e405d..90a78262e6c 100644 --- a/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useRecoveryOptionCopy.test.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useRecoveryOptionCopy.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it } from 'vitest' import { screen } from '@testing-library/react' @@ -27,8 +27,8 @@ const render = (props: React.ComponentProps) => { } describe('useRecoveryOptionCopy', () => { - it(`renders the correct copy for ${RECOVERY_MAP.RETRY_FAILED_COMMAND.ROUTE}`, () => { - render({ route: RECOVERY_MAP.RETRY_FAILED_COMMAND.ROUTE }) + it(`renders the correct copy for ${RECOVERY_MAP.RETRY_STEP.ROUTE}`, () => { + render({ route: RECOVERY_MAP.RETRY_STEP.ROUTE }) screen.getByText('Retry step') }) @@ -51,8 +51,8 @@ describe('useRecoveryOptionCopy', () => { screen.getByText('Retry with same tips') }) - it(`renders the correct copy for ${RECOVERY_MAP.FILL_MANUALLY_AND_SKIP.ROUTE}`, () => { - render({ route: RECOVERY_MAP.FILL_MANUALLY_AND_SKIP.ROUTE }) + it(`renders the correct copy for ${RECOVERY_MAP.MANUAL_FILL_AND_SKIP.ROUTE}`, () => { + render({ route: RECOVERY_MAP.MANUAL_FILL_AND_SKIP.ROUTE }) screen.getByText('Manually fill well and skip to next step') }) @@ -75,6 +75,18 @@ describe('useRecoveryOptionCopy', () => { screen.getByText('Skip to next step with same tips') }) + it(`renders the correct copy for ${RECOVERY_MAP.MANUAL_MOVE_AND_SKIP.ROUTE}`, () => { + render({ route: RECOVERY_MAP.MANUAL_MOVE_AND_SKIP.ROUTE }) + + screen.getByText('Manually move labware and skip to next step') + }) + + it(`renders the correct copy for ${RECOVERY_MAP.MANUAL_REPLACE_AND_RETRY.ROUTE}`, () => { + render({ route: RECOVERY_MAP.MANUAL_REPLACE_AND_RETRY.ROUTE }) + + screen.getByText('Manually replace labware on deck and retry step') + }) + it('renders "Unknown action" for an unknown recovery option', () => { render({ route: 'unknown_route' as RecoveryRoute }) diff --git a/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useRecoveryToasts.test.tsx b/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useRecoveryToasts.test.tsx index 8bb0f19b0ce..08c51478491 100644 --- a/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useRecoveryToasts.test.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useRecoveryToasts.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { vi, describe, it, expect, beforeEach } from 'vitest' import { I18nextProvider } from 'react-i18next' import { i18n } from '/app/i18n' @@ -23,7 +23,8 @@ vi.mock('../../../ToasterOven') vi.mock('/app/molecules/Command') const TEST_COMMAND = 'test command' -const TC_COMMAND = 'tc command cycle some more text' +const TC_COMMAND = + 'tc starting profile of 1231231 element steps composed of some extra text bla bla' let mockMakeToast: Mock @@ -45,6 +46,7 @@ describe('useRecoveryToasts', () => { mockMakeToast = vi.fn() vi.mocked(useToaster).mockReturnValue({ makeToast: mockMakeToast } as any) vi.mocked(useCommandTextString).mockReturnValue({ + kind: 'generic', commandText: TEST_COMMAND, }) }) @@ -69,6 +71,7 @@ describe('useRecoveryToasts', () => { it('should make toast with correct parameters for desktop', () => { vi.mocked(useCommandTextString).mockReturnValue({ + kind: 'generic', commandText: TEST_COMMAND, }) @@ -80,8 +83,8 @@ describe('useRecoveryToasts', () => { ) vi.mocked(useCommandTextString).mockReturnValue({ + kind: 'generic', commandText: TEST_COMMAND, - stepTexts: undefined, }) result.current.makeSuccessToast() @@ -120,8 +123,8 @@ describe('useRecoveryToasts', () => { it('should use recoveryToastText when desktopFullCommandText is null', () => { vi.mocked(useCommandTextString).mockReturnValue({ + kind: 'generic', commandText: '', - stepTexts: undefined, }) const { result } = renderHook(() => @@ -196,8 +199,8 @@ describe('getStepNumber', () => { describe('useRecoveryFullCommandText', () => { it('should return the correct command text', () => { vi.mocked(useCommandTextString).mockReturnValue({ + kind: 'generic', commandText: TEST_COMMAND, - stepTexts: undefined, }) const { result } = renderHook(() => @@ -213,8 +216,8 @@ describe('useRecoveryFullCommandText', () => { it('should return null when relevantCmd is null', () => { vi.mocked(useCommandTextString).mockReturnValue({ + kind: 'generic', commandText: '', - stepTexts: undefined, }) const { result } = renderHook(() => @@ -242,6 +245,7 @@ describe('useRecoveryFullCommandText', () => { it('should truncate TC command', () => { vi.mocked(useCommandTextString).mockReturnValue({ + kind: 'thermocycler/runProfile', commandText: TC_COMMAND, stepTexts: ['step'], }) @@ -255,7 +259,25 @@ describe('useRecoveryFullCommandText', () => { } as any, }) ) + expect(result.current).toBe('tc starting profile of 1231231 element steps') + }) - expect(result.current).toBe('tc command cycle') + it('should truncate new TC command', () => { + vi.mocked(useCommandTextString).mockReturnValue({ + kind: 'thermocycler/runExtendedProfile', + commandText: TC_COMMAND, + profileElementTexts: [{ kind: 'step', stepText: 'blah blah blah' }], + }) + + const { result } = renderHook(() => + useRecoveryFullCommandText({ + robotType: FLEX_ROBOT_TYPE, + stepNumber: 0, + commandTextData: { + commands: [TC_COMMAND], + } as any, + }) + ) + expect(result.current).toBe('tc starting profile of 1231231 element steps') }) }) diff --git a/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useRouteUpdateActions.test.ts b/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useRouteUpdateActions.test.ts index b8fd72d06df..7162ea8d9d3 100644 --- a/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useRouteUpdateActions.test.ts +++ b/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useRouteUpdateActions.test.ts @@ -25,10 +25,11 @@ describe('useRouteUpdateActions', () => { hasLaunchedRecovery: true, toggleERWizAsActiveUser: mockToggleERWizard, recoveryMap: { - route: RECOVERY_MAP.RETRY_FAILED_COMMAND.ROUTE, - step: RECOVERY_MAP.RETRY_FAILED_COMMAND.STEPS.CONFIRM_RETRY, + route: RECOVERY_MAP.RETRY_STEP.ROUTE, + step: RECOVERY_MAP.RETRY_STEP.STEPS.CONFIRM_RETRY, }, setRecoveryMap: mockSetRecoveryMap, + doorStatusUtils: { isProhibitedDoorOpen: false, isDoorOpen: false }, } }) @@ -38,7 +39,7 @@ describe('useRouteUpdateActions', () => { ) const { proceedNextStep } = result.current - proceedNextStep() + void proceedNextStep() expect(mockSetRecoveryMap).toHaveBeenCalledWith({ route: OPTION_SELECTION.ROUTE, step: OPTION_SELECTION.STEPS.SELECT, @@ -56,7 +57,7 @@ describe('useRouteUpdateActions', () => { const { proceedNextStep } = result.current - proceedNextStep() + void proceedNextStep() expect(mockToggleERWizard).toHaveBeenCalled() }) @@ -67,7 +68,7 @@ describe('useRouteUpdateActions', () => { ) const { goBackPrevStep } = result.current - goBackPrevStep() + void goBackPrevStep() expect(mockSetRecoveryMap).toHaveBeenCalledWith({ route: OPTION_SELECTION.ROUTE, step: OPTION_SELECTION.STEPS.SELECT, @@ -85,7 +86,7 @@ describe('useRouteUpdateActions', () => { const { goBackPrevStep } = result.current - goBackPrevStep() + void goBackPrevStep() expect(mockToggleERWizard).toHaveBeenCalled() }) @@ -96,56 +97,106 @@ describe('useRouteUpdateActions', () => { ) const { proceedToRouteAndStep } = result.current - proceedToRouteAndStep(RECOVERY_MAP.ROBOT_IN_MOTION.ROUTE) + void proceedToRouteAndStep(RECOVERY_MAP.ROBOT_IN_MOTION.ROUTE) expect(mockSetRecoveryMap).toHaveBeenCalledWith({ route: RECOVERY_MAP.ROBOT_IN_MOTION.ROUTE, step: RECOVERY_MAP.ROBOT_IN_MOTION.STEPS.IN_MOTION, }) }) - it('routes to "robot in motion" when no other motion path is specified', () => { + it('routes to "robot in motion" when no other motion path is specified', async () => { const { result } = renderHook(() => useRouteUpdateActions(useRouteUpdateActionsParams) ) - const { setRobotInMotion } = result.current + const { handleMotionRouting } = result.current - setRobotInMotion(true) + await handleMotionRouting(true) expect(mockSetRecoveryMap).toHaveBeenCalledWith({ route: RECOVERY_MAP.ROBOT_IN_MOTION.ROUTE, step: RECOVERY_MAP.ROBOT_IN_MOTION.STEPS.IN_MOTION, }) }) - it('routes to alternative motion routes if specified', () => { + it('rejects before routing to an "in motion" route if the door is open', async () => { + const params = { + ...useRouteUpdateActionsParams, + doorStatusUtils: { isDoorOpen: true, isProhibitedDoorOpen: false }, + } + + const { result } = renderHook(() => useRouteUpdateActions(params)) + const { handleMotionRouting } = result.current + + await expect(handleMotionRouting(true)).rejects.toThrow() + + expect(mockSetRecoveryMap).toHaveBeenCalledWith({ + route: RECOVERY_MAP.ROBOT_DOOR_OPEN.ROUTE, + step: RECOVERY_MAP.ROBOT_DOOR_OPEN.STEPS.DOOR_OPEN, + }) + }) + + it(`does not reject if the door is open but the step is ${RECOVERY_MAP.MANUAL_REPLACE_AND_RETRY.STEPS.GRIPPER_RELEASE_LABWARE}`, async () => { + const params = { + ...useRouteUpdateActionsParams, + doorStatusUtils: { isDoorOpen: true, isProhibitedDoorOpen: false }, + recoveryMap: { + route: RECOVERY_MAP.MANUAL_REPLACE_AND_RETRY.ROUTE, + step: + RECOVERY_MAP.MANUAL_REPLACE_AND_RETRY.STEPS.GRIPPER_RELEASE_LABWARE, + }, + } + + const { result } = renderHook(() => useRouteUpdateActions(params)) + const { handleMotionRouting } = result.current + + await expect(handleMotionRouting(true)).resolves.not.toThrow() + }) + + it(`does not reject if the door is open but the step is ${RECOVERY_MAP.MANUAL_MOVE_AND_SKIP.STEPS.GRIPPER_RELEASE_LABWARE}`, async () => { + const params = { + ...useRouteUpdateActionsParams, + doorStatusUtils: { isDoorOpen: true, isProhibitedDoorOpen: false }, + recoveryMap: { + route: RECOVERY_MAP.MANUAL_REPLACE_AND_RETRY.ROUTE, + step: RECOVERY_MAP.MANUAL_MOVE_AND_SKIP.STEPS.GRIPPER_RELEASE_LABWARE, + }, + } + + const { result } = renderHook(() => useRouteUpdateActions(params)) + const { handleMotionRouting } = result.current + + await expect(handleMotionRouting(true)).resolves.not.toThrow() + }) + + it('routes to alternative motion routes if specified', async () => { const { result } = renderHook(() => useRouteUpdateActions(useRouteUpdateActionsParams) ) - const { setRobotInMotion } = result.current + const { handleMotionRouting } = result.current - setRobotInMotion(true, RECOVERY_MAP.ROBOT_RESUMING.ROUTE) + await handleMotionRouting(true, RECOVERY_MAP.ROBOT_RESUMING.ROUTE) expect(mockSetRecoveryMap).toHaveBeenCalledWith({ route: RECOVERY_MAP.ROBOT_RESUMING.ROUTE, step: RECOVERY_MAP.ROBOT_RESUMING.STEPS.RESUMING, }) }) - it('routes to the route prior to motion after the motion completes', () => { + it('routes to the route prior to motion after the motion completes', async () => { const { result, rerender } = renderHook(() => useRouteUpdateActions(useRouteUpdateActionsParams) ) - const { setRobotInMotion } = result.current + const { handleMotionRouting } = result.current - setRobotInMotion(true) + await handleMotionRouting(true) expect(mockSetRecoveryMap).toHaveBeenCalledWith({ route: RECOVERY_MAP.ROBOT_IN_MOTION.ROUTE, step: RECOVERY_MAP.ROBOT_IN_MOTION.STEPS.IN_MOTION, }) - setRobotInMotion(false) + void handleMotionRouting(false) rerender() expect(mockSetRecoveryMap).toHaveBeenCalledWith({ - route: RECOVERY_MAP.RETRY_FAILED_COMMAND.ROUTE, - step: RECOVERY_MAP.RETRY_FAILED_COMMAND.STEPS.CONFIRM_RETRY, + route: RECOVERY_MAP.RETRY_STEP.ROUTE, + step: RECOVERY_MAP.RETRY_STEP.STEPS.CONFIRM_RETRY, }) }) @@ -155,7 +206,7 @@ describe('useRouteUpdateActions', () => { ) const { proceedToRouteAndStep } = result.current - proceedToRouteAndStep(RECOVERY_MAP.ROBOT_IN_MOTION.ROUTE) + void proceedToRouteAndStep(RECOVERY_MAP.ROBOT_IN_MOTION.ROUTE) expect(mockSetRecoveryMap).toHaveBeenCalledWith({ route: RECOVERY_MAP.ROBOT_IN_MOTION.ROUTE, step: RECOVERY_MAP.ROBOT_IN_MOTION.STEPS.IN_MOTION, @@ -168,13 +219,13 @@ describe('useRouteUpdateActions', () => { ) const { proceedToRouteAndStep } = result.current - proceedToRouteAndStep( - RECOVERY_MAP.RETRY_FAILED_COMMAND.ROUTE, - RECOVERY_MAP.RETRY_FAILED_COMMAND.STEPS.CONFIRM_RETRY + void proceedToRouteAndStep( + RECOVERY_MAP.RETRY_STEP.ROUTE, + RECOVERY_MAP.RETRY_STEP.STEPS.CONFIRM_RETRY ) expect(mockSetRecoveryMap).toHaveBeenCalledWith({ - route: RECOVERY_MAP.RETRY_FAILED_COMMAND.ROUTE, - step: RECOVERY_MAP.RETRY_FAILED_COMMAND.STEPS.CONFIRM_RETRY, + route: RECOVERY_MAP.RETRY_STEP.ROUTE, + step: RECOVERY_MAP.RETRY_STEP.STEPS.CONFIRM_RETRY, }) }) @@ -184,7 +235,10 @@ describe('useRouteUpdateActions', () => { ) const { proceedToRouteAndStep } = result.current - proceedToRouteAndStep(RECOVERY_MAP.ROBOT_IN_MOTION.ROUTE, 'invalid-step') + void proceedToRouteAndStep( + RECOVERY_MAP.ROBOT_IN_MOTION.ROUTE, + 'invalid-step' as any + ) expect(mockSetRecoveryMap).toHaveBeenCalledWith({ route: RECOVERY_MAP.ROBOT_IN_MOTION.ROUTE, step: RECOVERY_MAP.ROBOT_IN_MOTION.STEPS.IN_MOTION, diff --git a/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useShowDoorInfo.test.ts b/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useShowDoorInfo.test.ts index 226ca7de023..753823f2ec6 100644 --- a/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useShowDoorInfo.test.ts +++ b/app/src/organisms/ErrorRecoveryFlows/hooks/__tests__/useShowDoorInfo.test.ts @@ -7,45 +7,121 @@ import { RUN_STATUS_AWAITING_RECOVERY, } from '@opentrons/api-client' +import { RECOVERY_MAP } from '../../constants' + +import type { IRecoveryMap } from '../../types' + describe('useShowDoorInfo', () => { let initialProps: Parameters[0] + let mockRecoveryMap: IRecoveryMap beforeEach(() => { initialProps = RUN_STATUS_AWAITING_RECOVERY + mockRecoveryMap = { + route: RECOVERY_MAP.OPTION_SELECTION.ROUTE, + step: RECOVERY_MAP.OPTION_SELECTION.STEPS.SELECT, + } as IRecoveryMap }) - it('should return false initially', () => { - const { result } = renderHook(() => useShowDoorInfo(initialProps)) - expect(result.current).toBe(false) + it('should return false values initially', () => { + const { result } = renderHook(() => + useShowDoorInfo(initialProps, mockRecoveryMap) + ) + expect(result.current).toEqual({ + isDoorOpen: false, + isProhibitedDoorOpen: false, + }) }) - it(`should return true when runStatus is ${RUN_STATUS_AWAITING_RECOVERY_BLOCKED_BY_OPEN_DOOR}`, () => { + it(`should return true values when runStatus is ${RUN_STATUS_AWAITING_RECOVERY_BLOCKED_BY_OPEN_DOOR}`, () => { const props = RUN_STATUS_AWAITING_RECOVERY_BLOCKED_BY_OPEN_DOOR - const { result } = renderHook(() => useShowDoorInfo(props)) - expect(result.current).toBe(true) + const { result } = renderHook(() => useShowDoorInfo(props, mockRecoveryMap)) + expect(result.current).toEqual({ + isDoorOpen: true, + isProhibitedDoorOpen: true, + }) }) - it(`should return true when runStatus is ${RUN_STATUS_AWAITING_RECOVERY_PAUSED}`, () => { + it(`should return true values when runStatus is ${RUN_STATUS_AWAITING_RECOVERY_PAUSED}`, () => { const props = RUN_STATUS_AWAITING_RECOVERY_PAUSED - const { result } = renderHook(() => useShowDoorInfo(props)) - expect(result.current).toBe(true) + const { result } = renderHook(() => useShowDoorInfo(props, mockRecoveryMap)) + expect(result.current).toEqual({ + isDoorOpen: true, + isProhibitedDoorOpen: true, + }) }) - it(`should keep returning true when runStatus changes from ${RUN_STATUS_AWAITING_RECOVERY_BLOCKED_BY_OPEN_DOOR} to ${RUN_STATUS_AWAITING_RECOVERY_PAUSED}`, () => { - const { result, rerender } = renderHook(props => useShowDoorInfo(props), { - initialProps, + it(`should keep returning true values when runStatus changes from ${RUN_STATUS_AWAITING_RECOVERY_BLOCKED_BY_OPEN_DOOR} to ${RUN_STATUS_AWAITING_RECOVERY_PAUSED}`, () => { + const { result, rerender } = renderHook( + ({ runStatus, recoveryMap }) => useShowDoorInfo(runStatus, recoveryMap), + { + initialProps: { runStatus: initialProps, recoveryMap: mockRecoveryMap }, + } + ) + + act(() => { + rerender({ + runStatus: RUN_STATUS_AWAITING_RECOVERY_BLOCKED_BY_OPEN_DOOR, + recoveryMap: mockRecoveryMap, + }) + }) + expect(result.current).toEqual({ + isDoorOpen: true, + isProhibitedDoorOpen: true, }) act(() => { - rerender(RUN_STATUS_AWAITING_RECOVERY_BLOCKED_BY_OPEN_DOOR) + rerender({ + runStatus: RUN_STATUS_AWAITING_RECOVERY_PAUSED, + recoveryMap: mockRecoveryMap, + }) + }) + expect(result.current).toEqual({ + isDoorOpen: true, + isProhibitedDoorOpen: true, + }) + }) + + it('should return false values when runStatus changes to a non-door open status', () => { + const { result, rerender } = renderHook( + ({ runStatus, recoveryMap }) => useShowDoorInfo(runStatus, recoveryMap), + { + initialProps: { + runStatus: RUN_STATUS_AWAITING_RECOVERY_BLOCKED_BY_OPEN_DOOR, + recoveryMap: mockRecoveryMap, + }, + } + ) + + expect(result.current).toEqual({ + isDoorOpen: true, + isProhibitedDoorOpen: true, }) - expect(result.current).toBe(true) act(() => { - rerender(RUN_STATUS_AWAITING_RECOVERY_PAUSED) + rerender({ + runStatus: RUN_STATUS_AWAITING_RECOVERY as any, + recoveryMap: mockRecoveryMap, + }) }) - expect(result.current).toBe(true) + expect(result.current).toEqual({ + isDoorOpen: false, + isProhibitedDoorOpen: false, + }) + }) + + it('should return false for prohibited door if the route is special-cased even if the door is open', () => { + const props = RUN_STATUS_AWAITING_RECOVERY_BLOCKED_BY_OPEN_DOOR + + const { result } = renderHook(() => + useShowDoorInfo(props, { + route: RECOVERY_MAP.MANUAL_FILL_AND_SKIP.ROUTE, + step: RECOVERY_MAP.MANUAL_FILL_AND_SKIP.STEPS.MANUAL_FILL, + }) + ) + + expect(result.current.isProhibitedDoorOpen).toEqual(false) }) }) diff --git a/app/src/organisms/ErrorRecoveryFlows/hooks/index.ts b/app/src/organisms/ErrorRecoveryFlows/hooks/index.ts index 4a97b82afc1..2411c95c30e 100644 --- a/app/src/organisms/ErrorRecoveryFlows/hooks/index.ts +++ b/app/src/organisms/ErrorRecoveryFlows/hooks/index.ts @@ -1,13 +1,13 @@ export { useCurrentlyRecoveringFrom } from './useCurrentlyRecoveringFrom' export { useErrorMessage } from './useErrorMessage' export { useErrorName } from './useErrorName' -export { useShowDoorInfo } from './useShowDoorInfo' export { useRecoveryCommands } from './useRecoveryCommands' export { useRouteUpdateActions } from './useRouteUpdateActions' export { useERUtils } from './useERUtils' export { useRecoveryTakeover } from './useRecoveryTakeover' export { useRetainedFailedCommandBySource } from './useRetainedFailedCommandBySource' +export type { ERUtilsProps } from './useERUtils' export type { UseRouteUpdateActionsResult } from './useRouteUpdateActions' export type { UseRecoveryCommandsResult } from './useRecoveryCommands' export type { RecoveryTipStatusUtils } from './useRecoveryTipStatus' @@ -15,3 +15,4 @@ export type { ERUtilsResults } from './useERUtils' export type { UseFailedLabwareUtilsResult } from './useFailedLabwareUtils' export type { UseRecoveryTakeoverResult } from './useRecoveryTakeover' export type { FailedCommandBySource } from './useRetainedFailedCommandBySource' +export type { UseRecoveryRoutingResult } from './useRecoveryRouting' diff --git a/app/src/organisms/ErrorRecoveryFlows/hooks/useCleanupRecoveryState.ts b/app/src/organisms/ErrorRecoveryFlows/hooks/useCleanupRecoveryState.ts new file mode 100644 index 00000000000..3d01e2356c5 --- /dev/null +++ b/app/src/organisms/ErrorRecoveryFlows/hooks/useCleanupRecoveryState.ts @@ -0,0 +1,33 @@ +import { useEffect } from 'react' + +import { RECOVERY_MAP } from '../constants' + +import type { + ERUtilsProps, + UseRouteUpdateActionsResult, + UseRecoveryRoutingResult, +} from '../hooks' + +export interface UseCleanupProps { + isTakeover: ERUtilsProps['showTakeover'] + stashedMapRef: UseRouteUpdateActionsResult['stashedMapRef'] + setRM: UseRecoveryRoutingResult['setRM'] +} + +// When certain events (ex, a takeover) occur, reset state that needs to be reset. +export function useCleanupRecoveryState({ + isTakeover, + stashedMapRef, + setRM, +}: UseCleanupProps): void { + useEffect(() => { + if (isTakeover) { + stashedMapRef.current = null + + setRM({ + route: RECOVERY_MAP.OPTION_SELECTION.ROUTE, + step: RECOVERY_MAP.OPTION_SELECTION.STEPS.SELECT, + }) + } + }, [isTakeover]) +} diff --git a/app/src/organisms/ErrorRecoveryFlows/hooks/useCurrentlyRecoveringFrom.ts b/app/src/organisms/ErrorRecoveryFlows/hooks/useCurrentlyRecoveringFrom.ts index 319ba718270..d0273643b61 100644 --- a/app/src/organisms/ErrorRecoveryFlows/hooks/useCurrentlyRecoveringFrom.ts +++ b/app/src/organisms/ErrorRecoveryFlows/hooks/useCurrentlyRecoveringFrom.ts @@ -1,9 +1,12 @@ +import { useEffect } from 'react' +import { useQueryClient } from 'react-query' + import { RUN_STATUS_AWAITING_RECOVERY, RUN_STATUS_AWAITING_RECOVERY_BLOCKED_BY_OPEN_DOOR, RUN_STATUS_AWAITING_RECOVERY_PAUSED, } from '@opentrons/api-client' -import { useCommandQuery } from '@opentrons/react-api-client' +import { useCommandQuery, useHost } from '@opentrons/react-api-client' import { useNotifyAllCommandsQuery } from '/app/resources/runs' @@ -25,10 +28,19 @@ export function useCurrentlyRecoveringFrom( runId: string, runStatus: RunStatus | null ): FailedCommand | null { + const queryClient = useQueryClient() + const host = useHost() // There can only be a currentlyRecoveringFrom command when the run is in recovery mode. // In case we're falling back to polling, only enable queries when that is the case. const isRunInRecoveryMode = VALID_RECOVERY_FETCH_STATUSES.includes(runStatus) + // Prevent stale data on subsequent recoveries by clearing the query cache at the start of each recovery. + useEffect(() => { + if (isRunInRecoveryMode) { + void queryClient.invalidateQueries([host, 'runs', runId]) + } + }, [isRunInRecoveryMode, host, runId]) + const { data: allCommandsQueryData } = useNotifyAllCommandsQuery( runId, { cursor: null, pageLength: 0 }, // pageLength 0 because we only care about the links. diff --git a/app/src/organisms/ErrorRecoveryFlows/hooks/useDeckMapUtils.ts b/app/src/organisms/ErrorRecoveryFlows/hooks/useDeckMapUtils.ts index 3c8a45faabb..93caceaf4c2 100644 --- a/app/src/organisms/ErrorRecoveryFlows/hooks/useDeckMapUtils.ts +++ b/app/src/organisms/ErrorRecoveryFlows/hooks/useDeckMapUtils.ts @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useMemo } from 'react' import { getDeckDefFromRobotType, @@ -50,7 +50,7 @@ export function useDeckMapUtils({ const deckConfig = getSimplestDeckConfigForProtocol(protocolAnalysis) const deckDef = getDeckDefFromRobotType(robotType) - const currentModulesInfo = React.useMemo( + const currentModulesInfo = useMemo( () => getRunCurrentModulesInfo({ runRecord, @@ -60,7 +60,7 @@ export function useDeckMapUtils({ [runRecord, deckDef, protocolAnalysis] ) - const runCurrentModules = React.useMemo( + const runCurrentModules = useMemo( () => getRunCurrentModulesOnDeck({ failedLabwareUtils, @@ -69,12 +69,12 @@ export function useDeckMapUtils({ [runId, protocolAnalysis, runRecord, deckDef, failedLabwareUtils] ) - const currentLabwareInfo = React.useMemo( + const currentLabwareInfo = useMemo( () => getRunCurrentLabwareInfo({ runRecord, protocolAnalysis }), [runRecord, protocolAnalysis] ) - const runCurrentLabware = React.useMemo( + const runCurrentLabware = useMemo( () => getRunCurrentLabwareOnDeck({ failedLabwareUtils, diff --git a/app/src/organisms/ErrorRecoveryFlows/hooks/useERUtils.ts b/app/src/organisms/ErrorRecoveryFlows/hooks/useERUtils.ts index fdb7ca0ad22..9f6a6536504 100644 --- a/app/src/organisms/ErrorRecoveryFlows/hooks/useERUtils.ts +++ b/app/src/organisms/ErrorRecoveryFlows/hooks/useERUtils.ts @@ -16,6 +16,8 @@ import { useRecoveryActionMutation } from './useRecoveryActionMutation' import { useRunningStepCounts } from '/app/resources/protocols/hooks' import { useRecoveryToasts } from './useRecoveryToasts' import { useRecoveryAnalytics } from '/app/redux-resources/analytics' +import { useShowDoorInfo } from './useShowDoorInfo' +import { useCleanupRecoveryState } from './useCleanupRecoveryState' import type { PipetteData } from '@opentrons/api-client' import type { RobotType } from '@opentrons/shared-data' @@ -35,6 +37,7 @@ import type { StepCounts } from '/app/resources/protocols/hooks' import type { UseRecoveryAnalyticsResult } from '/app/redux-resources/analytics' import type { UseRecoveryTakeoverResult } from './useRecoveryTakeover' import type { useRetainedFailedCommandBySource } from './useRetainedFailedCommandBySource' +import type { UseShowDoorInfoResult } from './useShowDoorInfo' export type ERUtilsProps = Omit & { toggleERWizAsActiveUser: UseRecoveryTakeoverResult['toggleERWizAsActiveUser'] @@ -42,12 +45,13 @@ export type ERUtilsProps = Omit & { isOnDevice: boolean robotType: RobotType failedCommand: ReturnType + showTakeover: boolean } export interface ERUtilsResults { recoveryMap: IRecoveryMap currentRecoveryOptionUtils: CurrentRecoveryOptionUtils - routeUpdateActions: UseRouteUpdateActionsResult + routeUpdateActions: Omit recoveryCommands: UseRecoveryCommandsResult tipStatusUtils: RecoveryTipStatusUtils failedLabwareUtils: UseFailedLabwareUtilsResult @@ -60,6 +64,7 @@ export interface ERUtilsResults { commandsAfterFailedCommand: ReturnType subMapUtils: SubMapUtils analytics: UseRecoveryAnalyticsResult + doorStatusUtils: UseShowDoorInfoResult } const SUBSEQUENT_COMMAND_DEPTH = 2 @@ -72,6 +77,8 @@ export function useERUtils({ protocolAnalysis, isOnDevice, robotType, + runStatus, + showTakeover, }: ERUtilsProps): ERUtilsResults { const { data: attachedInstruments } = useInstrumentsQuery() const { data: runRecord } = useNotifyRunQuery(runId) @@ -97,6 +104,8 @@ export function useERUtils({ ...subMapUtils } = useRecoveryRouting() + const doorStatusUtils = useShowDoorInfo(runStatus, recoveryMap) + const recoveryToastUtils = useRecoveryToasts({ currentStepCount: stepCounts.currentStepNumber, selectedRecoveryOption: currentRecoveryOptionUtils.selectedRecoveryOption, @@ -123,6 +132,7 @@ export function useERUtils({ recoveryMap, toggleERWizAsActiveUser, setRecoveryMap: setRM, + doorStatusUtils, }) const failedLabwareUtils = useFailedLabwareUtils({ @@ -150,7 +160,10 @@ export function useERUtils({ failedLabwareUtils, }) - const recoveryActionMutationUtils = useRecoveryActionMutation(runId) + const recoveryActionMutationUtils = useRecoveryActionMutation( + runId, + routeUpdateActions + ) // TODO(jh, 06-14-24): Ensure other string build utilities that are internal to ErrorRecoveryFlows are exported under // one utility object in useERUtils. @@ -160,6 +173,13 @@ export function useERUtils({ protocolAnalysis, SUBSEQUENT_COMMAND_DEPTH ) + + useCleanupRecoveryState({ + isTakeover: showTakeover, + setRM, + stashedMapRef: routeUpdateActions.stashedMapRef, + }) + return { recoveryMap, subMapUtils, @@ -176,5 +196,6 @@ export function useERUtils({ stepCounts, commandsAfterFailedCommand, analytics, + doorStatusUtils, } } diff --git a/app/src/organisms/ErrorRecoveryFlows/hooks/useErrorName.ts b/app/src/organisms/ErrorRecoveryFlows/hooks/useErrorName.ts index bde35d89fbf..ee1eaad7775 100644 --- a/app/src/organisms/ErrorRecoveryFlows/hooks/useErrorName.ts +++ b/app/src/organisms/ErrorRecoveryFlows/hooks/useErrorName.ts @@ -17,8 +17,11 @@ export function useErrorName(errorKind: ErrorKind): string { return t('pipette_overpressure') case ERROR_KINDS.OVERPRESSURE_WHILE_DISPENSING: return t('pipette_overpressure') - // The only "general error" case currently is tipPhysicallyMissing. - default: + case ERROR_KINDS.TIP_NOT_DETECTED: return t('tip_not_detected') + case ERROR_KINDS.GRIPPER_ERROR: + return t('gripper_error') + default: + return t('error') } } diff --git a/app/src/organisms/ErrorRecoveryFlows/hooks/useFailedLabwareUtils.ts b/app/src/organisms/ErrorRecoveryFlows/hooks/useFailedLabwareUtils.ts index b5f2866a154..e1c15a9e264 100644 --- a/app/src/organisms/ErrorRecoveryFlows/hooks/useFailedLabwareUtils.ts +++ b/app/src/organisms/ErrorRecoveryFlows/hooks/useFailedLabwareUtils.ts @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useMemo, useState } from 'react' import without from 'lodash/without' import { @@ -56,7 +56,7 @@ export function useFailedLabwareUtils({ runCommands, runRecord, }: UseFailedLabwareUtilsProps): UseFailedLabwareUtilsResult { - const recentRelevantFailedLabwareCmd = React.useMemo( + const recentRelevantFailedLabwareCmd = useMemo( () => getRelevantFailedLabwareCmdFrom({ failedCommandByRunRecord, @@ -67,7 +67,7 @@ export function useFailedLabwareUtils({ const tipSelectionUtils = useTipSelectionUtils(recentRelevantFailedLabwareCmd) - const failedLabwareDetails = React.useMemo( + const failedLabwareDetails = useMemo( () => getFailedCmdRelevantLabware( protocolAnalysis, @@ -77,7 +77,7 @@ export function useFailedLabwareUtils({ [protocolAnalysis?.id, recentRelevantFailedLabwareCmd?.key] ) - const failedLabware = React.useMemo( + const failedLabware = useMemo( () => getFailedLabware(recentRelevantFailedLabwareCmd, runRecord), [recentRelevantFailedLabwareCmd?.key] ) @@ -125,7 +125,7 @@ export function getRelevantFailedLabwareCmdFrom({ case ERROR_KINDS.GENERAL_ERROR: return null default: - console.warn( + console.error( 'No labware associated with failed command. Handle case explicitly.' ) return null @@ -185,7 +185,7 @@ interface UseTipSelectionUtilsResult { function useTipSelectionUtils( recentRelevantFailedLabwareCmd: FailedCommandRelevantLabware ): UseTipSelectionUtilsResult { - const [selectedLocs, setSelectedLocs] = React.useState(null) + const [selectedLocs, setSelectedLocs] = useState(null) const initialLocs = useInitialSelectedLocationsFrom( recentRelevantFailedLabwareCmd @@ -211,7 +211,7 @@ function useTipSelectionUtils( } // Use this labware to represent all tip racks for manual tip selection. - const tipSelectorDef = React.useMemo( + const tipSelectorDef = useMemo( () => getAllLabwareDefs().thermoscientificnunc96Wellplate1300UlV1, [] ) @@ -232,7 +232,7 @@ function useTipSelectionUtils( function useInitialSelectedLocationsFrom( recentRelevantFailedLabwareCmd: FailedCommandRelevantLabware ): WellGroup | null { - const [initialWells, setInitialWells] = React.useState(null) + const [initialWells, setInitialWells] = useState(null) // Note that while other commands may have a wellName associated with them, // we are only interested in wells for the purposes of tip picking up. diff --git a/app/src/organisms/ErrorRecoveryFlows/hooks/useRecoveryActionMutation.ts b/app/src/organisms/ErrorRecoveryFlows/hooks/useRecoveryActionMutation.ts index 5f33df7941d..0d4bdd83b42 100644 --- a/app/src/organisms/ErrorRecoveryFlows/hooks/useRecoveryActionMutation.ts +++ b/app/src/organisms/ErrorRecoveryFlows/hooks/useRecoveryActionMutation.ts @@ -1,20 +1,35 @@ +import { usePlayRunMutation } from '@opentrons/react-api-client' + +import { RECOVERY_MAP } from '../constants' + +import type { RunAction } from '@opentrons/api-client' +import type { ERUtilsResults } from './useERUtils' import type { ErrorRecoveryFlowsProps } from '..' -import { useRunActionMutations } from '@opentrons/react-api-client' export interface RecoveryActionMutationResult { - resumeRecovery: ReturnType['playRun'] - isResumeRecoveryLoading: ReturnType< - typeof useRunActionMutations - >['isPlayRunActionLoading'] + resumeRecovery: () => Promise + isResumeRecoveryLoading: ReturnType['isLoading'] } export function useRecoveryActionMutation( - runId: ErrorRecoveryFlowsProps['runId'] + runId: ErrorRecoveryFlowsProps['runId'], + routeUpdateActions: ERUtilsResults['routeUpdateActions'] ): RecoveryActionMutationResult { const { - playRun: resumeRecovery, - isPlayRunActionLoading: isResumeRecoveryLoading, - } = useRunActionMutations(runId) + mutateAsync, + isLoading: isResumeRecoveryLoading, + } = usePlayRunMutation() + const { proceedToRouteAndStep } = routeUpdateActions + + const resumeRecovery = (): Promise => { + return mutateAsync(runId).catch(e => { + return proceedToRouteAndStep( + RECOVERY_MAP.ERROR_WHILE_RECOVERING.ROUTE + ).then(() => { + throw new Error(`Could not resume recovery: ${e}`) + }) + }) + } return { resumeRecovery, isResumeRecoveryLoading } } diff --git a/app/src/organisms/ErrorRecoveryFlows/hooks/useRecoveryCommands.ts b/app/src/organisms/ErrorRecoveryFlows/hooks/useRecoveryCommands.ts index ddf5eda3bbf..f463d4dd107 100644 --- a/app/src/organisms/ErrorRecoveryFlows/hooks/useRecoveryCommands.ts +++ b/app/src/organisms/ErrorRecoveryFlows/hooks/useRecoveryCommands.ts @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useCallback } from 'react' import head from 'lodash/head' import { @@ -57,6 +57,8 @@ export interface UseRecoveryCommandsResult { homePipetteZAxes: () => Promise /* A non-terminal recovery command */ pickUpTips: () => Promise + /* A non-terminal recovery command */ + releaseGripperJaws: () => Promise } // TODO(jh, 07-24-24): Create tighter abstractions for terminal vs. non-terminal commands. @@ -82,6 +84,21 @@ export function useRecoveryCommands({ const { updateErrorRecoveryPolicy } = useUpdateErrorRecoveryPolicy(runId) const { makeSuccessToast } = recoveryToastUtils + const chainRunRecoveryCommands = useCallback( + ( + commands: CreateCommand[], + continuePastFailure: boolean = false + ): Promise => + chainRunCommands(commands, continuePastFailure).catch(e => { + console.warn(`Error executing "fixit" command: ${e}`) + analytics.reportActionSelectedResult(selectedRecoveryOption, 'failed') + // the catch never occurs if continuePastCommandFailure is "true" + void proceedToRouteAndStep(RECOVERY_MAP.ERROR_WHILE_RECOVERING.ROUTE) + return Promise.reject(new Error(`Could not execute command: ${e}`)) + }), + [analytics, selectedRecoveryOption] + ) + const buildRetryPrepMove = (): MoveToCoordinatesCreateCommand | null => { type InPlaceCommand = | AspirateInPlaceRunTimeCommand @@ -126,22 +143,8 @@ export function useRecoveryCommands({ : null : null } - const chainRunRecoveryCommands = React.useCallback( - ( - commands: CreateCommand[], - continuePastFailure: boolean = false - ): Promise => - chainRunCommands(commands, continuePastFailure).catch(e => { - console.warn(`Error executing "fixit" command: ${e}`) - analytics.reportActionSelectedResult(selectedRecoveryOption, 'failed') - // the catch never occurs if continuePastCommandFailure is "true" - void proceedToRouteAndStep(RECOVERY_MAP.ERROR_WHILE_RECOVERING.ROUTE) - return Promise.reject(new Error(`Could not execute command: ${e}`)) - }), - [chainRunCommands] - ) - const retryFailedCommand = React.useCallback((): Promise => { + const retryFailedCommand = useCallback((): Promise => { const { commandType, params } = failedCommandByRunRecord as FailedCommand // Null case is handled before command could be issued. return chainRunRecoveryCommands( [ @@ -153,12 +156,12 @@ export function useRecoveryCommands({ }, [chainRunRecoveryCommands, failedCommandByRunRecord?.key]) // Homes the Z-axis of all attached pipettes. - const homePipetteZAxes = React.useCallback((): Promise => { + const homePipetteZAxes = useCallback((): Promise => { return chainRunRecoveryCommands([HOME_PIPETTE_Z_AXES]) }, [chainRunRecoveryCommands]) // Pick up the user-selected tips - const pickUpTips = React.useCallback((): Promise => { + const pickUpTips = useCallback((): Promise => { const { selectedTipLocations, failedLabware } = failedLabwareUtils const pickUpTipCmd = buildPickUpTips( @@ -174,26 +177,26 @@ export function useRecoveryCommands({ } }, [chainRunRecoveryCommands, failedCommandByRunRecord, failedLabwareUtils]) - const resumeRun = React.useCallback((): void => { + const resumeRun = useCallback((): void => { void resumeRunFromRecovery(runId).then(() => { analytics.reportActionSelectedResult(selectedRecoveryOption, 'succeeded') makeSuccessToast() }) }, [runId, resumeRunFromRecovery, makeSuccessToast]) - const cancelRun = React.useCallback((): void => { + const cancelRun = useCallback((): void => { analytics.reportActionSelectedResult(selectedRecoveryOption, 'succeeded') stopRun(runId) }, [runId]) - const skipFailedCommand = React.useCallback((): void => { + const skipFailedCommand = useCallback((): void => { void resumeRunFromRecovery(runId).then(() => { analytics.reportActionSelectedResult(selectedRecoveryOption, 'succeeded') makeSuccessToast() }) }, [runId, resumeRunFromRecovery, makeSuccessToast]) - const ignoreErrorKindThisRun = React.useCallback((): Promise => { + const ignoreErrorKindThisRun = useCallback((): Promise => { if (failedCommandByRunRecord?.error != null) { const ignorePolicyRules = buildIgnorePolicyRules( failedCommandByRunRecord.commandType, @@ -212,12 +215,18 @@ export function useRecoveryCommands({ failedCommandByRunRecord?.commandType, ]) + const releaseGripperJaws = useCallback((): Promise => { + console.log('PLACEHOLDER RELEASE THE JAWS') + return Promise.resolve() + }, []) + return { resumeRun, cancelRun, retryFailedCommand, homePipetteZAxes, pickUpTips, + releaseGripperJaws, skipFailedCommand, ignoreErrorKindThisRun, } diff --git a/app/src/organisms/ErrorRecoveryFlows/hooks/useRecoveryOptionCopy.tsx b/app/src/organisms/ErrorRecoveryFlows/hooks/useRecoveryOptionCopy.tsx index 4e636f6fd78..4cf7cc80eda 100644 --- a/app/src/organisms/ErrorRecoveryFlows/hooks/useRecoveryOptionCopy.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/hooks/useRecoveryOptionCopy.tsx @@ -14,7 +14,7 @@ export function useRecoveryOptionCopy(): ( recoveryOption: RecoveryRoute | null ): string => { switch (recoveryOption) { - case RECOVERY_MAP.RETRY_FAILED_COMMAND.ROUTE: + case RECOVERY_MAP.RETRY_STEP.ROUTE: return t('retry_step') case RECOVERY_MAP.CANCEL_RUN.ROUTE: return t('cancel_run') @@ -22,7 +22,7 @@ export function useRecoveryOptionCopy(): ( return t('retry_with_new_tips') case RECOVERY_MAP.RETRY_SAME_TIPS.ROUTE: return t('retry_with_same_tips') - case RECOVERY_MAP.FILL_MANUALLY_AND_SKIP.ROUTE: + case RECOVERY_MAP.MANUAL_FILL_AND_SKIP.ROUTE: return t('manually_fill_well_and_skip') case RECOVERY_MAP.IGNORE_AND_SKIP.ROUTE: return t('ignore_error_and_skip') @@ -30,6 +30,10 @@ export function useRecoveryOptionCopy(): ( return t('skip_to_next_step_new_tips') case RECOVERY_MAP.SKIP_STEP_WITH_SAME_TIPS.ROUTE: return t('skip_to_next_step_same_tips') + case RECOVERY_MAP.MANUAL_MOVE_AND_SKIP.ROUTE: + return t('manually_move_lw_and_skip') + case RECOVERY_MAP.MANUAL_REPLACE_AND_RETRY.ROUTE: + return t('manually_replace_lw_and_retry') default: return 'Unknown action' } diff --git a/app/src/organisms/ErrorRecoveryFlows/hooks/useRecoveryRouting.ts b/app/src/organisms/ErrorRecoveryFlows/hooks/useRecoveryRouting.ts index b97a1206739..cbf23a1393b 100644 --- a/app/src/organisms/ErrorRecoveryFlows/hooks/useRecoveryRouting.ts +++ b/app/src/organisms/ErrorRecoveryFlows/hooks/useRecoveryRouting.ts @@ -1,15 +1,15 @@ -import * as React from 'react' +import { useState } from 'react' import { RECOVERY_MAP } from '../constants' -import type { IRecoveryMap, RecoveryRoute, ValidSubMap } from '../types' +import type { IRecoveryMap, RecoveryRoute, ValidDropTipSubMap } from '../types' // Utils for getting/setting the current submap. See useRecoveryRouting. export interface SubMapUtils { /* See useRecoveryRouting. */ - updateSubMap: (subMap: ValidSubMap | null) => void + updateSubMap: (subMap: ValidDropTipSubMap | null) => void /* See useRecoveryRouting. */ - subMap: ValidSubMap | null + subMap: ValidDropTipSubMap | null } export interface UseRecoveryRoutingResult { @@ -28,12 +28,12 @@ export interface UseRecoveryRoutingResult { * */ export function useRecoveryRouting(): UseRecoveryRoutingResult { - const [recoveryMap, setRecoveryMap] = React.useState({ + const [recoveryMap, setRecoveryMap] = useState({ route: RECOVERY_MAP.OPTION_SELECTION.ROUTE, step: RECOVERY_MAP.OPTION_SELECTION.STEPS.SELECT, }) - const [subMap, setSubMap] = React.useState(null) + const [subMap, setSubMap] = useState(null) const currentRecoveryOptionUtils = useSelectedRecoveryOption() @@ -56,7 +56,7 @@ export function useSelectedRecoveryOption(): CurrentRecoveryOptionUtils { const [ selectedRecoveryOption, setSelectedRecoveryOption, - ] = React.useState(null) + ] = useState(null) return { selectedRecoveryOption, diff --git a/app/src/organisms/ErrorRecoveryFlows/hooks/useRecoveryTakeover.ts b/app/src/organisms/ErrorRecoveryFlows/hooks/useRecoveryTakeover.ts index 417b6da1719..8e8b3466039 100644 --- a/app/src/organisms/ErrorRecoveryFlows/hooks/useRecoveryTakeover.ts +++ b/app/src/organisms/ErrorRecoveryFlows/hooks/useRecoveryTakeover.ts @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, useEffect } from 'react' import { useSelector } from 'react-redux' import { getUserId } from '/app/redux/config' @@ -40,7 +40,7 @@ export interface UseRecoveryTakeoverResult { export function useRecoveryTakeover( toggleERWiz: UseERWizardResult['toggleERWizard'] ): UseRecoveryTakeoverResult { - const [isActiveUser, setIsActiveUser] = React.useState(false) + const [isActiveUser, setIsActiveUser] = useState(false) const thisUserId = useSelector(getUserId) const { userId: activeId, intent } = useClientDataRecovery({ @@ -49,14 +49,14 @@ export function useRecoveryTakeover( const { updateWithIntent, clearClientData } = useUpdateClientDataRecovery() // Update the client's active user status implicitly if revoked by a different client. - React.useEffect(() => { + useEffect(() => { if (isActiveUser && activeId !== thisUserId) { setIsActiveUser(false) } }, [activeId]) // Not all dependencies added for intended behavior! // If Error Recovery unrenders and this client is the active user, revoke the client's active user status. - React.useEffect(() => { + useEffect(() => { return () => { if (isActiveUser) { clearClientData() diff --git a/app/src/organisms/ErrorRecoveryFlows/hooks/useRecoveryTipStatus.ts b/app/src/organisms/ErrorRecoveryFlows/hooks/useRecoveryTipStatus.ts index 505ba6aff7c..a715d12c83f 100644 --- a/app/src/organisms/ErrorRecoveryFlows/hooks/useRecoveryTipStatus.ts +++ b/app/src/organisms/ErrorRecoveryFlows/hooks/useRecoveryTipStatus.ts @@ -1,15 +1,15 @@ -import * as React from 'react' +import { useState } from 'react' import head from 'lodash/head' import { useHost } from '@opentrons/react-api-client' import { getPipetteModelSpecs } from '@opentrons/shared-data' -import { useTipAttachmentStatus } from '../../DropTipWizardFlows' +import { useTipAttachmentStatus } from '/app/organisms/DropTipWizardFlows' import type { Run, Instruments, PipetteData } from '@opentrons/api-client' import type { PipetteWithTip, TipAttachmentStatusResult, -} from '../../DropTipWizardFlows' +} from '/app/organisms/DropTipWizardFlows' interface UseRecoveryTipStatusProps { runId: string @@ -28,11 +28,11 @@ export type RecoveryTipStatusUtils = TipAttachmentStatusResult & { export function useRecoveryTipStatus( props: UseRecoveryTipStatusProps ): RecoveryTipStatusUtils { - const [isLoadingTipStatus, setIsLoadingTipStatus] = React.useState(false) + const [isLoadingTipStatus, setIsLoadingTipStatus] = useState(false) const [ failedCommandPipette, setFailedCommandPipette, - ] = React.useState(null) + ] = useState(null) const host = useHost() const tipAttachmentStatusUtils = useTipAttachmentStatus({ diff --git a/app/src/organisms/ErrorRecoveryFlows/hooks/useRecoveryToasts.ts b/app/src/organisms/ErrorRecoveryFlows/hooks/useRecoveryToasts.ts index ea63447c78f..ed5aaaeaae5 100644 --- a/app/src/organisms/ErrorRecoveryFlows/hooks/useRecoveryToasts.ts +++ b/app/src/organisms/ErrorRecoveryFlows/hooks/useRecoveryToasts.ts @@ -105,7 +105,7 @@ export function useRecoveryFullCommandText( const relevantCmdIdx = typeof stepNumber === 'number' ? stepNumber : -1 const relevantCmd = commandTextData?.commands[relevantCmdIdx] ?? null - const { commandText, stepTexts } = useCommandTextString({ + const { commandText, kind } = useCommandTextString({ ...props, command: relevantCmd, }) @@ -117,7 +117,12 @@ export function useRecoveryFullCommandText( else if (relevantCmd === null) { return null } else { - return truncateIfTCCommand(commandText, stepTexts != null) + return truncateIfTCCommand( + commandText, + ['thermocycler/runProfile', 'thermocycler/runExtendedProfile'].includes( + kind + ) + ) } } @@ -146,15 +151,17 @@ function handleRecoveryOptionAction( nextStepReturnVal: T ): T | string { switch (selectedRecoveryOption) { - case RECOVERY_MAP.FILL_MANUALLY_AND_SKIP.ROUTE: + case RECOVERY_MAP.MANUAL_FILL_AND_SKIP.ROUTE: case RECOVERY_MAP.SKIP_STEP_WITH_SAME_TIPS.ROUTE: case RECOVERY_MAP.SKIP_STEP_WITH_NEW_TIPS.ROUTE: case RECOVERY_MAP.IGNORE_AND_SKIP.ROUTE: + case RECOVERY_MAP.MANUAL_MOVE_AND_SKIP.ROUTE: return nextStepReturnVal case RECOVERY_MAP.CANCEL_RUN.ROUTE: case RECOVERY_MAP.RETRY_SAME_TIPS.ROUTE: case RECOVERY_MAP.RETRY_NEW_TIPS.ROUTE: - case RECOVERY_MAP.RETRY_FAILED_COMMAND.ROUTE: + case RECOVERY_MAP.RETRY_STEP.ROUTE: + case RECOVERY_MAP.MANUAL_REPLACE_AND_RETRY.ROUTE: return currentStepReturnVal default: return 'HANDLE RECOVERY TOAST OPTION EXPLICITLY.' @@ -162,17 +169,20 @@ function handleRecoveryOptionAction( } // Special case the TC text, so it make sense in a success toast. -function truncateIfTCCommand(commandText: string, isTCText: boolean): string { - if (isTCText) { - const indexOfCycle = commandText.indexOf('cycle') - - if (indexOfCycle === -1) { +function truncateIfTCCommand( + commandText: string, + isTCCommand: boolean +): string { + if (isTCCommand) { + const indexOfProfile = commandText.indexOf('steps') + + if (indexOfProfile === -1) { console.warn( 'TC cycle text has changed. Update Error Recovery TC text utility.' ) } - return commandText.slice(0, indexOfCycle + 5) // +5 to include "cycle" + return commandText.slice(0, indexOfProfile + 5) // +5 to include "steps" } else { return commandText } diff --git a/app/src/organisms/ErrorRecoveryFlows/hooks/useRetainedFailedCommandBySource.ts b/app/src/organisms/ErrorRecoveryFlows/hooks/useRetainedFailedCommandBySource.ts index 10231f5e0cc..c967d4968b1 100644 --- a/app/src/organisms/ErrorRecoveryFlows/hooks/useRetainedFailedCommandBySource.ts +++ b/app/src/organisms/ErrorRecoveryFlows/hooks/useRetainedFailedCommandBySource.ts @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, useEffect } from 'react' import type { RunTimeCommand } from '@opentrons/shared-data' import type { ErrorRecoveryFlowsProps } from '..' @@ -25,9 +25,9 @@ export function useRetainedFailedCommandBySource( const [ retainedFailedCommand, setRetainedFailedCommand, - ] = React.useState(null) + ] = useState(null) - React.useEffect(() => { + useEffect(() => { if (failedCommandByRunRecord !== null) { const failedCommandByAnalysis = protocolAnalysis?.commands.find( diff --git a/app/src/organisms/ErrorRecoveryFlows/hooks/useRouteUpdateActions.ts b/app/src/organisms/ErrorRecoveryFlows/hooks/useRouteUpdateActions.ts index 74c8186bf79..faf6ddf7a4a 100644 --- a/app/src/organisms/ErrorRecoveryFlows/hooks/useRouteUpdateActions.ts +++ b/app/src/organisms/ErrorRecoveryFlows/hooks/useRouteUpdateActions.ts @@ -1,9 +1,10 @@ -import * as React from 'react' +import type { MutableRefObject } from 'react' +import { useRef, useCallback } from 'react' import last from 'lodash/last' + import head from 'lodash/head' import { INVALID, RECOVERY_MAP, STEP_ORDER } from '../constants' - import type { IRecoveryMap, RecoveryRoute, @@ -11,12 +12,19 @@ import type { RouteStep, } from '../types' import type { UseRecoveryTakeoverResult } from './useRecoveryTakeover' +import type { UseShowDoorInfoResult } from './useShowDoorInfo' + +const GRIPPER_MOVE_STEPS: RouteStep[] = [ + RECOVERY_MAP.MANUAL_MOVE_AND_SKIP.STEPS.GRIPPER_RELEASE_LABWARE, + RECOVERY_MAP.MANUAL_REPLACE_AND_RETRY.STEPS.GRIPPER_RELEASE_LABWARE, +] export interface GetRouteUpdateActionsParams { hasLaunchedRecovery: boolean toggleERWizAsActiveUser: UseRecoveryTakeoverResult['toggleERWizAsActiveUser'] recoveryMap: IRecoveryMap setRecoveryMap: (recoveryMap: IRecoveryMap) => void + doorStatusUtils: UseShowDoorInfoResult } export interface UseRouteUpdateActionsResult { @@ -29,23 +37,33 @@ export interface UseRouteUpdateActionsResult { route: RecoveryRoute, step?: RouteStep ) => Promise - /* Stashes the current map then sets the current map to robot in motion. Restores the map after motion completes. */ - setRobotInMotion: ( + /* Stashes the current map then sets the current map to robot in motion after validating the door is closed. + Restores the map after motion completes. */ + handleMotionRouting: ( inMotion: boolean, movingRoute?: RobotMovingRoute ) => Promise + /* Contains the recovery map prior to implicit redirection, if any. Example, if the user is on route A, step A, and the + app implicitly navigates the user to route Z, step Z, the stashed map will contain route A, step A. */ + stashedMap: IRecoveryMap | null + stashedMapRef: MutableRefObject } // Utilities related to routing within the error recovery flows. export function useRouteUpdateActions( routeUpdateActionsParams: GetRouteUpdateActionsParams ): UseRouteUpdateActionsResult { - const { recoveryMap, setRecoveryMap } = routeUpdateActionsParams + const { + recoveryMap, + setRecoveryMap, + doorStatusUtils, + } = routeUpdateActionsParams const { route: currentRoute, step: currentStep } = recoveryMap - const { OPTION_SELECTION, ROBOT_IN_MOTION } = RECOVERY_MAP - const stashedMapRef = React.useRef(null) + const { OPTION_SELECTION, ROBOT_IN_MOTION, ROBOT_DOOR_OPEN } = RECOVERY_MAP + const { isDoorOpen } = doorStatusUtils + const stashedMapRef = useRef(null) - const goBackPrevStep = React.useCallback((): Promise => { + const goBackPrevStep = useCallback((): Promise => { return new Promise((resolve, reject) => { const { getPrevStep } = getRecoveryRouteNavigation(currentRoute) const updatedStep = getPrevStep(currentStep) @@ -60,7 +78,7 @@ export function useRouteUpdateActions( }) }, [currentStep, currentRoute, routeUpdateActionsParams]) - const proceedNextStep = React.useCallback((): Promise => { + const proceedNextStep = useCallback((): Promise => { return new Promise((resolve, reject) => { const { getNextStep } = getRecoveryRouteNavigation(currentRoute) const updatedStep = getNextStep(currentStep) @@ -75,7 +93,7 @@ export function useRouteUpdateActions( }) }, [currentStep, currentRoute, routeUpdateActionsParams]) - const proceedToRouteAndStep = React.useCallback( + const proceedToRouteAndStep = useCallback( (route: RecoveryRoute, step?: RouteStep): Promise => { return new Promise((resolve, reject) => { const newFlowSteps = STEP_ORDER[route] @@ -90,7 +108,30 @@ export function useRouteUpdateActions( [] ) - const setRobotInMotion = React.useCallback( + // If the door is permitted on the current step, but the robot is about to move, we need to manually redirect users + // to the door modal unless the step is specifically a gripper jaw release step. + const checkDoorStatus = useCallback((): Promise => { + return new Promise((resolve, reject) => { + if (isDoorOpen && !GRIPPER_MOVE_STEPS.includes(currentStep)) { + stashedMapRef.current = { route: currentRoute, step: currentStep } + + setRecoveryMap({ + route: ROBOT_DOOR_OPEN.ROUTE, + step: ROBOT_DOOR_OPEN.STEPS.DOOR_OPEN, + }) + + reject( + new Error( + 'Cannot perform a command while the door is open. Routing to door open modal.' + ) + ) + } else { + resolve() + } + }) + }, [currentRoute, currentStep, isDoorOpen]) + + const setRobotInMotion = useCallback( (inMotion: boolean, robotMovingRoute?: RobotMovingRoute): Promise => { return new Promise((resolve, reject) => { if (inMotion) { @@ -122,11 +163,27 @@ export function useRouteUpdateActions( [currentRoute, currentStep] ) + const handleMotionRouting = ( + inMotion: boolean, + robotMovingRoute?: RobotMovingRoute + ): Promise => { + // Only check door status if we are fixin' to move. + if (inMotion) { + return checkDoorStatus().then(() => + setRobotInMotion(inMotion, robotMovingRoute) + ) + } else { + return setRobotInMotion(inMotion, robotMovingRoute) + } + } + return { goBackPrevStep, proceedNextStep, proceedToRouteAndStep, - setRobotInMotion, + handleMotionRouting, + stashedMap: stashedMapRef.current, + stashedMapRef: stashedMapRef, } } @@ -167,7 +224,7 @@ export function getRecoveryRouteNavigation( } type DetermineRecoveryRoutingParams = GetRouteUpdateActionsParams & { - updatedStep: string + updatedStep: RouteStep currentRoute: RecoveryRoute } diff --git a/app/src/organisms/ErrorRecoveryFlows/hooks/useShowDoorInfo.ts b/app/src/organisms/ErrorRecoveryFlows/hooks/useShowDoorInfo.ts index f73f1a22ae0..61b9131b15e 100644 --- a/app/src/organisms/ErrorRecoveryFlows/hooks/useShowDoorInfo.ts +++ b/app/src/organisms/ErrorRecoveryFlows/hooks/useShowDoorInfo.ts @@ -1,38 +1,55 @@ -import * as React from 'react' - import { RUN_STATUS_AWAITING_RECOVERY_BLOCKED_BY_OPEN_DOOR, RUN_STATUS_AWAITING_RECOVERY_PAUSED, } from '@opentrons/api-client' +import { RECOVERY_MAP_METADATA } from '../constants' + import type { RunStatus } from '@opentrons/api-client' import type { ErrorRecoveryFlowsProps } from '../index' +import type { IRecoveryMap } from '../types' const DOOR_OPEN_STATUSES: RunStatus[] = [ RUN_STATUS_AWAITING_RECOVERY_BLOCKED_BY_OPEN_DOOR, RUN_STATUS_AWAITING_RECOVERY_PAUSED, ] -// Whether the door is open or the user has not yet resumed the run after a door open event. +export interface UseShowDoorInfoResult { + /* Whether the door actually open, regardless of whether a door open event is prohibited . */ + isDoorOpen: boolean + /* Whether the door is open and prohibited to be open. */ + isProhibitedDoorOpen: boolean +} + +// Whether the door is open and not permitted to be open or the user has not yet resumed the run after a door open event. export function useShowDoorInfo( - runStatus: ErrorRecoveryFlowsProps['runStatus'] -): boolean { - const [showDoorModal, setShowDoorModal] = React.useState(false) - - React.useEffect(() => { - // TODO(jh, 07-16-24): "recovery paused" is only used for door status and therefore - // a valid way to ensure all apps show the door open prompt, however this could be problematic in the future. - // Consider restructuring this check once the takeover modals are added. - if (runStatus != null && DOOR_OPEN_STATUSES.includes(runStatus)) { - setShowDoorModal(true) - } else if ( - showDoorModal && - runStatus != null && - !DOOR_OPEN_STATUSES.includes(runStatus) - ) { - setShowDoorModal(false) + runStatus: ErrorRecoveryFlowsProps['runStatus'], + recoveryMap: IRecoveryMap +): UseShowDoorInfoResult { + // TODO(jh, 07-16-24): "recovery paused" is only used for door status and therefore + // a valid way to ensure all apps show the door open prompt, however this could be problematic in the future. + // Consider restructuring this check once the takeover modals are added. + const isDoorOpen = runStatus != null && DOOR_OPEN_STATUSES.includes(runStatus) + const isProhibitedDoorOpen = isDoorOpen && !isDoorPermittedOpen(recoveryMap) + + return { isDoorOpen, isProhibitedDoorOpen } +} + +function isDoorPermittedOpen(recoveryMap: IRecoveryMap): boolean { + const { route, step } = recoveryMap + + if (route in RECOVERY_MAP_METADATA) { + const routeConfig = RECOVERY_MAP_METADATA[route] + + if (step in routeConfig) { + // @ts-expect-error Overly nested type that TS struggles to infer. + return routeConfig[step].allowDoorOpen } - }, [runStatus, showDoorModal]) + } - return showDoorModal + console.error( + 'Unexpected route/step combination when attempting to get door metadata for recovery map: ', + recoveryMap + ) + return false } diff --git a/app/src/organisms/ErrorRecoveryFlows/index.tsx b/app/src/organisms/ErrorRecoveryFlows/index.tsx index 85ae5c806fa..fce380ced9f 100644 --- a/app/src/organisms/ErrorRecoveryFlows/index.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { useSelector } from 'react-redux' import { @@ -18,14 +18,13 @@ import { useHost } from '@opentrons/react-api-client' import { getIsOnDevice } from '/app/redux/config' import { ErrorRecoveryWizard, useERWizard } from './ErrorRecoveryWizard' -import { RunPausedSplash, useRunPausedSplash } from './RunPausedSplash' +import { RecoverySplash, useRecoverySplash } from './RecoverySplash' import { RecoveryTakeover } from './RecoveryTakeover' import { useCurrentlyRecoveringFrom, useERUtils, useRecoveryTakeover, useRetainedFailedCommandBySource, - useShowDoorInfo, } from './hooks' import type { RunStatus } from '@opentrons/api-client' @@ -58,11 +57,9 @@ export function useErrorRecoveryFlows( runId: string, runStatus: RunStatus | null ): UseErrorRecoveryResult { - const [isERActive, setIsERActive] = React.useState(false) + const [isERActive, setIsERActive] = useState(false) // If client accesses a valid ER runs status besides AWAITING_RECOVERY but accesses it outside of Error Recovery flows, don't show ER. - const [hasSeenAwaitingRecovery, setHasSeenAwaitingRecovery] = React.useState( - false - ) + const [hasSeenAwaitingRecovery, setHasSeenAwaitingRecovery] = useState(false) const failedCommand = useCurrentlyRecoveringFrom(runId, runStatus) if ( @@ -128,15 +125,12 @@ export function ErrorRecoveryFlows( const robotType = protocolAnalysis?.robotType ?? OT2_ROBOT_TYPE const robotName = useHost()?.robotName ?? 'robot' - const isDoorOpen = useShowDoorInfo(runStatus) const { showTakeover, isActiveUser, intent, toggleERWizAsActiveUser, } = useRecoveryTakeover(toggleERWizard) - const renderWizard = isActiveUser && (showERWizard || isDoorOpen) - const showSplash = useRunPausedSplash(isOnDevice, renderWizard) const recoveryUtils = useERUtils({ ...props, @@ -144,9 +138,15 @@ export function ErrorRecoveryFlows( toggleERWizAsActiveUser, isOnDevice, robotType, + showTakeover, failedCommand: failedCommandBySource, }) + const renderWizard = + isActiveUser && + (showERWizard || recoveryUtils.doorStatusUtils.isProhibitedDoorOpen) + const showSplash = useRecoverySplash(isOnDevice, renderWizard as boolean) + return ( <> {showTakeover ? ( @@ -163,12 +163,11 @@ export function ErrorRecoveryFlows( {...recoveryUtils} robotType={robotType} isOnDevice={isOnDevice} - isDoorOpen={isDoorOpen} failedCommand={failedCommandBySource} /> ) : null} {showSplash ? ( - ) : null} diff --git a/app/src/organisms/ErrorRecoveryFlows/shared/ErrorDetailsModal.tsx b/app/src/organisms/ErrorRecoveryFlows/shared/ErrorDetailsModal.tsx index ba898d94d7e..27b5b596c37 100644 --- a/app/src/organisms/ErrorRecoveryFlows/shared/ErrorDetailsModal.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/shared/ErrorDetailsModal.tsx @@ -16,7 +16,7 @@ import { import { useErrorName } from '../hooks' import { OddModal } from '/app/molecules/OddModal' -import { getModalPortalEl, getTopPortalEl } from '../../../App/portal' +import { getModalPortalEl, getTopPortalEl } from '/app/App/portal' import { ERROR_KINDS } from '../constants' import { InlineNotification } from '/app/atoms/InlineNotification' import { StepInfo } from './StepInfo' @@ -27,7 +27,7 @@ import type { IconProps } from '@opentrons/components' import type { OddModalHeaderBaseProps } from '/app/molecules/OddModal/types' import type { ERUtilsResults, useRetainedFailedCommandBySource } from '../hooks' import type { ErrorRecoveryFlowsProps } from '..' -import type { DesktopSizeType } from '../types' +import type { DesktopSizeType, ErrorKind } from '../types' export function useErrorDetailsModal(): { showModal: boolean @@ -59,11 +59,13 @@ export function ErrorDetailsModal(props: ErrorDetailsModalProps): JSX.Element { const errorKind = getErrorKind(failedCommand?.byRunRecord ?? null) const errorName = useErrorName(errorKind) - const getIsOverpressureErrorKind = (): boolean => { + const isNotificationErrorKind = (): boolean => { switch (errorKind) { case ERROR_KINDS.OVERPRESSURE_PREPARE_TO_ASPIRATE: case ERROR_KINDS.OVERPRESSURE_WHILE_ASPIRATING: case ERROR_KINDS.OVERPRESSURE_WHILE_DISPENSING: + case ERROR_KINDS.TIP_NOT_DETECTED: + case ERROR_KINDS.GRIPPER_ERROR: return true default: return false @@ -83,7 +85,9 @@ export function ErrorDetailsModal(props: ErrorDetailsModalProps): JSX.Element { toggleModal={toggleModal} modalHeader={modalHeader} > - {getIsOverpressureErrorKind() ? : null} + {isNotificationErrorKind() ? ( + + ) : null} , getTopPortalEl() ) @@ -94,7 +98,9 @@ export function ErrorDetailsModal(props: ErrorDetailsModalProps): JSX.Element { toggleModal={toggleModal} modalHeader={modalHeader} > - {getIsOverpressureErrorKind() ? : null} + {isNotificationErrorKind() ? ( + + ) : null} , getModalPortalEl() ) @@ -191,14 +197,62 @@ export function ErrorDetailsModalODD( ) } -export function OverpressureBanner(): JSX.Element | null { +export function NotificationBanner({ + errorKind, +}: { + errorKind: ErrorKind +}): JSX.Element { + const buildContent = (): JSX.Element => { + switch (errorKind) { + case ERROR_KINDS.OVERPRESSURE_PREPARE_TO_ASPIRATE: + case ERROR_KINDS.OVERPRESSURE_WHILE_ASPIRATING: + case ERROR_KINDS.OVERPRESSURE_WHILE_DISPENSING: + return + case ERROR_KINDS.TIP_NOT_DETECTED: + return + case ERROR_KINDS.GRIPPER_ERROR: + return + default: + console.error('Handle error kind notification banners explicitly.') + return
    + } + } + + return buildContent() +} + +export function OverpressureBanner(): JSX.Element { const { t } = useTranslation('error_recovery') return ( + ) +} + +export function TipNotDetectedBanner(): JSX.Element { + const { t } = useTranslation('error_recovery') + + return ( + + ) +} + +export function GripperErrorBanner(): JSX.Element { + const { t } = useTranslation('error_recovery') + + return ( + ) } diff --git a/app/src/organisms/ErrorRecoveryFlows/shared/FailedStepNextStep.tsx b/app/src/organisms/ErrorRecoveryFlows/shared/FailedStepNextStep.tsx index 8261e313848..bad7b536dfe 100644 --- a/app/src/organisms/ErrorRecoveryFlows/shared/FailedStepNextStep.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/shared/FailedStepNextStep.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { CategorizedStepContent } from '/app/molecules/InterventionModal' import type { RecoveryContentProps } from '../types' diff --git a/app/src/organisms/ErrorRecoveryFlows/shared/GripperIsHoldingLabware.tsx b/app/src/organisms/ErrorRecoveryFlows/shared/GripperIsHoldingLabware.tsx new file mode 100644 index 00000000000..94ef850834c --- /dev/null +++ b/app/src/organisms/ErrorRecoveryFlows/shared/GripperIsHoldingLabware.tsx @@ -0,0 +1,208 @@ +import { useState } from 'react' +import { useTranslation } from 'react-i18next' +import i18n from 'i18next' +import { css } from 'styled-components' + +import { + SPACING, + DIRECTION_COLUMN, + Flex, + StyledText, + RadioButton, +} from '@opentrons/components' + +import { RecoverySingleColumnContentWrapper } from './RecoveryContentWrapper' +import { RecoveryFooterButtons } from './RecoveryFooterButtons' +import { ODD_ONLY, DESKTOP_ONLY, RECOVERY_MAP } from '../constants' + +import type { JSX } from 'react' +import type { TFunction } from 'i18next' +import type { RecoveryContentProps } from '../types' +import { RecoveryRadioGroup } from '/app/organisms/ErrorRecoveryFlows/shared/RecoveryRadioGroup' + +type HoldingLabwareOption = 'yes' | 'no' +export const HOLDING_LABWARE_OPTIONS: HoldingLabwareOption[] = [ + 'yes', + 'no', +] as const + +export function GripperIsHoldingLabware({ + routeUpdateActions, + currentRecoveryOptionUtils, +}: RecoveryContentProps): JSX.Element { + const { + proceedNextStep, + proceedToRouteAndStep, + goBackPrevStep, + } = routeUpdateActions + const { selectedRecoveryOption } = currentRecoveryOptionUtils + const { + MANUAL_MOVE_AND_SKIP, + MANUAL_REPLACE_AND_RETRY, + OPTION_SELECTION, + } = RECOVERY_MAP + + const [selectedOption, setSelectionOption] = useState( + HOLDING_LABWARE_OPTIONS[0] + ) + const { t } = useTranslation(['error_recovery', 'shared']) + + const handleNoOption = (): void => { + switch (selectedRecoveryOption) { + case MANUAL_MOVE_AND_SKIP.ROUTE: + void proceedToRouteAndStep( + MANUAL_MOVE_AND_SKIP.ROUTE, + MANUAL_MOVE_AND_SKIP.STEPS.MANUAL_MOVE + ) + break + case MANUAL_REPLACE_AND_RETRY.ROUTE: + void proceedToRouteAndStep( + MANUAL_REPLACE_AND_RETRY.ROUTE, + MANUAL_REPLACE_AND_RETRY.STEPS.MANUAL_REPLACE + ) + break + default: { + console.error('Unexpected recovery option for gripper routing.') + void proceedToRouteAndStep(OPTION_SELECTION.ROUTE) + } + } + } + + const primaryOnClick = (): void => { + switch (selectedOption) { + case 'yes': + void proceedNextStep() + break + case 'no': + handleNoOption() + break + default: { + console.error('Unhandled primary onClick given gripper option') + } + } + } + + return ( + + + + {t('first_is_gripper_holding_labware')} + + + + + + + + + + + ) +} + +interface GripperHoldingOptionsProps { + t: TFunction + selectedOption: HoldingLabwareOption + setSelectedOption: (option: HoldingLabwareOption) => void +} + +function ODDGripperHoldingLwOptions({ + t, + selectedOption, + setSelectedOption, +}: GripperHoldingOptionsProps): JSX.Element { + return ( + + {HOLDING_LABWARE_OPTIONS.map(option => { + const optionCopy = getCopyFromOption(option, t) + return ( + { + setSelectedOption(option) + }} + isSelected={option === selectedOption} + radioButtonType="large" + /> + ) + })} + + ) +} + +function DesktopGripperHoldingLwOptions({ + t, + selectedOption, + setSelectedOption, +}: GripperHoldingOptionsProps): JSX.Element { + return ( + { + setSelectedOption(e.currentTarget.value as HoldingLabwareOption) + }} + value={selectedOption} + options={HOLDING_LABWARE_OPTIONS.map( + option => + ({ + value: option, + children: ( + + {getCopyFromOption(option, t)} + + ), + } as const) + )} + /> + ) +} + +export function getCopyFromOption( + option: HoldingLabwareOption, + t: TFunction +): string { + switch (option) { + case 'yes': + return i18n.format(t('shared:yes'), 'capitalize') + case 'no': + return i18n.format(t('shared:no'), 'capitalize') + default: + console.error('Unhandled copy option.') + return 'UNHANDLED OPTION' + } +} + +const CONTAINER_STYLE = css` + grid-gap: ${SPACING.spacing16}; + flex-direction: ${DIRECTION_COLUMN}; +` + +const ODD_OPTIONS_STLYE = css` + flex-direction: ${DIRECTION_COLUMN}; + width: 100%; + gap: ${SPACING.spacing8}; +` + +const RADIO_GAP = ` + gap: ${SPACING.spacing4}; +` diff --git a/app/src/organisms/ErrorRecoveryFlows/shared/GripperReleaseLabware.tsx b/app/src/organisms/ErrorRecoveryFlows/shared/GripperReleaseLabware.tsx new file mode 100644 index 00000000000..f57357f6451 --- /dev/null +++ b/app/src/organisms/ErrorRecoveryFlows/shared/GripperReleaseLabware.tsx @@ -0,0 +1,72 @@ +import { css } from 'styled-components' +import { useTranslation } from 'react-i18next' + +import { + SPACING, + DIRECTION_COLUMN, + RESPONSIVENESS, + Flex, + StyledText, +} from '@opentrons/components' + +import { TwoColumn } from '/app/molecules/InterventionModal' +import { InlineNotification } from '/app/atoms/InlineNotification' +import { RECOVERY_MAP } from '/app/organisms/ErrorRecoveryFlows/constants' +import { RecoveryFooterButtons } from './RecoveryFooterButtons' +import { RecoverySingleColumnContentWrapper } from './RecoveryContentWrapper' + +import type { JSX } from 'react' +import type { RecoveryContentProps } from '../types' + +export function GripperReleaseLabware({ + routeUpdateActions, +}: RecoveryContentProps): JSX.Element { + const { handleMotionRouting, goBackPrevStep } = routeUpdateActions + const { t } = useTranslation('error_recovery') + + const buildPrimaryOnClick = (): void => { + // Because the actual release command is executed on a delay, the execution behavior is deferred to the + // motion route. + void handleMotionRouting(true, RECOVERY_MAP.ROBOT_RELEASING_LABWARE.ROUTE) + } + + return ( + + + + + {t('release_labware_from_gripper')} + + + {t('take_any_necessary_precautions')} + + + +
    ANIMATION GOES HERE
    +
    + +
    + ) +} + +const LEFT_COL_COPY_STYLE = css` + flex-direction: ${DIRECTION_COLUMN}; + grid-gap: ${SPACING.spacing16}; + + @media ${RESPONSIVENESS.touchscreenMediaQuerySpecs} { + gap: ${SPACING.spacing24}; + } +` diff --git a/app/src/organisms/ErrorRecoveryFlows/shared/LeftColumnLabwareInfo.tsx b/app/src/organisms/ErrorRecoveryFlows/shared/LeftColumnLabwareInfo.tsx index 756165ed425..80c0422a940 100644 --- a/app/src/organisms/ErrorRecoveryFlows/shared/LeftColumnLabwareInfo.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/shared/LeftColumnLabwareInfo.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { InterventionContent } from '/app/molecules/InterventionModal/InterventionContent' diff --git a/app/src/organisms/ErrorRecoveryFlows/shared/RecoveryContentWrapper.tsx b/app/src/organisms/ErrorRecoveryFlows/shared/RecoveryContentWrapper.tsx index 53a66630047..9274079897f 100644 --- a/app/src/organisms/ErrorRecoveryFlows/shared/RecoveryContentWrapper.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/shared/RecoveryContentWrapper.tsx @@ -1,7 +1,7 @@ // TODO: replace this by making these props true of interventionmodal content wrappers // once error recovery uses interventionmodal consistently -import * as React from 'react' +import type * as React from 'react' import { css } from 'styled-components' import { DIRECTION_COLUMN, diff --git a/app/src/organisms/ErrorRecoveryFlows/shared/RecoveryFooterButtons.tsx b/app/src/organisms/ErrorRecoveryFlows/shared/RecoveryFooterButtons.tsx index b9aa7503baa..37e5cf54dde 100644 --- a/app/src/organisms/ErrorRecoveryFlows/shared/RecoveryFooterButtons.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/shared/RecoveryFooterButtons.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { css } from 'styled-components' diff --git a/app/src/organisms/ErrorRecoveryFlows/shared/RecoveryInterventionModal.tsx b/app/src/organisms/ErrorRecoveryFlows/shared/RecoveryInterventionModal.tsx index 901b5708974..631c7c0c962 100644 --- a/app/src/organisms/ErrorRecoveryFlows/shared/RecoveryInterventionModal.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/shared/RecoveryInterventionModal.tsx @@ -1,11 +1,16 @@ -import * as React from 'react' +import type * as React from 'react' import { createPortal } from 'react-dom' import { css } from 'styled-components' -import { Flex, RESPONSIVENESS, SPACING } from '@opentrons/components' +import { + Flex, + OVERFLOW_HIDDEN, + RESPONSIVENESS, + SPACING, +} from '@opentrons/components' import { InterventionModal } from '/app/molecules/InterventionModal' -import { getModalPortalEl, getTopPortalEl } from '../../../App/portal' +import { getModalPortalEl, getTopPortalEl } from '/app/App/portal' import type { ModalType } from '/app/molecules/InterventionModal' import type { DesktopSizeType } from '../types' @@ -51,6 +56,7 @@ const SMALL_MODAL_STYLE = css` height: 22rem; padding: ${SPACING.spacing32}; width: 100%; + overflow: ${OVERFLOW_HIDDEN}; @media ${RESPONSIVENESS.touchscreenMediaQuerySpecs} { padding: ${SPACING.spacing32}; @@ -60,6 +66,7 @@ const SMALL_MODAL_STYLE = css` const LARGE_MODAL_STYLE = css` height: 26.75rem; width: 100%; + overflow: ${OVERFLOW_HIDDEN}; @media ${RESPONSIVENESS.touchscreenMediaQuerySpecs} { height: 100%; diff --git a/app/src/organisms/ErrorRecoveryFlows/shared/RecoveryRadioGroup.tsx b/app/src/organisms/ErrorRecoveryFlows/shared/RecoveryRadioGroup.tsx index 571f0b0333a..d200123d0b3 100644 --- a/app/src/organisms/ErrorRecoveryFlows/shared/RecoveryRadioGroup.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/shared/RecoveryRadioGroup.tsx @@ -1,6 +1,4 @@ -import * as React from 'react' - -import type { ChangeEventHandler } from 'react' +import type { ChangeEventHandler, ReactNode, ComponentProps } from 'react' import { RadioGroup, SPACING, Flex } from '@opentrons/components' // note: this typescript stuff is so that e.currentTarget.value in the ChangeEventHandler @@ -12,12 +10,12 @@ export interface Target extends Omit { export type Options = Array<{ value: T - children: React.ReactNode + children: ReactNode }> export interface RecoveryRadioGroupProps extends Omit< - React.ComponentProps, + ComponentProps, 'labelTextClassName' | 'options' | 'onchange' > { options: Options diff --git a/app/src/organisms/ErrorRecoveryFlows/shared/ReplaceTips.tsx b/app/src/organisms/ErrorRecoveryFlows/shared/ReplaceTips.tsx deleted file mode 100644 index 08e600ae4be..00000000000 --- a/app/src/organisms/ErrorRecoveryFlows/shared/ReplaceTips.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import * as React from 'react' - -import { Flex } from '@opentrons/components' - -import { useTranslation } from 'react-i18next' -import { RecoverySingleColumnContentWrapper } from './RecoveryContentWrapper' -import { TwoColumn, DeckMapContent } from '/app/molecules/InterventionModal' -import { RecoveryFooterButtons } from './RecoveryFooterButtons' -import { LeftColumnLabwareInfo } from './LeftColumnLabwareInfo' -import { getSlotNameAndLwLocFrom } from '../hooks/useDeckMapUtils' - -import type { RecoveryContentProps } from '../types' - -export function ReplaceTips(props: RecoveryContentProps): JSX.Element | null { - const { - routeUpdateActions, - failedPipetteInfo, - failedLabwareUtils, - deckMapUtils, - } = props - const { relevantWellName, failedLabware } = failedLabwareUtils - const { proceedNextStep } = routeUpdateActions - const { t } = useTranslation('error_recovery') - - const primaryOnClick = (): void => { - void proceedNextStep() - } - const [slot] = getSlotNameAndLwLocFrom(failedLabware?.location ?? null, false) - const buildTitle = (): string => { - if (failedPipetteInfo?.data.channels === 96) { - return t('replace_with_new_tip_rack', { slot }) - } else { - return t('replace_used_tips_in_rack_location', { - location: relevantWellName, - slot, - }) - } - } - - return ( - - - - - - - - - - ) -} diff --git a/app/src/organisms/ErrorRecoveryFlows/shared/RetryStepInfo.tsx b/app/src/organisms/ErrorRecoveryFlows/shared/RetryStepInfo.tsx new file mode 100644 index 00000000000..d9bc3e1e23d --- /dev/null +++ b/app/src/organisms/ErrorRecoveryFlows/shared/RetryStepInfo.tsx @@ -0,0 +1,57 @@ +import { Trans, useTranslation } from 'react-i18next' + +import { LegacyStyledText } from '@opentrons/components' + +import { ERROR_KINDS, RECOVERY_MAP } from '../constants' +import { TwoColTextAndFailedStepNextStep } from './TwoColTextAndFailedStepNextStep' + +import type { RecoveryContentProps } from '../types' + +export function RetryStepInfo(props: RecoveryContentProps): JSX.Element { + const { routeUpdateActions, recoveryCommands, errorKind } = props + const { ROBOT_RETRYING_STEP } = RECOVERY_MAP + const { t } = useTranslation('error_recovery') + + const { retryFailedCommand, resumeRun } = recoveryCommands + const { handleMotionRouting } = routeUpdateActions + + const primaryBtnOnClick = (): Promise => { + return handleMotionRouting(true, ROBOT_RETRYING_STEP.ROUTE) + .then(() => retryFailedCommand()) + .then(() => { + resumeRun() + }) + } + + const buildBodyCopyKey = (): string => { + switch (errorKind) { + case ERROR_KINDS.TIP_NOT_DETECTED: + return 'take_necessary_actions_failed_pickup' + case ERROR_KINDS.GRIPPER_ERROR: + return 'robot_retry_failed_lw_movement' + default: + return 'take_necessary_actions' + } + } + const buildBodyText = (): JSX.Element => { + return ( + , + }} + /> + ) + } + + return ( + + ) +} diff --git a/app/src/organisms/ErrorRecoveryFlows/shared/SelectTips.tsx b/app/src/organisms/ErrorRecoveryFlows/shared/SelectTips.tsx index 21688dbf41c..0f55a5abe79 100644 --- a/app/src/organisms/ErrorRecoveryFlows/shared/SelectTips.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/shared/SelectTips.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { useTranslation } from 'react-i18next' import { RECOVERY_MAP } from '../constants' @@ -23,14 +23,14 @@ export function SelectTips(props: RecoveryContentProps): JSX.Element | null { const { pickUpTips } = recoveryCommands const { goBackPrevStep, - setRobotInMotion, + handleMotionRouting, proceedNextStep, } = routeUpdateActions const { t } = useTranslation('error_recovery') - const [showTipSelectModal, setShowTipSelectModal] = React.useState(false) + const [showTipSelectModal, setShowTipSelectModal] = useState(false) const primaryBtnOnClick = (): Promise => { - return setRobotInMotion(true, ROBOT_PICKING_UP_TIPS.ROUTE) + return handleMotionRouting(true, ROBOT_PICKING_UP_TIPS.ROUTE) .then(() => pickUpTips()) .then(() => proceedNextStep()) } diff --git a/app/src/organisms/ErrorRecoveryFlows/shared/SkipStepInfo.tsx b/app/src/organisms/ErrorRecoveryFlows/shared/SkipStepInfo.tsx new file mode 100644 index 00000000000..e7c50396ff3 --- /dev/null +++ b/app/src/organisms/ErrorRecoveryFlows/shared/SkipStepInfo.tsx @@ -0,0 +1,84 @@ +import { Trans, useTranslation } from 'react-i18next' + +import { LegacyStyledText } from '@opentrons/components' + +import { RECOVERY_MAP } from '../constants' +import { TwoColTextAndFailedStepNextStep } from './TwoColTextAndFailedStepNextStep' + +import type { RecoveryContentProps } from '../types' + +export function SkipStepInfo(props: RecoveryContentProps): JSX.Element { + const { + recoveryCommands, + routeUpdateActions, + currentRecoveryOptionUtils, + } = props + const { + SKIP_STEP_WITH_SAME_TIPS, + SKIP_STEP_WITH_NEW_TIPS, + MANUAL_MOVE_AND_SKIP, + } = RECOVERY_MAP + const { selectedRecoveryOption } = currentRecoveryOptionUtils + const { skipFailedCommand } = recoveryCommands + const { handleMotionRouting } = routeUpdateActions + const { ROBOT_SKIPPING_STEP } = RECOVERY_MAP + const { t } = useTranslation('error_recovery') + + const primaryBtnOnClick = (): Promise => { + return handleMotionRouting(true, ROBOT_SKIPPING_STEP.ROUTE).then(() => { + skipFailedCommand() + }) + } + + const buildTitleCopy = (): string => { + switch (selectedRecoveryOption) { + case SKIP_STEP_WITH_SAME_TIPS.ROUTE: + return t('skip_to_next_step_same_tips') + case SKIP_STEP_WITH_NEW_TIPS.ROUTE: + return t('skip_to_next_step_new_tips') + case MANUAL_MOVE_AND_SKIP.ROUTE: + return t('skip_to_next_step') + default: + console.error( + 'Unhandled skip step copy. Add the recovery option explicitly.' + ) + return 'UNEXPECTED STEP' + } + } + + const buildBodyCopyKey = (): string => { + switch (selectedRecoveryOption) { + case SKIP_STEP_WITH_SAME_TIPS.ROUTE: + case SKIP_STEP_WITH_NEW_TIPS.ROUTE: + return 'failed_dispense_step_not_completed' + case MANUAL_MOVE_AND_SKIP.ROUTE: + return 'robot_not_attempt_to_move_lw' + default: + console.error( + 'Unhandled skip step copy. Add the recovery option explicitly.' + ) + return 'UNEXPECTED STEP' + } + } + const buildBodyText = (): JSX.Element => { + return ( + , + }} + /> + ) + } + + return ( + + ) +} diff --git a/app/src/organisms/ErrorRecoveryFlows/shared/StepInfo.tsx b/app/src/organisms/ErrorRecoveryFlows/shared/StepInfo.tsx index 002ba1458f8..cd9d0c3d00e 100644 --- a/app/src/organisms/ErrorRecoveryFlows/shared/StepInfo.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/shared/StepInfo.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useTranslation } from 'react-i18next' diff --git a/app/src/organisms/ErrorRecoveryFlows/shared/TipSelection.tsx b/app/src/organisms/ErrorRecoveryFlows/shared/TipSelection.tsx index 2b9084cb0f4..cde82286c2f 100644 --- a/app/src/organisms/ErrorRecoveryFlows/shared/TipSelection.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/shared/TipSelection.tsx @@ -1,5 +1,3 @@ -import * as React from 'react' - import { WellSelection } from '../../WellSelection' import type { WellGroup } from '@opentrons/components' diff --git a/app/src/organisms/ErrorRecoveryFlows/shared/TipSelectionModal.tsx b/app/src/organisms/ErrorRecoveryFlows/shared/TipSelectionModal.tsx index 6fe9106b1c4..897a7d1f44c 100644 --- a/app/src/organisms/ErrorRecoveryFlows/shared/TipSelectionModal.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/shared/TipSelectionModal.tsx @@ -1,9 +1,8 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { createPortal } from 'react-dom' import { OddModal } from '/app/molecules/OddModal' -import { getTopPortalEl } from '../../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import { TipSelection } from './TipSelection' import type { OddModalHeaderBaseProps } from '/app/molecules/OddModal/types' diff --git a/app/src/organisms/ErrorRecoveryFlows/shared/TwoColLwInfoAndDeck.tsx b/app/src/organisms/ErrorRecoveryFlows/shared/TwoColLwInfoAndDeck.tsx new file mode 100644 index 00000000000..feb5a4b88b2 --- /dev/null +++ b/app/src/organisms/ErrorRecoveryFlows/shared/TwoColLwInfoAndDeck.tsx @@ -0,0 +1,98 @@ +import { Flex } from '@opentrons/components' + +import { useTranslation } from 'react-i18next' +import { RecoverySingleColumnContentWrapper } from './RecoveryContentWrapper' +import { TwoColumn, DeckMapContent } from '/app/molecules/InterventionModal' +import { RecoveryFooterButtons } from './RecoveryFooterButtons' +import { LeftColumnLabwareInfo } from './LeftColumnLabwareInfo' +import { getSlotNameAndLwLocFrom } from '../hooks/useDeckMapUtils' +import { RECOVERY_MAP } from '../constants' + +import type { RecoveryContentProps } from '../types' + +export function TwoColLwInfoAndDeck( + props: RecoveryContentProps +): JSX.Element | null { + const { + routeUpdateActions, + failedPipetteInfo, + failedLabwareUtils, + deckMapUtils, + currentRecoveryOptionUtils, + } = props + console.log('=>(TwoColLwInfoAndDeck.tsx:23) deckMapUtils', deckMapUtils) + const { + RETRY_NEW_TIPS, + SKIP_STEP_WITH_NEW_TIPS, + MANUAL_MOVE_AND_SKIP, + MANUAL_REPLACE_AND_RETRY, + } = RECOVERY_MAP + const { selectedRecoveryOption } = currentRecoveryOptionUtils + const { relevantWellName, failedLabware } = failedLabwareUtils + const { proceedNextStep } = routeUpdateActions + const { t } = useTranslation('error_recovery') + + const primaryOnClick = (): void => { + void proceedNextStep() + } + + const [slot] = getSlotNameAndLwLocFrom(failedLabware?.location ?? null, false) + + const buildTitle = (): string => { + switch (selectedRecoveryOption) { + case MANUAL_MOVE_AND_SKIP.ROUTE: + return t('manually_move_lw_on_deck') + case MANUAL_REPLACE_AND_RETRY.ROUTE: + return t('manually_replace_lw_on_deck') + case RETRY_NEW_TIPS.ROUTE: + case SKIP_STEP_WITH_NEW_TIPS.ROUTE: { + if (failedPipetteInfo?.data.channels === 96) { + return t('replace_with_new_tip_rack', { slot }) + } else { + return t('replace_used_tips_in_rack_location', { + location: relevantWellName, + slot, + }) + } + } + default: + console.error( + 'Unexpected recovery option. Handle retry step copy explicitly.' + ) + return 'UNEXPECTED RECOVERY OPTION' + } + } + + const buildBannerText = (): string => { + switch (selectedRecoveryOption) { + case MANUAL_MOVE_AND_SKIP.ROUTE: + case MANUAL_REPLACE_AND_RETRY.ROUTE: + return t('ensure_lw_is_accurately_placed') + case RETRY_NEW_TIPS.ROUTE: + case SKIP_STEP_WITH_NEW_TIPS.ROUTE: + return t('replace_tips_and_select_location') + default: + console.error( + 'Unexpected recovery option. Handle retry step copy explicitly.' + ) + return 'UNEXPECTED RECOVERY OPTION' + } + } + + return ( + + + + + + + + + + ) +} diff --git a/app/src/organisms/ErrorRecoveryFlows/shared/TwoColTextAndFailedStepNextStep.tsx b/app/src/organisms/ErrorRecoveryFlows/shared/TwoColTextAndFailedStepNextStep.tsx index e5b69c4cc67..57d251bdede 100644 --- a/app/src/organisms/ErrorRecoveryFlows/shared/TwoColTextAndFailedStepNextStep.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/shared/TwoColTextAndFailedStepNextStep.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { css } from 'styled-components' import { DIRECTION_COLUMN, @@ -23,6 +22,9 @@ type TwoColTextAndFailedStepNextStepProps = RecoveryContentProps & { secondaryBtnOnClickOverride?: () => void } +// TODO(jh, 10-01-24): In some views we inject copy and in others, we derive it in the view based on +// selected recovery option. + /** * Left Column: Title + body text * Right column: FailedStepNextStep diff --git a/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/ErrorDetailsModal.test.tsx b/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/ErrorDetailsModal.test.tsx index 6a88cdc8ccc..11b4df62700 100644 --- a/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/ErrorDetailsModal.test.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/ErrorDetailsModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, beforeEach, expect, vi } from 'vitest' import { screen, act, renderHook } from '@testing-library/react' @@ -12,6 +12,8 @@ import { useErrorDetailsModal, ErrorDetailsModal, OverpressureBanner, + TipNotDetectedBanner, + GripperErrorBanner, } from '../ErrorDetailsModal' vi.mock('react-dom', () => ({ @@ -92,7 +94,7 @@ describe('ErrorDetailsModal', () => { }) IS_ODD.forEach(isOnDevice => { - it('renders the OverpressureBanner when the error kind is an overpressure error', () => { + it('renders an inline banner when the error kind is an overpressure error', () => { props.failedCommand = { ...props.failedCommand, byRunRecord: { @@ -106,9 +108,23 @@ describe('ErrorDetailsModal', () => { screen.getByText('MOCK_INLINE_NOTIFICATION') }) - it('does not render the OverpressureBanner when the error kind is not an overpressure error', () => { + it('renders an inline banner when the error kind is a tip not detected error', () => { + props.failedCommand = { + ...props.failedCommand, + byRunRecord: { + ...props.failedCommand?.byRunRecord, + commandType: 'pickUpTip', + error: { isDefined: true, errorType: 'tipPhysicallyMissing' }, + }, + } as any render({ ...props, isOnDevice }) + screen.getByText('MOCK_INLINE_NOTIFICATION') + }) + + it('does not render a banner when the error kind is not explicitly handled', () => { + render({ ...props, isOnDevice, failedCommand: {} as any }) + expect(screen.queryByText('MOCK_INLINE_NOTIFICATION')).toBeNull() }) }) @@ -137,3 +153,51 @@ describe('OverpressureBanner', () => { ) }) }) + +describe('TipNotDetectedBanner', () => { + beforeEach(() => { + vi.mocked(InlineNotification).mockReturnValue( +
    MOCK_INLINE_NOTIFICATION
    + ) + }) + + it('renders the InlineNotification', () => { + renderWithProviders(, { + i18nInstance: i18n, + }) + expect(vi.mocked(InlineNotification)).toHaveBeenCalledWith( + expect.objectContaining({ + type: 'alert', + heading: + 'Tip presence errors are usually caused by improperly placed labware or inaccurate labware offsets', + message: + ' If the issue persists, cancel the run and initiate Labware Position Check', + }), + {} + ) + }) +}) + +describe('GripperErrorBanner', () => { + beforeEach(() => { + vi.mocked(InlineNotification).mockReturnValue( +
    MOCK_INLINE_NOTIFICATION
    + ) + }) + + it('renders the InlineNotification', () => { + renderWithProviders(, { + i18nInstance: i18n, + }) + expect(vi.mocked(InlineNotification)).toHaveBeenCalledWith( + expect.objectContaining({ + type: 'alert', + heading: + 'Gripper errors occur when the gripper stalls or collides with another object on the deck and are usually caused by improperly placed labware or inaccurate labware offsets', + message: + ' If the issue persists, cancel the run and rerun gripper calibration', + }), + {} + ) + }) +}) diff --git a/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/GripperIsHoldingLabware.test.tsx b/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/GripperIsHoldingLabware.test.tsx new file mode 100644 index 00000000000..95af112fa58 --- /dev/null +++ b/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/GripperIsHoldingLabware.test.tsx @@ -0,0 +1,130 @@ +import { expect, describe, it, vi, beforeEach } from 'vitest' +import { screen, fireEvent, waitFor } from '@testing-library/react' +import capitalize from 'lodash/capitalize' + +import { renderWithProviders } from '/app/__testing-utils__' +import { i18n } from '/app/i18n' +import { mockRecoveryContentProps } from '/app/organisms/ErrorRecoveryFlows/__fixtures__' +import { clickButtonLabeled } from '/app/organisms/ErrorRecoveryFlows/__tests__/util' +import { + GripperIsHoldingLabware, + HOLDING_LABWARE_OPTIONS, +} from '../GripperIsHoldingLabware' + +import type { Mock } from 'vitest' +import { RECOVERY_MAP } from '/app/organisms/ErrorRecoveryFlows/constants' + +const render = ( + props: React.ComponentProps +) => { + return renderWithProviders(, { + i18nInstance: i18n, + })[0] +} + +let mockProceedToRouteAndStep: Mock +let mockProceedNextStep: Mock + +describe('GripperIsHoldingLabware', () => { + let props: React.ComponentProps + beforeEach(() => { + mockProceedToRouteAndStep = vi.fn(() => Promise.resolve()) + mockProceedNextStep = vi.fn(() => Promise.resolve()) + + props = { + ...mockRecoveryContentProps, + routeUpdateActions: { + proceedToRouteAndStep: mockProceedToRouteAndStep, + proceedNextStep: mockProceedNextStep, + } as any, + } + }) + + it('renders appropriate title copy', () => { + render(props) + + screen.getByText('First, is the gripper holding labware?') + }) + + HOLDING_LABWARE_OPTIONS.forEach(option => { + it(`renders appropriate copy for the ${option} option`, () => { + render(props) + + expect(screen.getAllByText(capitalize(option))[0]) + }) + }) + ;[true, false].forEach(isOnDevice => { + it(`renders options when isOnDevice is ${isOnDevice}`, () => { + render(props) + + expect(screen.getAllByText(capitalize(HOLDING_LABWARE_OPTIONS[0]))[0]) + }) + }) + + it('proceeds to next step when the yes option is clicked', async () => { + render(props) + + fireEvent.click(screen.getAllByLabelText('Yes')[0]) + clickButtonLabeled('Continue') + + await waitFor(() => { + expect(mockProceedNextStep).toHaveBeenCalled() + }) + }) + + it(`proceeds to the correct step when the no option is clicked for ${RECOVERY_MAP.MANUAL_MOVE_AND_SKIP.ROUTE}`, async () => { + render({ + ...props, + currentRecoveryOptionUtils: { + selectedRecoveryOption: RECOVERY_MAP.MANUAL_MOVE_AND_SKIP.ROUTE, + } as any, + }) + + fireEvent.click(screen.getAllByLabelText('No')[0]) + clickButtonLabeled('Continue') + + await waitFor(() => { + expect(mockProceedToRouteAndStep).toHaveBeenCalledWith( + RECOVERY_MAP.MANUAL_MOVE_AND_SKIP.ROUTE, + RECOVERY_MAP.MANUAL_MOVE_AND_SKIP.STEPS.MANUAL_MOVE + ) + }) + }) + + it(`proceeds to the correct step when the no option is clicked for ${RECOVERY_MAP.MANUAL_REPLACE_AND_RETRY.ROUTE}`, async () => { + render({ + ...props, + currentRecoveryOptionUtils: { + selectedRecoveryOption: RECOVERY_MAP.MANUAL_REPLACE_AND_RETRY.ROUTE, + } as any, + }) + + fireEvent.click(screen.getAllByLabelText('No')[0]) + clickButtonLabeled('Continue') + + await waitFor(() => { + expect(mockProceedToRouteAndStep).toHaveBeenCalledWith( + RECOVERY_MAP.MANUAL_REPLACE_AND_RETRY.ROUTE, + RECOVERY_MAP.MANUAL_REPLACE_AND_RETRY.STEPS.MANUAL_REPLACE + ) + }) + }) + + it('proceeds to the a fallback route when an unhandled route is called', async () => { + render({ + ...props, + currentRecoveryOptionUtils: { + selectedRecoveryOption: RECOVERY_MAP.IGNORE_AND_SKIP.ROUTE, + } as any, + }) + + fireEvent.click(screen.getAllByLabelText('No')[0]) + clickButtonLabeled('Continue') + + await waitFor(() => { + expect(mockProceedToRouteAndStep).toHaveBeenCalledWith( + RECOVERY_MAP.OPTION_SELECTION.ROUTE + ) + }) + }) +}) diff --git a/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/GripperReleaseLabware.test.tsx b/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/GripperReleaseLabware.test.tsx new file mode 100644 index 00000000000..9a501e51459 --- /dev/null +++ b/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/GripperReleaseLabware.test.tsx @@ -0,0 +1,51 @@ +import { describe, expect, it, vi, beforeEach } from 'vitest' +import { screen } from '@testing-library/react' + +import { GripperReleaseLabware } from '../GripperReleaseLabware' +import { renderWithProviders } from '/app/__testing-utils__' +import { i18n } from '/app/i18n' +import { mockRecoveryContentProps } from '/app/organisms/ErrorRecoveryFlows/__fixtures__' +import { clickButtonLabeled } from '/app/organisms/ErrorRecoveryFlows/__tests__/util' + +import type { Mock } from 'vitest' + +const render = (props: React.ComponentProps) => { + return renderWithProviders(, { + i18nInstance: i18n, + })[0] +} + +describe('GripperReleaseLabware', () => { + let props: React.ComponentProps + let mockHandleMotionRouting: Mock + + beforeEach(() => { + mockHandleMotionRouting = vi.fn(() => Promise.resolve()) + + props = { + ...mockRecoveryContentProps, + routeUpdateActions: { + handleMotionRouting: mockHandleMotionRouting, + goBackPrevStep: vi.fn(), + } as any, + } + }) + + it('renders appropriate copy', () => { + render(props) + + screen.getByText('Release labware from gripper') + screen.getByText( + 'Take any necessary precautions before positioning yourself to stabilize or catch the labware. Once confirmed, a countdown will begin before the gripper releases.' + ) + screen.getByText('The labware will be released from its current height') + }) + + it('clicking the primary button has correct behavior', () => { + render(props) + + clickButtonLabeled('Release') + + expect(mockHandleMotionRouting).toHaveBeenCalled() + }) +}) diff --git a/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/LeftColumnLabwareInfo.test.tsx b/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/LeftColumnLabwareInfo.test.tsx index 6a070e62e77..c714c0bc8a2 100644 --- a/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/LeftColumnLabwareInfo.test.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/LeftColumnLabwareInfo.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, beforeEach, expect, vi } from 'vitest' import { screen } from '@testing-library/react' diff --git a/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/RecoveryFooterButtons.test.tsx b/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/RecoveryFooterButtons.test.tsx index 3520851ac0b..6381d2b579a 100644 --- a/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/RecoveryFooterButtons.test.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/RecoveryFooterButtons.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { vi, describe, it, expect, beforeEach } from 'vitest' import { screen, fireEvent } from '@testing-library/react' diff --git a/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/RetryStepInfo.test.tsx b/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/RetryStepInfo.test.tsx new file mode 100644 index 00000000000..67419387852 --- /dev/null +++ b/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/RetryStepInfo.test.tsx @@ -0,0 +1,102 @@ +import { describe, it, vi, expect, beforeEach } from 'vitest' +import { screen, waitFor } from '@testing-library/react' + +import { renderWithProviders } from '/app/__testing-utils__' +import { i18n } from '/app/i18n' +import { RetryStepInfo } from '../RetryStepInfo' +import { ERROR_KINDS, RECOVERY_MAP } from '../../constants' +import { clickButtonLabeled } from '/app/organisms/ErrorRecoveryFlows/__tests__/util' + +import type { Mock } from 'vitest' + +describe('RetryStepInfo', () => { + let props: React.ComponentProps + let mockHandleMotionRouting: Mock + let mockRetryFailedCommand: Mock + let mockResumeRun: Mock + + beforeEach(() => { + mockHandleMotionRouting = vi.fn(() => Promise.resolve()) + mockRetryFailedCommand = vi.fn(() => Promise.resolve()) + mockResumeRun = vi.fn() + + props = { + routeUpdateActions: { + handleMotionRouting: mockHandleMotionRouting, + } as any, + recoveryCommands: { + retryFailedCommand: mockRetryFailedCommand, + resumeRun: mockResumeRun, + } as any, + errorKind: ERROR_KINDS.GENERAL_ERROR, + } as any + }) + + const render = (props: React.ComponentProps) => { + return renderWithProviders(, { + i18nInstance: i18n, + })[0] + } + + it('calls correct functions when primary button is clicked', async () => { + render(props) + + clickButtonLabeled('Retry now') + + await waitFor(() => { + expect(mockHandleMotionRouting).toHaveBeenCalledWith( + true, + RECOVERY_MAP.ROBOT_RETRYING_STEP.ROUTE + ) + }) + await waitFor(() => { + expect(mockRetryFailedCommand).toHaveBeenCalled() + }) + await waitFor(() => { + expect(mockResumeRun).toHaveBeenCalled() + }) + await waitFor(() => { + expect(mockHandleMotionRouting.mock.invocationCallOrder[0]).toBeLessThan( + mockRetryFailedCommand.mock.invocationCallOrder[0] + ) + }) + await waitFor(() => { + expect(mockRetryFailedCommand.mock.invocationCallOrder[0]).toBeLessThan( + mockResumeRun.mock.invocationCallOrder[0] + ) + }) + }) + + it(`renders correct body text for ${ERROR_KINDS.TIP_NOT_DETECTED} error`, () => { + props.errorKind = ERROR_KINDS.TIP_NOT_DETECTED + + render(props) + + screen.getByText( + 'First, take any necessary actions to prepare the robot to retry the failed tip pickup.' + ) + screen.getByText('Then, close the robot door before proceeding.') + }) + + it(`renders correct body text for ${ERROR_KINDS.GRIPPER_ERROR}`, () => { + props.errorKind = ERROR_KINDS.GRIPPER_ERROR + + render(props) + + screen.getByText( + 'The robot will retry the failed labware movement step from where the labware was replaced on the deck.' + ) + screen.getByText('Close the robot door before proceeding.') + }) + + it('renders default body text for other error kinds', () => { + props.errorKind = ERROR_KINDS.GENERAL_ERROR + + render(props) + + screen.getByText( + 'First, take any necessary actions to prepare the robot to retry the failed step.' + ) + screen.getByText('Then, close the robot door before proceeding.') + }) +}) diff --git a/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/SelectTips.test.tsx b/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/SelectTips.test.tsx index 87526dfe8c0..88fd55e982d 100644 --- a/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/SelectTips.test.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/SelectTips.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, vi, expect, beforeEach } from 'vitest' import { screen, fireEvent, waitFor } from '@testing-library/react' @@ -24,13 +24,13 @@ const render = (props: React.ComponentProps) => { describe('SelectTips', () => { let props: React.ComponentProps let mockGoBackPrevStep: Mock - let mockSetRobotInMotion: Mock + let mockhandleMotionRouting: Mock let mockProceedNextStep: Mock let mockPickUpTips: Mock beforeEach(() => { mockGoBackPrevStep = vi.fn() - mockSetRobotInMotion = vi.fn(() => Promise.resolve()) + mockhandleMotionRouting = vi.fn(() => Promise.resolve()) mockProceedNextStep = vi.fn() mockPickUpTips = vi.fn(() => Promise.resolve()) @@ -38,7 +38,7 @@ describe('SelectTips', () => { ...mockRecoveryContentProps, routeUpdateActions: { goBackPrevStep: mockGoBackPrevStep, - setRobotInMotion: mockSetRobotInMotion, + handleMotionRouting: mockhandleMotionRouting, proceedNextStep: mockProceedNextStep, } as any, recoveryCommands: { @@ -69,7 +69,7 @@ describe('SelectTips', () => { }) it('calls the correct routeUpdateActions and recoveryCommands in the correct order when the primary button is clicked', async () => { - const setRobotInMotionMock = vi.fn(() => Promise.resolve()) + const handleMotionRoutingMock = vi.fn(() => Promise.resolve()) const pickUpTipsMock = vi.fn(() => Promise.resolve()) const proceedNextStepMock = vi.fn() @@ -78,7 +78,7 @@ describe('SelectTips', () => { } as any const mockRouteUpdateActions = { - setRobotInMotion: setRobotInMotionMock, + handleMotionRouting: handleMotionRoutingMock, proceedNextStep: proceedNextStepMock, } as any @@ -92,10 +92,10 @@ describe('SelectTips', () => { fireEvent.click(primaryBtn) await waitFor(() => { - expect(setRobotInMotionMock).toHaveBeenCalledTimes(1) + expect(handleMotionRoutingMock).toHaveBeenCalledTimes(1) }) await waitFor(() => { - expect(setRobotInMotionMock).toHaveBeenCalledWith( + expect(handleMotionRoutingMock).toHaveBeenCalledWith( true, RECOVERY_MAP.ROBOT_PICKING_UP_TIPS.ROUTE ) @@ -107,7 +107,7 @@ describe('SelectTips', () => { expect(proceedNextStepMock).toHaveBeenCalledTimes(1) }) - expect(setRobotInMotionMock.mock.invocationCallOrder[0]).toBeLessThan( + expect(handleMotionRoutingMock.mock.invocationCallOrder[0]).toBeLessThan( pickUpTipsMock.mock.invocationCallOrder[0] ) diff --git a/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/SkipStepInfo.test.tsx b/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/SkipStepInfo.test.tsx new file mode 100644 index 00000000000..77095a45a6d --- /dev/null +++ b/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/SkipStepInfo.test.tsx @@ -0,0 +1,104 @@ +import { describe, it, vi, expect, beforeEach } from 'vitest' +import { screen, waitFor } from '@testing-library/react' + +import { renderWithProviders } from '/app/__testing-utils__' +import { i18n } from '/app/i18n' +import { SkipStepInfo } from '../SkipStepInfo' +import { RECOVERY_MAP } from '../../constants' +import { clickButtonLabeled } from '/app/organisms/ErrorRecoveryFlows/__tests__/util' + +import type { Mock } from 'vitest' + +describe('SkipStepInfo', () => { + let props: React.ComponentProps + let mockHandleMotionRouting: Mock + let mockSkipFailedCommand: Mock + + beforeEach(() => { + mockHandleMotionRouting = vi.fn(() => Promise.resolve()) + mockSkipFailedCommand = vi.fn(() => Promise.resolve()) + + props = { + routeUpdateActions: { + handleMotionRouting: mockHandleMotionRouting, + } as any, + recoveryCommands: { + skipFailedCommand: mockSkipFailedCommand, + } as any, + currentRecoveryOptionUtils: { + selectedRecoveryOption: RECOVERY_MAP.SKIP_STEP_WITH_SAME_TIPS.ROUTE, + } as any, + } as any + }) + + const render = (props: React.ComponentProps) => { + return renderWithProviders(, { + i18nInstance: i18n, + })[0] + } + + it('calls correct functions when primary button is clicked', async () => { + render(props) + + clickButtonLabeled('Continue run now') + + await waitFor(() => { + expect(mockHandleMotionRouting).toHaveBeenCalledWith( + true, + RECOVERY_MAP.ROBOT_SKIPPING_STEP.ROUTE + ) + }) + await waitFor(() => { + expect(mockSkipFailedCommand).toHaveBeenCalled() + }) + await waitFor(() => { + expect(mockHandleMotionRouting.mock.invocationCallOrder[0]).toBeLessThan( + mockSkipFailedCommand.mock.invocationCallOrder[0] + ) + }) + }) + + it(`renders correct title and body text for ${RECOVERY_MAP.SKIP_STEP_WITH_SAME_TIPS.ROUTE}`, () => { + props.currentRecoveryOptionUtils.selectedRecoveryOption = + RECOVERY_MAP.SKIP_STEP_WITH_SAME_TIPS.ROUTE + render(props) + + screen.getByText('Skip to next step with same tips') + screen.getByText( + 'The failed dispense step will not be completed. The run will continue from the next step with the attached tips.' + ) + screen.getByText('Close the robot door before proceeding.') + }) + + it(`renders correct title and body text for ${RECOVERY_MAP.SKIP_STEP_WITH_NEW_TIPS.ROUTE}`, () => { + props.currentRecoveryOptionUtils.selectedRecoveryOption = + RECOVERY_MAP.SKIP_STEP_WITH_NEW_TIPS.ROUTE + render(props) + + screen.getByText('Skip to next step with new tips') + screen.getByText( + 'The failed dispense step will not be completed. The run will continue from the next step with the attached tips.' + ) + screen.getByText('Close the robot door before proceeding.') + }) + + it(`renders correct title and body text for ${RECOVERY_MAP.MANUAL_MOVE_AND_SKIP.ROUTE}`, () => { + props.currentRecoveryOptionUtils.selectedRecoveryOption = + RECOVERY_MAP.MANUAL_MOVE_AND_SKIP.ROUTE + render(props) + + screen.getByText('Skip to next step') + screen.getByText( + 'The robot will not attempt to move the labware again. The run will continue from the next step.' + ) + screen.getByText('Close the robot door before proceeding.') + }) + + it('renders error message for unexpected recovery option', () => { + props.currentRecoveryOptionUtils.selectedRecoveryOption = + RECOVERY_MAP.IGNORE_AND_SKIP.ROUTE + render(props) + + expect(screen.getAllByText('UNEXPECTED STEP')[0]).toBeInTheDocument() + }) +}) diff --git a/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/StepInfo.test.tsx b/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/StepInfo.test.tsx index 9a305804c6c..d6fbb50c345 100644 --- a/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/StepInfo.test.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/StepInfo.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, expect, beforeEach, vi } from 'vitest' import { screen } from '@testing-library/react' diff --git a/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/TipSelection.test.tsx b/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/TipSelection.test.tsx index 96da4e8144d..d8f48776a9c 100644 --- a/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/TipSelection.test.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/TipSelection.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, vi, expect, beforeEach } from 'vitest' import { screen } from '@testing-library/react' diff --git a/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/TipSelectionModal.test.tsx b/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/TipSelectionModal.test.tsx index 50ed13e34d4..fed5a44d4ce 100644 --- a/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/TipSelectionModal.test.tsx +++ b/app/src/organisms/ErrorRecoveryFlows/shared/__tests__/TipSelectionModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, vi, beforeEach, expect } from 'vitest' import { screen } from '@testing-library/react' diff --git a/app/src/organisms/ErrorRecoveryFlows/shared/index.ts b/app/src/organisms/ErrorRecoveryFlows/shared/index.ts index 955058e5311..4e6b2708c12 100644 --- a/app/src/organisms/ErrorRecoveryFlows/shared/index.ts +++ b/app/src/organisms/ErrorRecoveryFlows/shared/index.ts @@ -4,7 +4,7 @@ export { RecoveryTwoColumnContentWrapper, RecoveryODDOneDesktopTwoColumnContentWrapper, } from './RecoveryContentWrapper' -export { ReplaceTips } from './ReplaceTips' +export { TwoColLwInfoAndDeck } from './TwoColLwInfoAndDeck' export { SelectTips } from './SelectTips' export { TwoColTextAndFailedStepNextStep } from './TwoColTextAndFailedStepNextStep' export { LeftColumnLabwareInfo } from './LeftColumnLabwareInfo' @@ -15,5 +15,9 @@ export { useErrorDetailsModal, ErrorDetailsModal } from './ErrorDetailsModal' export { RecoveryInterventionModal } from './RecoveryInterventionModal' export { FailedStepNextStep } from './FailedStepNextStep' export { RecoveryRadioGroup } from './RecoveryRadioGroup' +export { GripperReleaseLabware } from './GripperReleaseLabware' +export { RetryStepInfo } from './RetryStepInfo' +export { SkipStepInfo } from './SkipStepInfo' +export { GripperIsHoldingLabware } from './GripperIsHoldingLabware' export type { RecoveryInterventionModalProps } from './RecoveryInterventionModal' diff --git a/app/src/organisms/ErrorRecoveryFlows/types.ts b/app/src/organisms/ErrorRecoveryFlows/types.ts index f3df4a86c50..588477aa813 100644 --- a/app/src/organisms/ErrorRecoveryFlows/types.ts +++ b/app/src/organisms/ErrorRecoveryFlows/types.ts @@ -1,14 +1,46 @@ import type { RunCommandSummary } from '@opentrons/api-client' -import type { ERROR_KINDS, RECOVERY_MAP, INVALID } from './constants' +import type { ERROR_KINDS, INVALID, RECOVERY_MAP } from './constants' import type { ErrorRecoveryWizardProps } from './ErrorRecoveryWizard' import type { DropTipFlowsRoute, DropTipFlowsStep, -} from '../DropTipWizardFlows/types' +} from '/app/organisms/DropTipWizardFlows/types' +/** + * Misc Recovery Types + */ export type FailedCommand = RunCommandSummary +export type ErrorKind = typeof ERROR_KINDS[keyof typeof ERROR_KINDS] + +/** + * Prop Specific Types + */ +export type RecoveryContentProps = ErrorRecoveryWizardProps & { + errorKind: ErrorKind + isOnDevice: boolean +} + +/** + * Drop Tip Specific Types + */ +export type ValidDropTipSubRoutes = DropTipFlowsRoute +export type ValidDropTipSubSteps = DropTipFlowsStep +export interface ValidDropTipSubMap { + route: ValidDropTipSubRoutes + step: ValidDropTipSubSteps | null +} + +/** + * Recovery Map Types + */ +export interface IRecoveryMap { + route: RecoveryRoute + step: RouteStep +} +type RecoveryMap = typeof RECOVERY_MAP export type InvalidStep = typeof INVALID -export type RecoveryRoute = typeof RECOVERY_MAP[keyof typeof RECOVERY_MAP]['ROUTE'] +export type RouteKey = RecoveryMap[keyof RecoveryMap]['ROUTE'] +export type RecoveryRoute = RouteKey export type RobotMovingRoute = | typeof RECOVERY_MAP['ROBOT_IN_MOTION']['ROUTE'] | typeof RECOVERY_MAP['ROBOT_RESUMING']['ROUTE'] @@ -16,63 +48,36 @@ export type RobotMovingRoute = | typeof RECOVERY_MAP['ROBOT_CANCELING']['ROUTE'] | typeof RECOVERY_MAP['ROBOT_PICKING_UP_TIPS']['ROUTE'] | typeof RECOVERY_MAP['ROBOT_SKIPPING_STEP']['ROUTE'] -export type ErrorKind = typeof ERROR_KINDS[keyof typeof ERROR_KINDS] + | typeof RECOVERY_MAP['ROBOT_RELEASING_LABWARE']['ROUTE'] -interface RecoveryMapDetails { - ROUTE: string - STEPS: Record - STEP_ORDER: RouteStep -} - -export type ValidSubRoutes = DropTipFlowsRoute -export type ValidSubSteps = DropTipFlowsStep -export interface ValidSubMap { - route: ValidSubRoutes - step: ValidSubSteps | null -} +type OriginalRouteKey = keyof RecoveryMap +type StepsForRoute = RecoveryMap[{ + [K in OriginalRouteKey]: RecoveryMap[K]['ROUTE'] extends R ? K : never +}[OriginalRouteKey]]['STEPS'] +type StepKey = StepsForRoute[keyof StepsForRoute] +export type AllStepTypes = { + [R in RouteKey]: StepKey +}[RouteKey] -export type RecoveryMap = Record +export type RouteStep = AllStepTypes | InvalidStep export type StepOrder = { [K in RecoveryRoute]: RouteStep[] } -type RecoveryStep< - K extends keyof RecoveryMap -> = RecoveryMap[K]['STEPS'][keyof RecoveryMap[K]['STEPS']] - -type RobotCancellingRunStep = RecoveryStep<'ROBOT_CANCELING'> -type RobotInMotionStep = RecoveryStep<'ROBOT_IN_MOTION'> -type RobotResumingStep = RecoveryStep<'ROBOT_RESUMING'> -type RobotRetryingCommandStep = RecoveryStep<'ROBOT_RETRYING_COMMAND'> -type BeforeBeginningStep = RecoveryStep<'BEFORE_BEGINNING'> -type CancelRunStep = RecoveryStep<'CANCEL_RUN'> -type DropTipStep = RecoveryStep<'DROP_TIP'> -type IgnoreAndResumeStep = RecoveryStep<'IGNORE_AND_RESUME'> -type RefillAndResumeStep = RecoveryStep<'REFILL_AND_RESUME'> -type ResumeStep = RecoveryStep<'RESUME'> -type OptionSelectionStep = RecoveryStep<'OPTION_SELECTION'> - -export type RouteStep = - | RobotInMotionStep - | RobotResumingStep - | RobotRetryingCommandStep - | BeforeBeginningStep - | CancelRunStep - | DropTipStep - | IgnoreAndResumeStep - | ResumeStep - | OptionSelectionStep - | RefillAndResumeStep - | RobotCancellingRunStep - -export interface IRecoveryMap { - route: RecoveryRoute - step: RouteStep +/** + * Route/Step Properties Types + */ +interface StepDoorConfig { + allowDoorOpen: boolean } - -export type RecoveryContentProps = ErrorRecoveryWizardProps & { - errorKind: ErrorKind - isOnDevice: boolean +type RouteDoorConfig = { + [Step in StepKey & string]: StepDoorConfig +} +export type RecoveryRouteStepMetadata = { + [R in RouteKey]: RouteDoorConfig } +/** + * Style Types + */ export type DesktopSizeType = 'desktop-small' | 'desktop-large' diff --git a/app/src/organisms/ErrorRecoveryFlows/utils/__tests__/getErrorKind.test.ts b/app/src/organisms/ErrorRecoveryFlows/utils/__tests__/getErrorKind.test.ts index adad317fd2a..b541a10e72a 100644 --- a/app/src/organisms/ErrorRecoveryFlows/utils/__tests__/getErrorKind.test.ts +++ b/app/src/organisms/ErrorRecoveryFlows/utils/__tests__/getErrorKind.test.ts @@ -39,6 +39,28 @@ describe('getErrorKind', () => { expect(result).toEqual(ERROR_KINDS.OVERPRESSURE_WHILE_DISPENSING) }) + it(`returns ${ERROR_KINDS.TIP_NOT_DETECTED} for ${DEFINED_ERROR_TYPES.TIP_PHYSICALLY_MISSING} errorType`, () => { + const result = getErrorKind({ + commandType: 'pickUpTip', + error: { + isDefined: true, + errorType: DEFINED_ERROR_TYPES.TIP_PHYSICALLY_MISSING, + } as RunCommandError, + } as RunTimeCommand) + expect(result).toEqual(ERROR_KINDS.TIP_NOT_DETECTED) + }) + + it(`returns ${ERROR_KINDS.GRIPPER_ERROR} for ${DEFINED_ERROR_TYPES.GRIPPER_MOVEMENT} errorType`, () => { + const result = getErrorKind({ + commandType: 'moveLabware', + error: { + isDefined: true, + errorType: DEFINED_ERROR_TYPES.GRIPPER_MOVEMENT, + } as RunCommandError, + } as RunTimeCommand) + expect(result).toEqual(ERROR_KINDS.GRIPPER_ERROR) + }) + it(`returns ${ERROR_KINDS.GENERAL_ERROR} for undefined errors`, () => { const result = getErrorKind({ commandType: 'aspirate', diff --git a/app/src/organisms/ErrorRecoveryFlows/utils/getErrorKind.ts b/app/src/organisms/ErrorRecoveryFlows/utils/getErrorKind.ts index bc16e11619c..c75e18026f5 100644 --- a/app/src/organisms/ErrorRecoveryFlows/utils/getErrorKind.ts +++ b/app/src/organisms/ErrorRecoveryFlows/utils/getErrorKind.ts @@ -13,23 +13,36 @@ export function getErrorKind(failedCommand: RunTimeCommand | null): ErrorKind { const errorType = failedCommand?.error?.errorType if (errorIsDefined) { + // todo(mm, 2024-07-02): Also handle aspirateInPlace and dispenseInPlace. + // https://opentrons.atlassian.net/browse/EXEC-593 if ( commandType === 'aspirate' && errorType === DEFINED_ERROR_TYPES.OVERPRESSURE - ) + ) { return ERROR_KINDS.OVERPRESSURE_WHILE_ASPIRATING - else if ( + } else if ( commandType === 'dispense' && errorType === DEFINED_ERROR_TYPES.OVERPRESSURE - ) + ) { return ERROR_KINDS.OVERPRESSURE_WHILE_DISPENSING - else if ( + } else if ( commandType === 'liquidProbe' && errorType === DEFINED_ERROR_TYPES.LIQUID_NOT_FOUND - ) + ) { return ERROR_KINDS.NO_LIQUID_DETECTED - // todo(mm, 2024-07-02): Also handle aspirateInPlace and dispenseInPlace. - // https://opentrons.atlassian.net/browse/EXEC-593 + } else if ( + commandType === 'pickUpTip' && + errorType === DEFINED_ERROR_TYPES.TIP_PHYSICALLY_MISSING + ) { + return ERROR_KINDS.TIP_NOT_DETECTED + } + // TODO(jh 09-25-24): Update the error to match what the server actually sends when available. + else if ( + commandType === 'moveLabware' && + errorType === DEFINED_ERROR_TYPES.GRIPPER_MOVEMENT + ) { + return ERROR_KINDS.GRIPPER_ERROR + } } return ERROR_KINDS.GENERAL_ERROR diff --git a/app/src/organisms/FirmwareUpdateModal/FirmwareUpdateTakeover.tsx b/app/src/organisms/FirmwareUpdateModal/FirmwareUpdateTakeover.tsx index d2cf969fbda..4611fb9372b 100644 --- a/app/src/organisms/FirmwareUpdateModal/FirmwareUpdateTakeover.tsx +++ b/app/src/organisms/FirmwareUpdateModal/FirmwareUpdateTakeover.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, useEffect } from 'react' import { createPortal } from 'react-dom' import { @@ -7,8 +7,8 @@ import { useSubsystemUpdateQuery, } from '@opentrons/react-api-client' import { useNotifyCurrentMaintenanceRun } from '/app/resources/maintenance_runs' -import { getTopPortalEl } from '../../App/portal' -import { useIsUnboxingFlowOngoing } from '../ODD/hooks' +import { getTopPortalEl } from '/app/App/portal' +import { useIsUnboxingFlowOngoing } from '/app/redux-resources/config' import { UpdateInProgressModal } from './UpdateInProgressModal' import { UpdateNeededModal } from './UpdateNeededModal' import type { Subsystem, InstrumentData } from '@opentrons/api-client' @@ -16,19 +16,18 @@ import type { Subsystem, InstrumentData } from '@opentrons/api-client' const POLL_INTERVAL_MS = 5000 export function FirmwareUpdateTakeover(): JSX.Element { - const [ - showUpdateNeededModal, - setShowUpdateNeededModal, - ] = React.useState(false) + const [showUpdateNeededModal, setShowUpdateNeededModal] = useState( + false + ) const [ initiatedSubsystemUpdate, setInitiatedSubsystemUpdate, - ] = React.useState(null) + ] = useState(null) const instrumentsData = useInstrumentsQuery({ refetchInterval: POLL_INTERVAL_MS, }).data?.data - const [instrumentsToUpdate, setInstrumentsToUpdate] = React.useState< + const [instrumentsToUpdate, setInstrumentsToUpdate] = useState< InstrumentData[] >([]) instrumentsData?.forEach(instrument => { @@ -41,7 +40,7 @@ export function FirmwareUpdateTakeover(): JSX.Element { setInstrumentsToUpdate([...instrumentsToUpdate, instrument]) } }) - const [indexToUpdate, setIndexToUpdate] = React.useState(0) + const [indexToUpdate, setIndexToUpdate] = useState(0) const { data: maintenanceRunData } = useNotifyCurrentMaintenanceRun({ refetchInterval: POLL_INTERVAL_MS, @@ -63,7 +62,7 @@ export function FirmwareUpdateTakeover(): JSX.Element { externalSubsystemUpdate?.id ?? null ) - React.useEffect(() => { + useEffect(() => { // in case instruments are updated elsewhere in the app, clear update needed list // when all instruments are ok but array has elements if ( diff --git a/app/src/organisms/FirmwareUpdateModal/UpdateInProgressModal.tsx b/app/src/organisms/FirmwareUpdateModal/UpdateInProgressModal.tsx index 9fa84bf49ba..a870f97bc67 100644 --- a/app/src/organisms/FirmwareUpdateModal/UpdateInProgressModal.tsx +++ b/app/src/organisms/FirmwareUpdateModal/UpdateInProgressModal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { css } from 'styled-components' import { diff --git a/app/src/organisms/FirmwareUpdateModal/UpdateNeededModal.tsx b/app/src/organisms/FirmwareUpdateModal/UpdateNeededModal.tsx index de00b12655d..c4e0db2225a 100644 --- a/app/src/organisms/FirmwareUpdateModal/UpdateNeededModal.tsx +++ b/app/src/organisms/FirmwareUpdateModal/UpdateNeededModal.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, useEffect } from 'react' import { createPortal } from 'react-dom' import { useTranslation, Trans } from 'react-i18next' import capitalize from 'lodash/capitalize' @@ -15,7 +15,7 @@ import { useUpdateSubsystemMutation, } from '@opentrons/react-api-client' import { LEFT, RIGHT } from '@opentrons/shared-data' -import { getTopPortalEl } from '../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import { SmallButton } from '/app/atoms/buttons' import { OddModal } from '/app/molecules/OddModal' import { UpdateInProgressModal } from './UpdateInProgressModal' @@ -34,9 +34,9 @@ interface UpdateNeededModalProps { export function UpdateNeededModal(props: UpdateNeededModalProps): JSX.Element { const { onClose, shouldExit, subsystem, setInitiatedSubsystemUpdate } = props const { t } = useTranslation('firmware_update') - const [updateId, setUpdateId] = React.useState(null) + const [updateId, setUpdateId] = useState(null) // when we move to the next subsystem to update, set updateId back to null - React.useEffect(() => { + useEffect(() => { setUpdateId(null) }, [subsystem]) @@ -58,7 +58,7 @@ export function UpdateNeededModal(props: UpdateNeededModalProps): JSX.Element { const status = updateData?.data.updateStatus const ongoingUpdateId = updateData?.data.id - React.useEffect(() => { + useEffect(() => { if (status === 'done') { setInitiatedSubsystemUpdate(null) } diff --git a/app/src/organisms/FirmwareUpdateModal/UpdateResultsModal.tsx b/app/src/organisms/FirmwareUpdateModal/UpdateResultsModal.tsx index 19c540e82f0..e305d451c7f 100644 --- a/app/src/organisms/FirmwareUpdateModal/UpdateResultsModal.tsx +++ b/app/src/organisms/FirmwareUpdateModal/UpdateResultsModal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation, Trans } from 'react-i18next' import { ALIGN_CENTER, @@ -13,7 +12,7 @@ import { } from '@opentrons/components' import { SmallButton } from '/app/atoms/buttons' import { OddModal } from '/app/molecules/OddModal' -import { usePipetteModelSpecs } from '/app/resources/instruments/hooks' +import { usePipetteModelSpecs } from '/app/local-resources/instruments' import type { InstrumentData, PipetteData } from '@opentrons/api-client' import type { OddModalHeaderBaseProps } from '/app/molecules/OddModal/types' diff --git a/app/src/organisms/FirmwareUpdateModal/__tests__/FirmwareUpdateModal.test.tsx b/app/src/organisms/FirmwareUpdateModal/__tests__/FirmwareUpdateModal.test.tsx index 08a0c8f6aad..bb205f3f852 100644 --- a/app/src/organisms/FirmwareUpdateModal/__tests__/FirmwareUpdateModal.test.tsx +++ b/app/src/organisms/FirmwareUpdateModal/__tests__/FirmwareUpdateModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { act, screen, waitFor } from '@testing-library/react' import { describe, it, vi, beforeEach, expect } from 'vitest' import '@testing-library/jest-dom/vitest' diff --git a/app/src/organisms/FirmwareUpdateModal/__tests__/FirmwareUpdateTakeover.test.tsx b/app/src/organisms/FirmwareUpdateModal/__tests__/FirmwareUpdateTakeover.test.tsx index ca2ee5a9d90..ae70b8ab2db 100644 --- a/app/src/organisms/FirmwareUpdateModal/__tests__/FirmwareUpdateTakeover.test.tsx +++ b/app/src/organisms/FirmwareUpdateModal/__tests__/FirmwareUpdateTakeover.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { screen } from '@testing-library/react' import { describe, it, vi, beforeEach, expect } from 'vitest' import '@testing-library/jest-dom/vitest' @@ -12,7 +11,7 @@ import { import { i18n } from '/app/i18n' import { UpdateNeededModal } from '../UpdateNeededModal' import { UpdateInProgressModal } from '../UpdateInProgressModal' -import { useIsUnboxingFlowOngoing } from '../../ODD/hooks' +import { useIsUnboxingFlowOngoing } from '/app/redux-resources/config' import { FirmwareUpdateTakeover } from '../FirmwareUpdateTakeover' import { useNotifyCurrentMaintenanceRun } from '/app/resources/maintenance_runs' @@ -21,7 +20,7 @@ import type { BadPipette, PipetteData } from '@opentrons/api-client' vi.mock('@opentrons/react-api-client') vi.mock('../UpdateNeededModal') vi.mock('../UpdateInProgressModal') -vi.mock('../../ODD/hooks') +vi.mock('/app/redux-resources/config') vi.mock('/app/resources/maintenance_runs') const render = () => { diff --git a/app/src/organisms/FirmwareUpdateModal/__tests__/UpdateInProgressModal.test.tsx b/app/src/organisms/FirmwareUpdateModal/__tests__/UpdateInProgressModal.test.tsx index 496da7421fb..f2ce6047481 100644 --- a/app/src/organisms/FirmwareUpdateModal/__tests__/UpdateInProgressModal.test.tsx +++ b/app/src/organisms/FirmwareUpdateModal/__tests__/UpdateInProgressModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' import { screen } from '@testing-library/react' diff --git a/app/src/organisms/FirmwareUpdateModal/__tests__/UpdateNeededModal.test.tsx b/app/src/organisms/FirmwareUpdateModal/__tests__/UpdateNeededModal.test.tsx index 545854dbf1e..53c91223b47 100644 --- a/app/src/organisms/FirmwareUpdateModal/__tests__/UpdateNeededModal.test.tsx +++ b/app/src/organisms/FirmwareUpdateModal/__tests__/UpdateNeededModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, vi, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' import { renderWithProviders } from '/app/__testing-utils__' diff --git a/app/src/organisms/FirmwareUpdateModal/__tests__/UpdateResultsModal.test.tsx b/app/src/organisms/FirmwareUpdateModal/__tests__/UpdateResultsModal.test.tsx index 47095ebdc5e..29c5233db45 100644 --- a/app/src/organisms/FirmwareUpdateModal/__tests__/UpdateResultsModal.test.tsx +++ b/app/src/organisms/FirmwareUpdateModal/__tests__/UpdateResultsModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, vi, beforeEach, expect } from 'vitest' import '@testing-library/jest-dom/vitest' diff --git a/app/src/organisms/FirmwareUpdateModal/index.tsx b/app/src/organisms/FirmwareUpdateModal/index.tsx index cb449588ea1..0ed40409797 100644 --- a/app/src/organisms/FirmwareUpdateModal/index.tsx +++ b/app/src/organisms/FirmwareUpdateModal/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, useEffect } from 'react' import { css } from 'styled-components' import { ALIGN_CENTER, @@ -73,8 +73,8 @@ export const FirmwareUpdateModal = ( description, isOnDevice, } = props - const [updateId, setUpdateId] = React.useState(null) - const [firmwareText, setFirmwareText] = React.useState(null) + const [updateId, setUpdateId] = useState(null) + const [firmwareText, setFirmwareText] = useState(null) const { data: attachedInstruments, refetch: refetchInstruments, @@ -92,7 +92,7 @@ export const FirmwareUpdateModal = ( (i): i is BadGripper | BadPipette => !i.ok && i.subsystem === subsystem ) ?? false - React.useEffect(() => { + useEffect(() => { setTimeout(() => { if (!updateNeeded) { setFirmwareText(proceedDescription) @@ -107,7 +107,7 @@ export const FirmwareUpdateModal = ( const { data: updateData } = useSubsystemUpdateQuery(updateId) const status = updateData?.data.updateStatus - React.useEffect(() => { + useEffect(() => { if ((status != null || updateNeeded) && firmwareText !== description) { setFirmwareText(description) } diff --git a/app/src/organisms/GripperWizardFlows/BeforeBeginning.tsx b/app/src/organisms/GripperWizardFlows/BeforeBeginning.tsx index 463de1f6223..89395aeee10 100644 --- a/app/src/organisms/GripperWizardFlows/BeforeBeginning.tsx +++ b/app/src/organisms/GripperWizardFlows/BeforeBeginning.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useEffect } from 'react' import { Trans, useTranslation } from 'react-i18next' import { COLORS, LegacyStyledText } from '@opentrons/components' import { EXTENSION } from '@opentrons/shared-data' @@ -76,7 +76,7 @@ export const BeforeBeginning = ( createdMaintenanceRunId, } = props const { t } = useTranslation(['gripper_wizard_flows', 'shared', 'branded']) - React.useEffect(() => { + useEffect(() => { if (createdMaintenanceRunId == null) { createMaintenanceRun({}) } diff --git a/app/src/organisms/GripperWizardFlows/ExitConfirmation.tsx b/app/src/organisms/GripperWizardFlows/ExitConfirmation.tsx index 3994536df78..28fb21635ac 100644 --- a/app/src/organisms/GripperWizardFlows/ExitConfirmation.tsx +++ b/app/src/organisms/GripperWizardFlows/ExitConfirmation.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useSelector } from 'react-redux' import { useTranslation } from 'react-i18next' import { diff --git a/app/src/organisms/GripperWizardFlows/GripperWizardFlows.stories.tsx b/app/src/organisms/GripperWizardFlows/GripperWizardFlows.stories.tsx index b960c38ce77..b5318daf5d8 100644 --- a/app/src/organisms/GripperWizardFlows/GripperWizardFlows.stories.tsx +++ b/app/src/organisms/GripperWizardFlows/GripperWizardFlows.stories.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { QueryClient, QueryClientProvider } from 'react-query' import { Provider } from 'react-redux' import { createStore } from 'redux' diff --git a/app/src/organisms/GripperWizardFlows/MountGripper.tsx b/app/src/organisms/GripperWizardFlows/MountGripper.tsx index acda62ef28c..4a428ac69b1 100644 --- a/app/src/organisms/GripperWizardFlows/MountGripper.tsx +++ b/app/src/organisms/GripperWizardFlows/MountGripper.tsx @@ -14,7 +14,7 @@ import { } from '@opentrons/components' import { useInstrumentsQuery } from '@opentrons/react-api-client' import { css } from 'styled-components' -import * as React from 'react' +import { useState } from 'react' import { useTranslation } from 'react-i18next' import { getIsOnDevice } from '/app/redux/config' import { SmallButton } from '/app/atoms/buttons' @@ -62,8 +62,8 @@ export const MountGripper = ( const { proceed, isRobotMoving } = props const { t } = useTranslation(['gripper_wizard_flows', 'shared', 'branded']) const isOnDevice = useSelector(getIsOnDevice) - const [showUnableToDetect, setShowUnableToDetect] = React.useState(false) - const [isPending, setIsPending] = React.useState(false) + const [showUnableToDetect, setShowUnableToDetect] = useState(false) + const [isPending, setIsPending] = useState(false) const { data: instrumentsQueryData, refetch } = useInstrumentsQuery({ refetchInterval: QUICK_GRIPPER_POLL_MS, }) diff --git a/app/src/organisms/GripperWizardFlows/MovePin.tsx b/app/src/organisms/GripperWizardFlows/MovePin.tsx index 1f62f769daa..1cf5153eaa5 100644 --- a/app/src/organisms/GripperWizardFlows/MovePin.tsx +++ b/app/src/organisms/GripperWizardFlows/MovePin.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useTranslation, Trans } from 'react-i18next' import { EXTENSION } from '@opentrons/shared-data' import { diff --git a/app/src/organisms/GripperWizardFlows/Success.tsx b/app/src/organisms/GripperWizardFlows/Success.tsx index 9d4e4a0ec14..bbd36b4ca37 100644 --- a/app/src/organisms/GripperWizardFlows/Success.tsx +++ b/app/src/organisms/GripperWizardFlows/Success.tsx @@ -1,5 +1,4 @@ import { useSelector } from 'react-redux' -import * as React from 'react' import { css } from 'styled-components' import { useTranslation } from 'react-i18next' import { diff --git a/app/src/organisms/GripperWizardFlows/UnmountGripper.tsx b/app/src/organisms/GripperWizardFlows/UnmountGripper.tsx index f6a36e1cfed..273b211ec4d 100644 --- a/app/src/organisms/GripperWizardFlows/UnmountGripper.tsx +++ b/app/src/organisms/GripperWizardFlows/UnmountGripper.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { useSelector } from 'react-redux' import { useTranslation } from 'react-i18next' import { @@ -55,7 +55,7 @@ export const UnmountGripper = ( const { proceed, isRobotMoving, goBack, chainRunCommands } = props const { t } = useTranslation(['gripper_wizard_flows', 'shared', 'branded']) const isOnDevice = useSelector(getIsOnDevice) - const [isPending, setIsPending] = React.useState(false) + const [isPending, setIsPending] = useState(false) const { data: instrumentsQueryData, refetch } = useInstrumentsQuery({ refetchInterval: QUICK_GRIPPER_POLL_MS, }) @@ -63,10 +63,9 @@ export const UnmountGripper = ( (i): i is GripperData => i.instrumentType === 'gripper' && i.ok ) - const [ - showGripperStillDetected, - setShowGripperStillDetected, - ] = React.useState(false) + const [showGripperStillDetected, setShowGripperStillDetected] = useState( + false + ) const handleContinue = (): void => { setIsPending(true) refetch() diff --git a/app/src/organisms/GripperWizardFlows/__tests__/BeforeBeginning.test.tsx b/app/src/organisms/GripperWizardFlows/__tests__/BeforeBeginning.test.tsx index d2a2fda6b64..888e6ba30b2 100644 --- a/app/src/organisms/GripperWizardFlows/__tests__/BeforeBeginning.test.tsx +++ b/app/src/organisms/GripperWizardFlows/__tests__/BeforeBeginning.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen, waitFor } from '@testing-library/react' import { describe, it, vi, beforeEach, expect } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' diff --git a/app/src/organisms/GripperWizardFlows/__tests__/ExitConfirmation.test.tsx b/app/src/organisms/GripperWizardFlows/__tests__/ExitConfirmation.test.tsx index 9865b9f3143..4b20f234bfb 100644 --- a/app/src/organisms/GripperWizardFlows/__tests__/ExitConfirmation.test.tsx +++ b/app/src/organisms/GripperWizardFlows/__tests__/ExitConfirmation.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, vi, expect } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' diff --git a/app/src/organisms/GripperWizardFlows/__tests__/MountGripper.test.tsx b/app/src/organisms/GripperWizardFlows/__tests__/MountGripper.test.tsx index 6a351304f78..cb2020c5bfe 100644 --- a/app/src/organisms/GripperWizardFlows/__tests__/MountGripper.test.tsx +++ b/app/src/organisms/GripperWizardFlows/__tests__/MountGripper.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen, waitFor } from '@testing-library/react' import { describe, it, vi, beforeEach, expect } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' diff --git a/app/src/organisms/GripperWizardFlows/__tests__/MovePin.test.tsx b/app/src/organisms/GripperWizardFlows/__tests__/MovePin.test.tsx index 136d7f01da1..ecf3ef6f3c0 100644 --- a/app/src/organisms/GripperWizardFlows/__tests__/MovePin.test.tsx +++ b/app/src/organisms/GripperWizardFlows/__tests__/MovePin.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, vi, beforeEach, expect, afterEach } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' diff --git a/app/src/organisms/GripperWizardFlows/__tests__/Success.test.tsx b/app/src/organisms/GripperWizardFlows/__tests__/Success.test.tsx index ad42aca7da3..d071fda3c69 100644 --- a/app/src/organisms/GripperWizardFlows/__tests__/Success.test.tsx +++ b/app/src/organisms/GripperWizardFlows/__tests__/Success.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, vi, expect } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' diff --git a/app/src/organisms/GripperWizardFlows/__tests__/UnmountGripper.test.tsx b/app/src/organisms/GripperWizardFlows/__tests__/UnmountGripper.test.tsx index 64ddbe1e709..73c2d863366 100644 --- a/app/src/organisms/GripperWizardFlows/__tests__/UnmountGripper.test.tsx +++ b/app/src/organisms/GripperWizardFlows/__tests__/UnmountGripper.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, vi, beforeEach, expect } from 'vitest' import { fireEvent, screen, waitFor } from '@testing-library/react' diff --git a/app/src/organisms/GripperWizardFlows/index.tsx b/app/src/organisms/GripperWizardFlows/index.tsx index 553c3a7308a..34f07d39a35 100644 --- a/app/src/organisms/GripperWizardFlows/index.tsx +++ b/app/src/organisms/GripperWizardFlows/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, useEffect } from 'react' import { createPortal } from 'react-dom' import { useTranslation } from 'react-i18next' import { useSelector } from 'react-redux' @@ -19,7 +19,7 @@ import { useChainMaintenanceCommands, useNotifyCurrentMaintenanceRun, } from '/app/resources/maintenance_runs' -import { getTopPortalEl } from '../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import { WizardHeader } from '/app/molecules/WizardHeader' import { SimpleWizardBody } from '/app/molecules/SimpleWizardBody' import { FirmwareUpdateModal } from '../FirmwareUpdateModal' @@ -68,7 +68,7 @@ export function GripperWizardFlows( isLoading: isCommandLoading, } = useCreateMaintenanceCommandMutation() - const [createdMaintenanceRunId, setCreatedMaintenanceRunId] = React.useState< + const [createdMaintenanceRunId, setCreatedMaintenanceRunId] = useState< string | null >(null) @@ -77,7 +77,7 @@ export function GripperWizardFlows( const [ monitorMaintenanceRunForDeletion, setMonitorMaintenanceRunForDeletion, - ] = React.useState(false) + ] = useState(false) const { createTargetedMaintenanceRun, @@ -95,7 +95,7 @@ export function GripperWizardFlows( // this will close the modal in case the run was deleted by the terminate // activity modal on the ODD - React.useEffect(() => { + useEffect(() => { if ( createdMaintenanceRunId !== null && maintenanceRunData?.data.id === createdMaintenanceRunId @@ -116,16 +116,17 @@ export function GripperWizardFlows( closeFlow, ]) - const [isExiting, setIsExiting] = React.useState(false) - const [errorMessage, setErrorMessage] = React.useState(null) + const [isExiting, setIsExiting] = useState(false) + const [errorMessage, setErrorMessage] = useState(null) const handleClose = (): void => { - if (props?.onComplete != null) props.onComplete() + if (props?.onComplete != null) { + props.onComplete() + } if (maintenanceRunData != null) { deleteMaintenanceRun(maintenanceRunData?.data.id) - } else { - closeFlow() } + closeFlow() } const { @@ -141,20 +142,21 @@ export function GripperWizardFlows( }) const handleCleanUpAndClose = (): void => { - if (maintenanceRunData?.data.id == null) handleClose() - else { + if (maintenanceRunData?.data.id == null) { + handleClose() + } else { chainRunCommands( maintenanceRunData?.data.id, [{ commandType: 'home' as const, params: {} }], false ) - .then(() => { - handleClose() - }) .catch(error => { setIsExiting(true) setErrorMessage(error.message as string) }) + .finally(() => { + handleClose() + }) } } @@ -234,11 +236,8 @@ export const GripperWizard = ( const isOnDevice = useSelector(getIsOnDevice) const { t } = useTranslation('gripper_wizard_flows') const gripperWizardSteps = getGripperWizardSteps(flowType) - const [currentStepIndex, setCurrentStepIndex] = React.useState(0) - const [ - frontJawOffset, - setFrontJawOffset, - ] = React.useState(null) + const [currentStepIndex, setCurrentStepIndex] = useState(0) + const [frontJawOffset, setFrontJawOffset] = useState(null) const totalStepCount = gripperWizardSteps.length - 1 const currentStep = gripperWizardSteps?.[currentStepIndex] diff --git a/app/src/organisms/IncompatibleModule/IncompatibleModuleDesktopModalBody.tsx b/app/src/organisms/IncompatibleModule/IncompatibleModuleDesktopModalBody.tsx index 036c0db566f..a1fd7087b06 100644 --- a/app/src/organisms/IncompatibleModule/IncompatibleModuleDesktopModalBody.tsx +++ b/app/src/organisms/IncompatibleModule/IncompatibleModuleDesktopModalBody.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation, Trans } from 'react-i18next' import { DIRECTION_COLUMN, diff --git a/app/src/organisms/IncompatibleModule/IncompatibleModuleODDModalBody.tsx b/app/src/organisms/IncompatibleModule/IncompatibleModuleODDModalBody.tsx index fb08e1a8bcc..459871b4803 100644 --- a/app/src/organisms/IncompatibleModule/IncompatibleModuleODDModalBody.tsx +++ b/app/src/organisms/IncompatibleModule/IncompatibleModuleODDModalBody.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation, Trans } from 'react-i18next' import capitalize from 'lodash/capitalize' import { diff --git a/app/src/organisms/IncompatibleModule/IncompatibleModuleTakeover.tsx b/app/src/organisms/IncompatibleModule/IncompatibleModuleTakeover.tsx index 3be98ad14fc..b110ffb0a1e 100644 --- a/app/src/organisms/IncompatibleModule/IncompatibleModuleTakeover.tsx +++ b/app/src/organisms/IncompatibleModule/IncompatibleModuleTakeover.tsx @@ -1,8 +1,7 @@ -import * as React from 'react' import { createPortal } from 'react-dom' import { IncompatibleModuleODDModalBody } from './IncompatibleModuleODDModalBody' import { IncompatibleModuleDesktopModalBody } from './IncompatibleModuleDesktopModalBody' -import { getTopPortalEl, getModalPortalEl } from '../../App/portal' +import { getTopPortalEl, getModalPortalEl } from '/app/App/portal' import { useIncompatibleModulesAttached } from './hooks' const POLL_INTERVAL_MS = 5000 diff --git a/app/src/organisms/IncompatibleModule/__tests__/IncompatibleModuleDesktopModalBody.test.tsx b/app/src/organisms/IncompatibleModule/__tests__/IncompatibleModuleDesktopModalBody.test.tsx index 245073c15a6..41edc4439c6 100644 --- a/app/src/organisms/IncompatibleModule/__tests__/IncompatibleModuleDesktopModalBody.test.tsx +++ b/app/src/organisms/IncompatibleModule/__tests__/IncompatibleModuleDesktopModalBody.test.tsx @@ -1,4 +1,4 @@ -import React from 'react' +import type * as React from 'react' import { screen } from '@testing-library/react' import { describe, it, beforeEach, vi } from 'vitest' import { when } from 'vitest-when' diff --git a/app/src/organisms/IncompatibleModule/__tests__/IncompatibleModuleODDModalBody.test.tsx b/app/src/organisms/IncompatibleModule/__tests__/IncompatibleModuleODDModalBody.test.tsx index 1a6ce6854ae..e2d4e1a2af0 100644 --- a/app/src/organisms/IncompatibleModule/__tests__/IncompatibleModuleODDModalBody.test.tsx +++ b/app/src/organisms/IncompatibleModule/__tests__/IncompatibleModuleODDModalBody.test.tsx @@ -1,4 +1,4 @@ -import React from 'react' +import type * as React from 'react' import { screen } from '@testing-library/react' import { describe, it, beforeEach, expect } from 'vitest' import '@testing-library/jest-dom/vitest' diff --git a/app/src/organisms/IncompatibleModule/__tests__/IncompatibleModuleTakeover.test.tsx b/app/src/organisms/IncompatibleModule/__tests__/IncompatibleModuleTakeover.test.tsx index b8615e62d36..d3da5d17958 100644 --- a/app/src/organisms/IncompatibleModule/__tests__/IncompatibleModuleTakeover.test.tsx +++ b/app/src/organisms/IncompatibleModule/__tests__/IncompatibleModuleTakeover.test.tsx @@ -1,4 +1,4 @@ -import React from 'react' +import type * as React from 'react' import { screen } from '@testing-library/react' import { describe, it, beforeEach, afterEach, expect, vi } from 'vitest' import { when } from 'vitest-when' @@ -15,7 +15,7 @@ import { TopPortalRoot, MODAL_PORTAL_ID, TOP_PORTAL_ID, -} from '../../../App/portal' +} from '/app/App/portal' import * as Fixtures from '../__fixtures__' vi.mock('../hooks') diff --git a/app/src/organisms/IncompatibleModule/hooks/__tests__/useIncompatibleModulesAttached.test.tsx b/app/src/organisms/IncompatibleModule/hooks/__tests__/useIncompatibleModulesAttached.test.tsx index 970805c95c6..7e1a7342db1 100644 --- a/app/src/organisms/IncompatibleModule/hooks/__tests__/useIncompatibleModulesAttached.test.tsx +++ b/app/src/organisms/IncompatibleModule/hooks/__tests__/useIncompatibleModulesAttached.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { QueryClient, QueryClientProvider } from 'react-query' import { vi, it, expect, describe, beforeEach } from 'vitest' diff --git a/app/src/organisms/InterventionModal/InterventionCommandMessage.tsx b/app/src/organisms/InterventionModal/InterventionCommandMessage.tsx index 97fc9e7f69c..d9770e4a621 100644 --- a/app/src/organisms/InterventionModal/InterventionCommandMessage.tsx +++ b/app/src/organisms/InterventionModal/InterventionCommandMessage.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { css } from 'styled-components' diff --git a/app/src/organisms/InterventionModal/InterventionModal.stories.tsx b/app/src/organisms/InterventionModal/InterventionModal.stories.tsx index f9f13bb583e..ef378f49f70 100644 --- a/app/src/organisms/InterventionModal/InterventionModal.stories.tsx +++ b/app/src/organisms/InterventionModal/InterventionModal.stories.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { Provider } from 'react-redux' import { createStore } from 'redux' import { QueryClient, QueryClientProvider } from 'react-query' diff --git a/app/src/organisms/InterventionModal/LabwareDisabledOverlay.tsx b/app/src/organisms/InterventionModal/LabwareDisabledOverlay.tsx index f301571f4f5..30c742c42fe 100644 --- a/app/src/organisms/InterventionModal/LabwareDisabledOverlay.tsx +++ b/app/src/organisms/InterventionModal/LabwareDisabledOverlay.tsx @@ -1,5 +1,3 @@ -import * as React from 'react' - import { COLORS } from '@opentrons/components' import type { LabwareDefinition2 } from '@opentrons/shared-data' diff --git a/app/src/organisms/InterventionModal/MoveLabwareInterventionContent.tsx b/app/src/organisms/InterventionModal/MoveLabwareInterventionContent.tsx index 29049bd82a0..d44a96ecfa8 100644 --- a/app/src/organisms/InterventionModal/MoveLabwareInterventionContent.tsx +++ b/app/src/organisms/InterventionModal/MoveLabwareInterventionContent.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { css } from 'styled-components' diff --git a/app/src/organisms/InterventionModal/PauseInterventionContent.tsx b/app/src/organisms/InterventionModal/PauseInterventionContent.tsx index 36f313873f6..72f09e522b6 100644 --- a/app/src/organisms/InterventionModal/PauseInterventionContent.tsx +++ b/app/src/organisms/InterventionModal/PauseInterventionContent.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { useTranslation } from 'react-i18next' import { css } from 'styled-components' @@ -81,7 +81,7 @@ interface PauseHeaderProps { function PauseHeader({ startedAt }: PauseHeaderProps): JSX.Element { const { t, i18n } = useTranslation('run_details') - const [now, setNow] = React.useState(Date()) + const [now, setNow] = useState(Date()) useInterval( () => { setNow(Date()) diff --git a/app/src/organisms/InterventionModal/__tests__/InterventionCommandMesage.test.tsx b/app/src/organisms/InterventionModal/__tests__/InterventionCommandMesage.test.tsx index 48f2508435f..6f3a688b808 100644 --- a/app/src/organisms/InterventionModal/__tests__/InterventionCommandMesage.test.tsx +++ b/app/src/organisms/InterventionModal/__tests__/InterventionCommandMesage.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { screen } from '@testing-library/react' import { describe, it, expect } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' diff --git a/app/src/organisms/InterventionModal/__tests__/InterventionCommandMessage.test.tsx b/app/src/organisms/InterventionModal/__tests__/InterventionCommandMessage.test.tsx index 48f2508435f..6f3a688b808 100644 --- a/app/src/organisms/InterventionModal/__tests__/InterventionCommandMessage.test.tsx +++ b/app/src/organisms/InterventionModal/__tests__/InterventionCommandMessage.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { screen } from '@testing-library/react' import { describe, it, expect } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' diff --git a/app/src/organisms/InterventionModal/__tests__/InterventionModal.test.tsx b/app/src/organisms/InterventionModal/__tests__/InterventionModal.test.tsx index 2a6acb3be85..59b8c659a1a 100644 --- a/app/src/organisms/InterventionModal/__tests__/InterventionModal.test.tsx +++ b/app/src/organisms/InterventionModal/__tests__/InterventionModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, renderHook, screen } from '@testing-library/react' import { describe, it, expect, vi, beforeEach } from 'vitest' @@ -34,6 +34,7 @@ describe('useInterventionModal', () => { runStatus: RUN_STATUS_RUNNING, robotName: 'TestRobot', analysis: null, + doorIsOpen: false, } it('should return showModal true when conditions are met', () => { @@ -80,6 +81,13 @@ describe('useInterventionModal', () => { analysis: null, }) }) + it('should return showModal true and an alternate footer when door is open', () => { + const { result } = renderHook(() => + useInterventionModal({ ...defaultProps, doorIsOpen: true }) + ) + expect(result.current.showModal).toBe(true) + expect(result.current.modalProps?.alternateFooterContent).toBeTruthy() + }) }) const render = (props: React.ComponentProps) => { diff --git a/app/src/organisms/InterventionModal/__tests__/LabwareDisabledOverlay.test.tsx b/app/src/organisms/InterventionModal/__tests__/LabwareDisabledOverlay.test.tsx index b217edb116d..d6b8760f368 100644 --- a/app/src/organisms/InterventionModal/__tests__/LabwareDisabledOverlay.test.tsx +++ b/app/src/organisms/InterventionModal/__tests__/LabwareDisabledOverlay.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { render, screen } from '@testing-library/react' import { describe, it, expect } from 'vitest' import { COLORS } from '@opentrons/components' diff --git a/app/src/organisms/InterventionModal/index.tsx b/app/src/organisms/InterventionModal/index.tsx index dff08559f9d..4e837b9458a 100644 --- a/app/src/organisms/InterventionModal/index.tsx +++ b/app/src/organisms/InterventionModal/index.tsx @@ -1,6 +1,6 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { useSelector } from 'react-redux' +import { css } from 'styled-components' import { ALIGN_CENTER, @@ -13,11 +13,13 @@ import { Flex, Icon, JUSTIFY_SPACE_BETWEEN, + JUSTIFY_CENTER, Link, PrimaryButton, SPACING, TYPOGRAPHY, LegacyStyledText, + RESPONSIVENESS, } from '@opentrons/components' import { RUN_STATUS_FAILED, @@ -34,7 +36,9 @@ import { PauseInterventionContent } from './PauseInterventionContent' import { MoveLabwareInterventionContent } from './MoveLabwareInterventionContent' import { isInterventionCommand } from './utils' import { useRobotType } from '/app/redux-resources/robots' +import { InlineNotification } from '/app/atoms/InlineNotification' +import type { ReactNode } from 'react' import type { IconName } from '@opentrons/components' import type { CompletedProtocolAnalysis } from '@opentrons/shared-data' import type { @@ -56,6 +60,7 @@ export interface UseInterventionModalProps { runStatus: RunStatus | null robotName: string | null analysis: CompletedProtocolAnalysis | null + doorIsOpen: boolean } export type UseInterventionModalResult = @@ -69,6 +74,7 @@ export function useInterventionModal({ runStatus, robotName, analysis, + doorIsOpen, }: UseInterventionModalProps): UseInterventionModalResult { const isValidIntervention = lastRunCommand != null && @@ -77,6 +83,7 @@ export function useInterventionModal({ runData != null && runStatus != null && !TERMINAL_RUN_STATUSES.includes(runStatus) + const { t } = useTranslation('run_details') if (!isValidIntervention) { return { showModal: false, modalProps: null } @@ -88,6 +95,23 @@ export function useInterventionModal({ run: runData, robotName, analysis, + alternateFooterContent: doorIsOpen ? ( + + + + ) : undefined, }, } } @@ -99,6 +123,7 @@ export interface InterventionModalProps { command: RunCommandSummary run: RunData analysis: CompletedProtocolAnalysis | null + alternateFooterContent?: ReactNode } export function InterventionModal({ @@ -107,12 +132,14 @@ export function InterventionModal({ command, run, analysis, + alternateFooterContent, }: InterventionModalProps): JSX.Element { const { t } = useTranslation(['protocol_command_text', 'protocol_info']) const isOnDevice = useSelector(getIsOnDevice) const robotType = useRobotType(robotName) - const childContent = React.useMemo(() => { + // TODO(jh 09-19-24): Make this into its own component. + const childContent = (() => { switch (command.commandType) { case 'waitForResume': case 'pause': // legacy pause command @@ -136,12 +163,7 @@ export function InterventionModal({ ) return null } - }, [ - command.id, - analysis?.status, - run.labware.map(l => l.id).join(), - run.modules.map(m => m.id).join(), - ]) + })() const { iconName, headerTitle, headerTitleOnDevice } = (() => { switch (command.commandType) { @@ -192,11 +214,13 @@ export function InterventionModal({ width="100%" > {childContent} - + {alternateFooterContent ?? ( + + )} ) : ( @@ -207,23 +231,25 @@ export function InterventionModal({ > {childContent} - - - {t('protocol_info:manual_steps_learn_more')} - - - - {t('confirm_and_resume')} - - + {alternateFooterContent ?? ( + + + {t('protocol_info:manual_steps_learn_more')} + + + + {t('confirm_and_resume')} + + + )} ) diff --git a/app/src/organisms/LabwareOffsetTabs/__tests__/LabwareOffsetTabs.test.tsx b/app/src/organisms/LabwareOffsetTabs/__tests__/LabwareOffsetTabs.test.tsx index 3029cecdd2f..d5d2a89538a 100644 --- a/app/src/organisms/LabwareOffsetTabs/__tests__/LabwareOffsetTabs.test.tsx +++ b/app/src/organisms/LabwareOffsetTabs/__tests__/LabwareOffsetTabs.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' diff --git a/app/src/organisms/LabwareOffsetTabs/index.tsx b/app/src/organisms/LabwareOffsetTabs/index.tsx index 36dd745f682..3ad81c51d01 100644 --- a/app/src/organisms/LabwareOffsetTabs/index.tsx +++ b/app/src/organisms/LabwareOffsetTabs/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { useTranslation } from 'react-i18next' import { BORDERS, @@ -27,7 +27,7 @@ export function LabwareOffsetTabs({ ...styleProps }: LabwareOffsetTabsProps): JSX.Element { const { t } = useTranslation('labware_position_check') - const [currentTab, setCurrentTab] = React.useState('table') + const [currentTab, setCurrentTab] = useState('table') const activeTabComponent = { table: TableComponent, diff --git a/app/src/organisms/LabwarePositionCheck/AttachProbe.tsx b/app/src/organisms/LabwarePositionCheck/AttachProbe.tsx index 7c374a6cf99..b421b4be81f 100644 --- a/app/src/organisms/LabwarePositionCheck/AttachProbe.tsx +++ b/app/src/organisms/LabwarePositionCheck/AttachProbe.tsx @@ -8,7 +8,7 @@ import { } from '@opentrons/components' import { getPipetteNameSpecs } from '@opentrons/shared-data' import { css } from 'styled-components' -import { ProbeNotAttached } from '../PipetteWizardFlows/ProbeNotAttached' +import { ProbeNotAttached } from '/app/organisms/PipetteWizardFlows/ProbeNotAttached' import { RobotMotionLoader } from './RobotMotionLoader' import attachProbe1 from '/app/assets/videos/pipette-wizard-flows/Pipette_Attach_Probe_1.webm' import attachProbe8 from '/app/assets/videos/pipette-wizard-flows/Pipette_Attach_Probe_8.webm' diff --git a/app/src/organisms/LabwarePositionCheck/CheckItem.tsx b/app/src/organisms/LabwarePositionCheck/CheckItem.tsx index 45c237d5a93..9659319d24d 100644 --- a/app/src/organisms/LabwarePositionCheck/CheckItem.tsx +++ b/app/src/organisms/LabwarePositionCheck/CheckItem.tsx @@ -25,7 +25,7 @@ import { useSelector } from 'react-redux' import { getLabwareDef } from './utils/labware' import { getLabwareDefinitionsFromCommands } from '/app/molecules/Command/utils/getLabwareDefinitionsFromCommands' import { UnorderedList } from '/app/molecules/UnorderedList' -import { getCurrentOffsetForLabwareInLocation } from '../Devices/ProtocolRun/utils/getCurrentOffsetForLabwareInLocation' +import { getCurrentOffsetForLabwareInLocation } from '/app/transformations/analysis' import { getIsOnDevice } from '/app/redux/config' import { getDisplayLocation } from './utils/getDisplayLocation' diff --git a/app/src/organisms/LabwarePositionCheck/ExitConfirmation.tsx b/app/src/organisms/LabwarePositionCheck/ExitConfirmation.tsx index 47cb0c11cab..ab6cb857035 100644 --- a/app/src/organisms/LabwarePositionCheck/ExitConfirmation.tsx +++ b/app/src/organisms/LabwarePositionCheck/ExitConfirmation.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import styled from 'styled-components' import { useTranslation } from 'react-i18next' import { diff --git a/app/src/organisms/LabwarePositionCheck/FatalErrorModal.tsx b/app/src/organisms/LabwarePositionCheck/FatalErrorModal.tsx index 96e6f920d47..ee98e776055 100644 --- a/app/src/organisms/LabwarePositionCheck/FatalErrorModal.tsx +++ b/app/src/organisms/LabwarePositionCheck/FatalErrorModal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { createPortal } from 'react-dom' import styled from 'styled-components' import { useTranslation } from 'react-i18next' @@ -20,7 +19,7 @@ import { TEXT_TRANSFORM_CAPITALIZE, TYPOGRAPHY, } from '@opentrons/components' -import { getTopPortalEl } from '../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import { WizardHeader } from '/app/molecules/WizardHeader' import { i18n } from '/app/i18n' diff --git a/app/src/organisms/LabwarePositionCheck/IntroScreen/index.tsx b/app/src/organisms/LabwarePositionCheck/IntroScreen/index.tsx index 75fc6b8a62e..8c372750b78 100644 --- a/app/src/organisms/LabwarePositionCheck/IntroScreen/index.tsx +++ b/app/src/organisms/LabwarePositionCheck/IntroScreen/index.tsx @@ -21,14 +21,14 @@ import { import { RobotMotionLoader } from '../RobotMotionLoader' import { getPrepCommands } from './getPrepCommands' import { WizardRequiredEquipmentList } from '/app/molecules/WizardRequiredEquipmentList' -import { getLatestCurrentOffsets } from '../../Devices/ProtocolRun/SetupLabwarePositionCheck/utils' +import { getLatestCurrentOffsets } from '/app/transformations/runs' import { getIsOnDevice } from '/app/redux/config' -import { NeedHelpLink } from '../../CalibrationPanels' +import { NeedHelpLink } from '/app/molecules/OT2CalibrationNeedHelpLink' import { useSelector } from 'react-redux' import { TwoUpTileLayout } from '../TwoUpTileLayout' -import { getTopPortalEl } from '../../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import { SmallButton } from '/app/atoms/buttons' -import { CALIBRATION_PROBE } from '../../PipetteWizardFlows/constants' +import { CALIBRATION_PROBE } from '/app/organisms/PipetteWizardFlows/constants' import { TerseOffsetTable } from '../ResultsSummary' import { getLabwareDefinitionsFromCommands } from '/app/molecules/Command/utils/getLabwareDefinitionsFromCommands' diff --git a/app/src/organisms/LabwarePositionCheck/JogToWell.tsx b/app/src/organisms/LabwarePositionCheck/JogToWell.tsx index c61c3751498..e212af695a5 100644 --- a/app/src/organisms/LabwarePositionCheck/JogToWell.tsx +++ b/app/src/organisms/LabwarePositionCheck/JogToWell.tsx @@ -34,9 +34,9 @@ import levelWithLabware from '/app/assets/images/lpc_level_with_labware.svg' import levelProbeWithTip from '/app/assets/images/lpc_level_probe_with_tip.svg' import levelProbeWithLabware from '/app/assets/images/lpc_level_probe_with_labware.svg' import { getIsOnDevice } from '/app/redux/config' -import { getTopPortalEl } from '../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import { SmallButton } from '/app/atoms/buttons' -import { NeedHelpLink } from '../CalibrationPanels' +import { NeedHelpLink } from '/app/molecules/OT2CalibrationNeedHelpLink' import { JogControls } from '/app/molecules/JogControls' import { LiveOffsetValue } from './LiveOffsetValue' diff --git a/app/src/organisms/LabwarePositionCheck/LabwarePositionCheckComponent.tsx b/app/src/organisms/LabwarePositionCheck/LabwarePositionCheckComponent.tsx index 3174ef5f9de..6f0953093a6 100644 --- a/app/src/organisms/LabwarePositionCheck/LabwarePositionCheckComponent.tsx +++ b/app/src/organisms/LabwarePositionCheck/LabwarePositionCheckComponent.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, useEffect, useReducer } from 'react' import { createPortal } from 'react-dom' import isEqual from 'lodash/isEqual' import { useSelector } from 'react-redux' @@ -11,7 +11,7 @@ import { } from '@opentrons/react-api-client' import { FIXED_TRASH_ID, FLEX_ROBOT_TYPE } from '@opentrons/shared-data' -import { getTopPortalEl } from '../../App/portal' +import { getTopPortalEl } from '/app/App/portal' // import { useTrackEvent } from '/app/redux/analytics' import { IntroScreen } from './IntroScreen' import { ExitConfirmation } from './ExitConfirmation' @@ -85,7 +85,7 @@ export const LabwarePositionCheckComponent = ( const [ monitorMaintenanceRunForDeletion, setMonitorMaintenanceRunForDeletion, - ] = React.useState(false) + ] = useState(false) const { data: maintenanceRunData } = useNotifyCurrentMaintenanceRun({ refetchInterval: RUN_REFETCH_INTERVAL, @@ -94,7 +94,7 @@ export const LabwarePositionCheckComponent = ( // this will close the modal in case the run was deleted by the terminate // activity modal on the ODD - React.useEffect(() => { + useEffect(() => { if ( maintenanceRunId !== null && maintenanceRunData?.data.id === maintenanceRunId @@ -114,14 +114,9 @@ export const LabwarePositionCheckComponent = ( setMaintenanceRunId, ]) - const [fatalError, setFatalError] = React.useState(null) - const [isApplyingOffsets, setIsApplyingOffsets] = React.useState( - false - ) - const [ - { workingOffsets, tipPickUpOffset }, - registerPosition, - ] = React.useReducer( + const [fatalError, setFatalError] = useState(null) + const [isApplyingOffsets, setIsApplyingOffsets] = useState(false) + const [{ workingOffsets, tipPickUpOffset }, registerPosition] = useReducer( ( state: { workingOffsets: WorkingOffset[] @@ -189,7 +184,7 @@ export const LabwarePositionCheckComponent = ( }, { workingOffsets: [], tipPickUpOffset: null } ) - const [isExiting, setIsExiting] = React.useState(false) + const [isExiting, setIsExiting] = useState(false) const { createMaintenanceCommand: createSilentCommand, } = useCreateMaintenanceCommandMutation() @@ -199,7 +194,7 @@ export const LabwarePositionCheckComponent = ( } = useChainMaintenanceCommands() const { createLabwareOffset } = useCreateLabwareOffsetMutation() - const [currentStepIndex, setCurrentStepIndex] = React.useState(0) + const [currentStepIndex, setCurrentStepIndex] = useState(0) const handleCleanUpAndClose = (): void => { setIsExiting(true) const dropTipToBeSafeCommands: DropTipCreateCommand[] = shouldUseMetalProbe diff --git a/app/src/organisms/LabwarePositionCheck/LiveOffsetValue.tsx b/app/src/organisms/LabwarePositionCheck/LiveOffsetValue.tsx index 294755a73ca..21b3af917f9 100644 --- a/app/src/organisms/LabwarePositionCheck/LiveOffsetValue.tsx +++ b/app/src/organisms/LabwarePositionCheck/LiveOffsetValue.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { Fragment } from 'react' import { ALIGN_CENTER, BORDERS, @@ -55,7 +55,7 @@ export function LiveOffsetValue(props: OffsetVectorProps): JSX.Element { > {[x, y, z].map((axis, index) => ( - + {axis.toFixed(1)} - + ))} diff --git a/app/src/organisms/LabwarePositionCheck/PickUpTip.tsx b/app/src/organisms/LabwarePositionCheck/PickUpTip.tsx index 10e3fc73838..f93d2febe1b 100644 --- a/app/src/organisms/LabwarePositionCheck/PickUpTip.tsx +++ b/app/src/organisms/LabwarePositionCheck/PickUpTip.tsx @@ -19,7 +19,7 @@ import { RobotMotionLoader } from './RobotMotionLoader' import { PrepareSpace } from './PrepareSpace' import { JogToWell } from './JogToWell' import { UnorderedList } from '/app/molecules/UnorderedList' -import { getCurrentOffsetForLabwareInLocation } from '../Devices/ProtocolRun/utils/getCurrentOffsetForLabwareInLocation' +import { getCurrentOffsetForLabwareInLocation } from '/app/transformations/analysis' import { TipConfirmation } from './TipConfirmation' import { getLabwareDef } from './utils/labware' import { getLabwareDefinitionsFromCommands } from '/app/molecules/Command/utils/getLabwareDefinitionsFromCommands' diff --git a/app/src/organisms/LabwarePositionCheck/PrepareSpace.tsx b/app/src/organisms/LabwarePositionCheck/PrepareSpace.tsx index 12e630b6f00..8820acfef33 100644 --- a/app/src/organisms/LabwarePositionCheck/PrepareSpace.tsx +++ b/app/src/organisms/LabwarePositionCheck/PrepareSpace.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import styled, { css } from 'styled-components' import { useTranslation } from 'react-i18next' import { useSelector } from 'react-redux' @@ -20,7 +20,7 @@ import { THERMOCYCLER_MODULE_TYPE, getModuleType } from '@opentrons/shared-data' import { getIsOnDevice } from '/app/redux/config' import { SmallButton } from '/app/atoms/buttons' -import { NeedHelpLink } from '../CalibrationPanels' +import { NeedHelpLink } from '/app/molecules/OT2CalibrationNeedHelpLink' import { useNotifyDeckConfigurationQuery } from '/app/resources/deck_configuration' import type { diff --git a/app/src/organisms/LabwarePositionCheck/ResultsSummary.tsx b/app/src/organisms/LabwarePositionCheck/ResultsSummary.tsx index bbf9fd55e38..e4489cea914 100644 --- a/app/src/organisms/LabwarePositionCheck/ResultsSummary.tsx +++ b/app/src/organisms/LabwarePositionCheck/ResultsSummary.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useMemo, Fragment } from 'react' import styled, { css } from 'styled-components' import { useSelector } from 'react-redux' import isEqual from 'lodash/isEqual' @@ -11,7 +11,7 @@ import { getVectorSum, IDENTITY_VECTOR, } from '@opentrons/shared-data' -import { NeedHelpLink } from '../CalibrationPanels' +import { NeedHelpLink } from '/app/molecules/OT2CalibrationNeedHelpLink' import { ALIGN_CENTER, ALIGN_FLEX_END, @@ -36,8 +36,8 @@ import { getIsOnDevice, } from '/app/redux/config' import { SmallButton } from '/app/atoms/buttons' -import { LabwareOffsetTabs } from '../LabwareOffsetTabs' -import { getCurrentOffsetForLabwareInLocation } from '../Devices/ProtocolRun/utils/getCurrentOffsetForLabwareInLocation' +import { LabwareOffsetTabs } from '/app/organisms/LabwareOffsetTabs' +import { getCurrentOffsetForLabwareInLocation } from '/app/transformations/analysis' import { getLabwareDefinitionsFromCommands } from '/app/molecules/Command/utils/getLabwareDefinitionsFromCommands' import { getDisplayLocation } from './utils/getDisplayLocation' @@ -84,7 +84,7 @@ export const ResultsSummary = ( ) const isOnDevice = useSelector(getIsOnDevice) - const offsetsToApply = React.useMemo(() => { + const offsetsToApply = useMemo(() => { return workingOffsets.map( ({ initialPosition, finalPosition, labwareId, location }) => { const definitionUri = @@ -321,7 +321,7 @@ const OffsetTable = (props: OffsetTableProps): JSX.Element => { ) : ( {[vector.x, vector.y, vector.z].map((axis, index) => ( - + 0 ? SPACING.spacing8 : 0} @@ -333,7 +333,7 @@ const OffsetTable = (props: OffsetTableProps): JSX.Element => { {axis.toFixed(1)} - + ))} )} @@ -398,7 +398,7 @@ export const TerseOffsetTable = (props: OffsetTableProps): JSX.Element => { ) : ( {[vector.x, vector.y, vector.z].map((axis, index) => ( - + { > {axis.toFixed(1)} - + ))} )} diff --git a/app/src/organisms/LabwarePositionCheck/ReturnTip.tsx b/app/src/organisms/LabwarePositionCheck/ReturnTip.tsx index fe01316894d..8ba2f78d125 100644 --- a/app/src/organisms/LabwarePositionCheck/ReturnTip.tsx +++ b/app/src/organisms/LabwarePositionCheck/ReturnTip.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { Trans, useTranslation } from 'react-i18next' import { DIRECTION_COLUMN, diff --git a/app/src/organisms/LabwarePositionCheck/RobotMotionLoader.tsx b/app/src/organisms/LabwarePositionCheck/RobotMotionLoader.tsx index dbb5f6973f2..577dae6eff7 100644 --- a/app/src/organisms/LabwarePositionCheck/RobotMotionLoader.tsx +++ b/app/src/organisms/LabwarePositionCheck/RobotMotionLoader.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import styled from 'styled-components' import { ALIGN_CENTER, diff --git a/app/src/organisms/LabwarePositionCheck/TerseOffsetTable.stories.tsx b/app/src/organisms/LabwarePositionCheck/TerseOffsetTable.stories.tsx index 3e324412002..da7c52de513 100644 --- a/app/src/organisms/LabwarePositionCheck/TerseOffsetTable.stories.tsx +++ b/app/src/organisms/LabwarePositionCheck/TerseOffsetTable.stories.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { ALIGN_FLEX_END, DIRECTION_COLUMN, diff --git a/app/src/organisms/LabwarePositionCheck/TipConfirmation.tsx b/app/src/organisms/LabwarePositionCheck/TipConfirmation.tsx index 35cdc3230e0..ec8c87daea4 100644 --- a/app/src/organisms/LabwarePositionCheck/TipConfirmation.tsx +++ b/app/src/organisms/LabwarePositionCheck/TipConfirmation.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { ALIGN_CENTER, COLORS, @@ -13,7 +12,7 @@ import { } from '@opentrons/components' import { useTranslation } from 'react-i18next' -import { NeedHelpLink } from '../CalibrationPanels' +import { NeedHelpLink } from '/app/molecules/OT2CalibrationNeedHelpLink' import { useSelector } from 'react-redux' import { getIsOnDevice } from '/app/redux/config' import { SimpleWizardBody } from '/app/molecules/SimpleWizardBody' diff --git a/app/src/organisms/LabwarePositionCheck/TwoUpTileLayout.tsx b/app/src/organisms/LabwarePositionCheck/TwoUpTileLayout.tsx index 44ee775f25a..7c6cd309bb4 100644 --- a/app/src/organisms/LabwarePositionCheck/TwoUpTileLayout.tsx +++ b/app/src/organisms/LabwarePositionCheck/TwoUpTileLayout.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import styled, { css } from 'styled-components' import { DIRECTION_COLUMN, diff --git a/app/src/organisms/LabwarePositionCheck/__tests__/CheckItem.test.tsx b/app/src/organisms/LabwarePositionCheck/__tests__/CheckItem.test.tsx index cf0b61a8036..17442dfc42b 100644 --- a/app/src/organisms/LabwarePositionCheck/__tests__/CheckItem.test.tsx +++ b/app/src/organisms/LabwarePositionCheck/__tests__/CheckItem.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, vi, beforeEach, afterEach, expect } from 'vitest' @@ -18,7 +18,7 @@ import { mockCompletedAnalysis, mockExistingOffsets } from '../__fixtures__' import type { Mock } from 'vitest' vi.mock('/app/redux/config') -vi.mock('../../Devices/hooks') +vi.mock('../../Desktop/Devices/hooks') const mockStartPosition = { x: 10, y: 20, z: 30 } const mockEndPosition = { x: 9, y: 19, z: 29 } diff --git a/app/src/organisms/LabwarePositionCheck/__tests__/ExitConfirmation.test.tsx b/app/src/organisms/LabwarePositionCheck/__tests__/ExitConfirmation.test.tsx index 2fd71e3acf0..6a93da71dc5 100644 --- a/app/src/organisms/LabwarePositionCheck/__tests__/ExitConfirmation.test.tsx +++ b/app/src/organisms/LabwarePositionCheck/__tests__/ExitConfirmation.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, beforeEach, afterEach, expect, vi } from 'vitest' import { ExitConfirmation } from '../ExitConfirmation' diff --git a/app/src/organisms/LabwarePositionCheck/__tests__/PickUpTip.test.tsx b/app/src/organisms/LabwarePositionCheck/__tests__/PickUpTip.test.tsx index c852c5eee5a..c23e1c1af2c 100644 --- a/app/src/organisms/LabwarePositionCheck/__tests__/PickUpTip.test.tsx +++ b/app/src/organisms/LabwarePositionCheck/__tests__/PickUpTip.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen, waitFor } from '@testing-library/react' import { it, describe, beforeEach, vi, afterEach, expect } from 'vitest' import { FLEX_ROBOT_TYPE, HEATERSHAKER_MODULE_V1 } from '@opentrons/shared-data' diff --git a/app/src/organisms/LabwarePositionCheck/__tests__/ResultsSummary.test.tsx b/app/src/organisms/LabwarePositionCheck/__tests__/ResultsSummary.test.tsx index e66d900e76e..24101904de4 100644 --- a/app/src/organisms/LabwarePositionCheck/__tests__/ResultsSummary.test.tsx +++ b/app/src/organisms/LabwarePositionCheck/__tests__/ResultsSummary.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, beforeEach, afterEach, expect, vi } from 'vitest' import { fireEvent, screen } from '@testing-library/react' import { i18n } from '/app/i18n' diff --git a/app/src/organisms/LabwarePositionCheck/__tests__/ReturnTip.test.tsx b/app/src/organisms/LabwarePositionCheck/__tests__/ReturnTip.test.tsx index 0c44d4ecf89..0af86097f9c 100644 --- a/app/src/organisms/LabwarePositionCheck/__tests__/ReturnTip.test.tsx +++ b/app/src/organisms/LabwarePositionCheck/__tests__/ReturnTip.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest' diff --git a/app/src/organisms/LabwarePositionCheck/__tests__/RobotMotionLoader.test.tsx b/app/src/organisms/LabwarePositionCheck/__tests__/RobotMotionLoader.test.tsx index f12c52b07d4..fc2c49aa8f5 100644 --- a/app/src/organisms/LabwarePositionCheck/__tests__/RobotMotionLoader.test.tsx +++ b/app/src/organisms/LabwarePositionCheck/__tests__/RobotMotionLoader.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { screen } from '@testing-library/react' import { describe, it } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' diff --git a/app/src/organisms/LabwarePositionCheck/__tests__/TipConfirmation.test.tsx b/app/src/organisms/LabwarePositionCheck/__tests__/TipConfirmation.test.tsx index 3217cea0dbe..8f8878a7122 100644 --- a/app/src/organisms/LabwarePositionCheck/__tests__/TipConfirmation.test.tsx +++ b/app/src/organisms/LabwarePositionCheck/__tests__/TipConfirmation.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, beforeEach, afterEach, expect, vi } from 'vitest' import { fireEvent, screen } from '@testing-library/react' import { TipConfirmation } from '../TipConfirmation' diff --git a/app/src/organisms/LabwarePositionCheck/__tests__/useLaunchLPC.test.tsx b/app/src/organisms/LabwarePositionCheck/__tests__/useLaunchLPC.test.tsx index 4c007581c81..fb983097d01 100644 --- a/app/src/organisms/LabwarePositionCheck/__tests__/useLaunchLPC.test.tsx +++ b/app/src/organisms/LabwarePositionCheck/__tests__/useLaunchLPC.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { Provider } from 'react-redux' import configureStore from 'redux-mock-store' import { when } from 'vitest-when' @@ -22,8 +22,8 @@ import { renderWithProviders } from '/app/__testing-utils__' import { useCreateTargetedMaintenanceRunMutation, useNotifyRunQuery, + useMostRecentCompletedAnalysis, } from '/app/resources/runs' -import { useMostRecentCompletedAnalysis } from '../useMostRecentCompletedAnalysis' import { useLaunchLPC } from '../useLaunchLPC' import { LabwarePositionCheck } from '..' @@ -33,7 +33,6 @@ import type { LabwareDefinition2 } from '@opentrons/shared-data' vi.mock('../') vi.mock('@opentrons/react-api-client') -vi.mock('../useMostRecentCompletedAnalysis') vi.mock('/app/resources/runs') const MOCK_RUN_ID = 'mockRunId' diff --git a/app/src/organisms/LabwarePositionCheck/useLaunchLPC.tsx b/app/src/organisms/LabwarePositionCheck/useLaunchLPC.tsx index cbc4113713a..2d4cb2d879b 100644 --- a/app/src/organisms/LabwarePositionCheck/useLaunchLPC.tsx +++ b/app/src/organisms/LabwarePositionCheck/useLaunchLPC.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { useCreateMaintenanceRunLabwareDefinitionMutation, @@ -8,9 +8,9 @@ import { import { useCreateTargetedMaintenanceRunMutation, useNotifyRunQuery, + useMostRecentCompletedAnalysis, } from '/app/resources/runs' import { LabwarePositionCheck } from '.' -import { useMostRecentCompletedAnalysis } from './useMostRecentCompletedAnalysis' import { getLabwareDefinitionsFromCommands } from '/app/molecules/Command/utils/getLabwareDefinitionsFromCommands' import type { RobotType } from '@opentrons/shared-data' @@ -31,9 +31,7 @@ export function useLaunchLPC( isLoading: isDeletingMaintenanceRun, } = useDeleteMaintenanceRunMutation() const mostRecentAnalysis = useMostRecentCompletedAnalysis(runId) - const [maintenanceRunId, setMaintenanceRunId] = React.useState( - null - ) + const [maintenanceRunId, setMaintenanceRunId] = useState(null) const currentOffsets = runRecord?.data?.labwareOffsets ?? [] const { createLabwareDefinition, diff --git a/app/src/organisms/LabwarePositionCheck/utils/doesPipetteVisitAllTipracks.ts b/app/src/organisms/LabwarePositionCheck/utils/doesPipetteVisitAllTipracks.ts index 0976aab8b1b..f2f336ae0fd 100644 --- a/app/src/organisms/LabwarePositionCheck/utils/doesPipetteVisitAllTipracks.ts +++ b/app/src/organisms/LabwarePositionCheck/utils/doesPipetteVisitAllTipracks.ts @@ -1,12 +1,16 @@ import { getIsTiprack } from '@opentrons/shared-data' -import { getPickUpTipCommandsWithPipette } from '../../Devices/ProtocolRun/utils/getPickUpTipCommandsWithPipette' -import { getTipracksVisited } from '../../Devices/ProtocolRun/utils/getTipracksVisited' + import type { LoadedLabware, RunTimeCommand, LabwareDefinition2, } from '@opentrons/shared-data' +import { + getPickUpTipCommandsWithPipette, + getTipracksVisited, +} from '/app/transformations/commands' + export const doesPipetteVisitAllTipracks = ( pipetteId: string, labware: LoadedLabware[], diff --git a/app/src/organisms/LabwarePositionCheck/utils/getTipBasedLPCSteps.ts b/app/src/organisms/LabwarePositionCheck/utils/getTipBasedLPCSteps.ts index c36e02d80af..c03660a6f20 100644 --- a/app/src/organisms/LabwarePositionCheck/utils/getTipBasedLPCSteps.ts +++ b/app/src/organisms/LabwarePositionCheck/utils/getTipBasedLPCSteps.ts @@ -18,8 +18,8 @@ import type { import type { RunTimeCommand, ProtocolAnalysisOutput, + PickUpTipRunTimeCommand, } from '@opentrons/shared-data' -import type { PickUpTipRunTimeCommand } from '@opentrons/shared-data/protocol/types/schemaV6/command/pipetting' import type { LabwareLocationCombo } from '../../ApplyHistoricOffsets/hooks/getLabwareLocationCombos' interface LPCArgs { diff --git a/app/src/organisms/LabwarePositionCheck/utils/labware.ts b/app/src/organisms/LabwarePositionCheck/utils/labware.ts index efa4336bc78..2fd03ccc0c0 100644 --- a/app/src/organisms/LabwarePositionCheck/utils/labware.ts +++ b/app/src/organisms/LabwarePositionCheck/utils/labware.ts @@ -4,7 +4,7 @@ import { getTiprackVolume, getLabwareDefURI, } from '@opentrons/shared-data' -import { getModuleInitialLoadInfo } from '../../Devices/ProtocolRun/utils/getModuleInitialLoadInfo' +import { getModuleInitialLoadInfo } from '/app/transformations/commands' import { getLabwareDefinitionsFromCommands } from '/app/molecules/Command/utils/getLabwareDefinitionsFromCommands' import type { CompletedProtocolAnalysis, diff --git a/app/src/organisms/Devices/ProtocolRun/SetupLiquids/LiquidDetailCard.tsx b/app/src/organisms/LiquidsLabwareDetailsModal/LiquidDetailCard.tsx similarity index 98% rename from app/src/organisms/Devices/ProtocolRun/SetupLiquids/LiquidDetailCard.tsx rename to app/src/organisms/LiquidsLabwareDetailsModal/LiquidDetailCard.tsx index 7178a8b6404..cb1591dc72f 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupLiquids/LiquidDetailCard.tsx +++ b/app/src/organisms/LiquidsLabwareDetailsModal/LiquidDetailCard.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useSelector } from 'react-redux' import { css } from 'styled-components' import { @@ -25,7 +25,7 @@ import { ANALYTICS_HIGHLIGHT_LIQUID_IN_DETAIL_MODAL, } from '/app/redux/analytics' import { getIsOnDevice } from '/app/redux/config' -import { getWellRangeForLiquidLabwarePair } from './utils' +import { getWellRangeForLiquidLabwarePair } from '/app/transformations/analysis' export const CARD_OUTLINE_BORDER_STYLE = css` border-style: ${BORDERS.styleSolid}; diff --git a/app/src/organisms/Devices/ProtocolRun/SetupLiquids/LiquidsLabwareDetailsModal.tsx b/app/src/organisms/LiquidsLabwareDetailsModal/LiquidsLabwareDetailsModal.tsx similarity index 93% rename from app/src/organisms/Devices/ProtocolRun/SetupLiquids/LiquidsLabwareDetailsModal.tsx rename to app/src/organisms/LiquidsLabwareDetailsModal/LiquidsLabwareDetailsModal.tsx index 733d767e8cd..62b5e3cf435 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupLiquids/LiquidsLabwareDetailsModal.tsx +++ b/app/src/organisms/LiquidsLabwareDetailsModal/LiquidsLabwareDetailsModal.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useRef, useState, useEffect } from 'react' import { useTranslation } from 'react-i18next' import { useSelector } from 'react-redux' import { css } from 'styled-components' @@ -22,16 +22,18 @@ import { import { OddModal } from '/app/molecules/OddModal' import { getIsOnDevice } from '/app/redux/config' -import { useMostRecentCompletedAnalysis } from '../../../LabwarePositionCheck/useMostRecentCompletedAnalysis' -import { getLocationInfoNames } from '../utils/getLocationInfoNames' -import { getSlotLabwareDefinition } from '../utils/getSlotLabwareDefinition' +import { useMostRecentCompletedAnalysis } from '/app/resources/runs' +import { + getLocationInfoNames, + getSlotLabwareDefinition, +} from '/app/transformations/commands' import { LiquidDetailCard } from './LiquidDetailCard' import { getLiquidsByIdForLabware, getDisabledWellFillFromLabwareId, getWellGroupForLiquidId, getDisabledWellGroupForLiquidId, -} from './utils' +} from '/app/transformations/analysis' interface LiquidsLabwareDetailsModalProps { liquidId?: string @@ -46,7 +48,7 @@ export const LiquidsLabwareDetailsModal = ( const { liquidId, labwareId, runId, closeModal } = props const { t } = useTranslation('protocol_setup') const isOnDevice = useSelector(getIsOnDevice) - const currentLiquidRef = React.useRef(null) + const currentLiquidRef = useRef(null) const protocolData = useMostRecentCompletedAnalysis(runId) const commands = protocolData?.commands ?? [] const liquids = parseLiquidsInLoadOrder( @@ -63,7 +65,7 @@ export const LiquidsLabwareDetailsModal = ( const filteredLiquidsInLoadOrder = liquids.filter(liquid => { return Object.keys(labwareInfo).some(key => key === liquid.id) }) - const [selectedValue, setSelectedValue] = React.useState( + const [selectedValue, setSelectedValue] = useState( liquidId ?? filteredLiquidsInLoadOrder[0].id ) @@ -77,7 +79,7 @@ export const LiquidsLabwareDetailsModal = ( const scrollToCurrentItem = (): void => { currentLiquidRef.current?.scrollIntoView({ behavior: 'smooth' }) } - React.useEffect(() => { + useEffect(() => { scrollToCurrentItem() }, []) const HIDE_SCROLLBAR = css` diff --git a/app/src/organisms/Devices/ProtocolRun/SetupLiquids/__tests__/LiquidDetailCard.test.tsx b/app/src/organisms/LiquidsLabwareDetailsModal/__tests__/LiquidDetailCard.test.tsx similarity index 98% rename from app/src/organisms/Devices/ProtocolRun/SetupLiquids/__tests__/LiquidDetailCard.test.tsx rename to app/src/organisms/LiquidsLabwareDetailsModal/__tests__/LiquidDetailCard.test.tsx index 8ed860659a5..a96c8128897 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupLiquids/__tests__/LiquidDetailCard.test.tsx +++ b/app/src/organisms/LiquidsLabwareDetailsModal/__tests__/LiquidDetailCard.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, beforeEach, vi, expect } from 'vitest' diff --git a/app/src/organisms/Devices/ProtocolRun/SetupLiquids/__tests__/LiquidsLabwareDetailsModal.test.tsx b/app/src/organisms/LiquidsLabwareDetailsModal/__tests__/LiquidsLabwareDetailsModal.test.tsx similarity index 89% rename from app/src/organisms/Devices/ProtocolRun/SetupLiquids/__tests__/LiquidsLabwareDetailsModal.test.tsx rename to app/src/organisms/LiquidsLabwareDetailsModal/__tests__/LiquidsLabwareDetailsModal.test.tsx index 6ff268720a4..54b8239da47 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupLiquids/__tests__/LiquidsLabwareDetailsModal.test.tsx +++ b/app/src/organisms/LiquidsLabwareDetailsModal/__tests__/LiquidsLabwareDetailsModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, beforeEach, vi, afterEach, expect } from 'vitest' import { screen } from '@testing-library/react' @@ -8,14 +8,16 @@ import { parseLiquidsInLoadOrder } from '@opentrons/shared-data' import { nestedTextMatcher, renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' import { getIsOnDevice } from '/app/redux/config' -import { useMostRecentCompletedAnalysis } from '../../../../LabwarePositionCheck/useMostRecentCompletedAnalysis' +import { useMostRecentCompletedAnalysis } from '/app/resources/runs' import { mockDefinition } from '/app/redux/custom-labware/__fixtures__' -import { getLocationInfoNames } from '../../utils/getLocationInfoNames' -import { getSlotLabwareDefinition } from '../../utils/getSlotLabwareDefinition' +import { + getLocationInfoNames, + getSlotLabwareDefinition, +} from '/app/transformations/commands' import { getLiquidsByIdForLabware, getDisabledWellFillFromLabwareId, -} from '../utils' +} from '/app/transformations/analysis' import { LiquidsLabwareDetailsModal } from '../LiquidsLabwareDetailsModal' import { LiquidDetailCard } from '../LiquidDetailCard' @@ -37,11 +39,9 @@ vi.mock('@opentrons/shared-data', async importOriginal => { } }) vi.mock('/app/redux/config') -vi.mock('../../../../LabwarePositionCheck/useMostRecentCompletedAnalysis') -vi.mock('../../../../Devices/hooks') -vi.mock('../../utils/getLocationInfoNames') -vi.mock('../../utils/getSlotLabwareDefinition') -vi.mock('../utils') +vi.mock('/app/resources/runs') +vi.mock('/app/transformations/commands') +vi.mock('/app/transformations/analysis') vi.mock('../LiquidDetailCard') const render = ( diff --git a/app/src/organisms/LiquidsLabwareDetailsModal/index.ts b/app/src/organisms/LiquidsLabwareDetailsModal/index.ts new file mode 100644 index 00000000000..c548c0283a2 --- /dev/null +++ b/app/src/organisms/LiquidsLabwareDetailsModal/index.ts @@ -0,0 +1 @@ +export * from './LiquidsLabwareDetailsModal' diff --git a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/ChooseModuleToConfigureModal.tsx b/app/src/organisms/LocationConflictModal/ChooseModuleToConfigureModal.tsx similarity index 97% rename from app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/ChooseModuleToConfigureModal.tsx rename to app/src/organisms/LocationConflictModal/ChooseModuleToConfigureModal.tsx index 96b165742e9..b91a63c7610 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/ChooseModuleToConfigureModal.tsx +++ b/app/src/organisms/LocationConflictModal/ChooseModuleToConfigureModal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { createPortal } from 'react-dom' import { useTranslation } from 'react-i18next' import { useNavigate } from 'react-router-dom' @@ -24,9 +23,9 @@ import { MAGNETIC_BLOCK_V1, getModuleDisplayName, } from '@opentrons/shared-data' -import { getTopPortalEl } from '../../../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import { OddModal } from '/app/molecules/OddModal' -import { FixtureOption } from '../../../DeviceDetailsDeckConfiguration/AddFixtureModal' +import { FixtureOption } from '/app/organisms/DeviceDetailsDeckConfiguration/AddFixtureModal' import { useNotifyDeckConfigurationQuery } from '/app/resources/deck_configuration' import { SmallButton } from '/app/atoms/buttons' import { useCloseCurrentRun } from '/app/resources/runs' diff --git a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/LocationConflictModal.tsx b/app/src/organisms/LocationConflictModal/LocationConflictModal.tsx similarity index 97% rename from app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/LocationConflictModal.tsx rename to app/src/organisms/LocationConflictModal/LocationConflictModal.tsx index 660b29c6a5a..f5c272ea673 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/LocationConflictModal.tsx +++ b/app/src/organisms/LocationConflictModal/LocationConflictModal.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { createPortal } from 'react-dom' import { Trans, useTranslation } from 'react-i18next' import { useUpdateDeckConfigurationMutation } from '@opentrons/react-api-client' @@ -32,7 +32,7 @@ import { THERMOCYCLER_V2_REAR_FIXTURE, } from '@opentrons/shared-data' -import { getTopPortalEl } from '../../../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import { OddModal } from '/app/molecules/OddModal' import { SmallButton } from '/app/atoms/buttons/SmallButton' import { useNotifyDeckConfigurationQuery } from '/app/resources/deck_configuration' @@ -72,7 +72,7 @@ export const LocationConflictModal = ( } = props const { t, i18n } = useTranslation(['protocol_setup', 'shared']) - const [showModuleSelect, setShowModuleSelect] = React.useState(false) + const [showModuleSelect, setShowModuleSelect] = useState(false) const deckConfig = useNotifyDeckConfigurationQuery().data ?? [] const { updateDeckConfiguration } = useUpdateDeckConfigurationMutation() const deckConfigurationAtLocationFixtureId = deckConfig.find( @@ -191,9 +191,10 @@ export const LocationConflictModal = ( protocolSpecifiesDisplayName = getModuleDisplayName(requiredModule) } - const displaySlotName = isThermocyclerRequired - ? 'A1 + B1' - : getCutoutDisplayName(cutoutId) + const displaySlotName = + isThermocyclerRequired || isThermocyclerCurrentFixture + ? 'A1 + B1' + : getCutoutDisplayName(cutoutId) if (showModuleSelect && requiredModule != null) { return createPortal( @@ -232,7 +233,7 @@ export const LocationConflictModal = ( } values={{ currentFixture: currentFixtureDisplayName, - cutout: getCutoutDisplayName(cutoutId), + cutout: displaySlotName, }} components={{ block: , @@ -341,7 +342,7 @@ export const LocationConflictModal = ( } values={{ currentFixture: currentFixtureDisplayName, - cutout: getCutoutDisplayName(cutoutId), + cutout: displaySlotName, }} components={{ block: , diff --git a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/LocationConflictModal.test.tsx b/app/src/organisms/LocationConflictModal/__tests__/LocationConflictModal.test.tsx similarity index 99% rename from app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/LocationConflictModal.test.tsx rename to app/src/organisms/LocationConflictModal/__tests__/LocationConflictModal.test.tsx index dfc61ee1bc7..207caa02a1b 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupModuleAndDeck/__tests__/LocationConflictModal.test.tsx +++ b/app/src/organisms/LocationConflictModal/__tests__/LocationConflictModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { screen, fireEvent } from '@testing-library/react' import '@testing-library/jest-dom/vitest' diff --git a/app/src/organisms/LocationConflictModal/index.ts b/app/src/organisms/LocationConflictModal/index.ts new file mode 100644 index 00000000000..732157f3a5a --- /dev/null +++ b/app/src/organisms/LocationConflictModal/index.ts @@ -0,0 +1,2 @@ +export * from './LocationConflictModal' +export * from './ChooseModuleToConfigureModal' diff --git a/app/src/organisms/ModuleCard/AboutModuleSlideout.tsx b/app/src/organisms/ModuleCard/AboutModuleSlideout.tsx index 61cf06a970c..e1ad4d94ce9 100644 --- a/app/src/organisms/ModuleCard/AboutModuleSlideout.tsx +++ b/app/src/organisms/ModuleCard/AboutModuleSlideout.tsx @@ -1,9 +1,10 @@ -import * as React from 'react' +import { useState } from 'react' import { useTranslation } from 'react-i18next' import { css } from 'styled-components' import { RUN_STATUS_RUNNING, RUN_STATUS_FINISHING } from '@opentrons/api-client' import { ALIGN_START, + Banner, Btn, COLORS, DIRECTION_COLUMN, @@ -15,17 +16,16 @@ import { TYPOGRAPHY, } from '@opentrons/components' import { getModuleDisplayName } from '@opentrons/shared-data' -import { Slideout } from '/app/atoms/Slideout' -import { Banner } from '/app/atoms/Banner' -import { useCurrentRunStatus } from '../RunTimeControl/hooks' +import { Slideout } from '../../atoms/Slideout' +import { useCurrentRunStatus } from '/app/organisms/RunTimeControl' import type { AttachedModule } from '/app/redux/modules/types' interface AboutModuleSlideoutProps { module: AttachedModule - onCloseClick: () => unknown + onCloseClick: () => void isExpanded: boolean - firmwareUpdateClick: () => unknown + firmwareUpdateClick: () => void } const ALERT_ITEM_STYLE = css` @@ -40,7 +40,7 @@ export const AboutModuleSlideout = ( const { i18n, t } = useTranslation(['device_details', 'shared']) const moduleName = getModuleDisplayName(module.moduleModel) const runStatus = useCurrentRunStatus() - const [showBanner, setShowBanner] = React.useState(true) + const [showBanner, setShowBanner] = useState(true) const isDisabled = runStatus === RUN_STATUS_RUNNING || runStatus === RUN_STATUS_FINISHING diff --git a/app/src/organisms/ModuleCard/AbsorbanceReaderData.tsx b/app/src/organisms/ModuleCard/AbsorbanceReaderData.tsx index 7a6a77d0ce3..72deca8bcac 100644 --- a/app/src/organisms/ModuleCard/AbsorbanceReaderData.tsx +++ b/app/src/organisms/ModuleCard/AbsorbanceReaderData.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { TYPOGRAPHY, LegacyStyledText } from '@opentrons/components' import type { AbsorbanceReaderModule } from '/app/redux/modules/types' diff --git a/app/src/organisms/ModuleCard/AbsorbanceReaderSlideout.tsx b/app/src/organisms/ModuleCard/AbsorbanceReaderSlideout.tsx index 5ef3ffd3845..8cfd8597135 100644 --- a/app/src/organisms/ModuleCard/AbsorbanceReaderSlideout.tsx +++ b/app/src/organisms/ModuleCard/AbsorbanceReaderSlideout.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { getModuleDisplayName } from '@opentrons/shared-data' import { SPACING, LegacyStyledText, TYPOGRAPHY } from '@opentrons/components' diff --git a/app/src/organisms/ModuleCard/Collapsible.tsx b/app/src/organisms/ModuleCard/Collapsible.tsx index 44b7c883b8a..cc15a88d4a0 100644 --- a/app/src/organisms/ModuleCard/Collapsible.tsx +++ b/app/src/organisms/ModuleCard/Collapsible.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { css } from 'styled-components' import { ALIGN_CENTER, diff --git a/app/src/organisms/ModuleCard/ErrorInfo.tsx b/app/src/organisms/ModuleCard/ErrorInfo.tsx index 57caacbdc56..d3f0d966e49 100644 --- a/app/src/organisms/ModuleCard/ErrorInfo.tsx +++ b/app/src/organisms/ModuleCard/ErrorInfo.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { createPortal } from 'react-dom' import { useTranslation } from 'react-i18next' import { @@ -8,6 +8,7 @@ import { } from '@opentrons/shared-data' import { ALIGN_START, + Banner, Btn, DIRECTION_COLUMN, DIRECTION_ROW, @@ -19,8 +20,7 @@ import { LegacyStyledText, TYPOGRAPHY, } from '@opentrons/components' -import { Banner } from '/app/atoms/Banner' -import { getTopPortalEl } from '../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import type { AttachedModule } from '/app/redux/modules/types' @@ -30,7 +30,7 @@ interface ErrorInfoProps { export function ErrorInfo(props: ErrorInfoProps): JSX.Element | null { const { attachedModule } = props const { t } = useTranslation(['device_details', 'shared', 'branded']) - const [showErrorDetails, setShowErrorDetails] = React.useState(false) + const [showErrorDetails, setShowErrorDetails] = useState(false) let isError: boolean = false // extend this logic when we know how to tell when Mag/Temp modules are in error state diff --git a/app/src/organisms/ModuleCard/FirmwareUpdateFailedModal.tsx b/app/src/organisms/ModuleCard/FirmwareUpdateFailedModal.tsx index 180e9574b72..47e95f8bf96 100644 --- a/app/src/organisms/ModuleCard/FirmwareUpdateFailedModal.tsx +++ b/app/src/organisms/ModuleCard/FirmwareUpdateFailedModal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { getModuleDisplayName } from '@opentrons/shared-data' import { diff --git a/app/src/organisms/ModuleCard/HeaterShakerModuleData.tsx b/app/src/organisms/ModuleCard/HeaterShakerModuleData.tsx index 668f8f66fd0..67bed6f6e5d 100644 --- a/app/src/organisms/ModuleCard/HeaterShakerModuleData.tsx +++ b/app/src/organisms/ModuleCard/HeaterShakerModuleData.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { COLORS, diff --git a/app/src/organisms/ModuleCard/MagneticModuleData.tsx b/app/src/organisms/ModuleCard/MagneticModuleData.tsx index 580731eeab8..f9282505b8a 100644 --- a/app/src/organisms/ModuleCard/MagneticModuleData.tsx +++ b/app/src/organisms/ModuleCard/MagneticModuleData.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { COLORS, TYPOGRAPHY, LegacyStyledText } from '@opentrons/components' import { MAGNETIC_MODULE_V2 } from '@opentrons/shared-data' diff --git a/app/src/organisms/ModuleCard/MagneticModuleSlideout.tsx b/app/src/organisms/ModuleCard/MagneticModuleSlideout.tsx index b4fc4dac9bc..66e428c682d 100644 --- a/app/src/organisms/ModuleCard/MagneticModuleSlideout.tsx +++ b/app/src/organisms/ModuleCard/MagneticModuleSlideout.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { useTranslation } from 'react-i18next' import { useCreateLiveCommandMutation } from '@opentrons/react-api-client' @@ -73,9 +73,9 @@ export const MagneticModuleSlideout = ( const { module, isExpanded, onCloseClick } = props const { t } = useTranslation('device_details') const { createLiveCommand } = useCreateLiveCommandMutation() - const [engageHeightValue, setEngageHeightValue] = React.useState< - string | null - >(null) + const [engageHeightValue, setEngageHeightValue] = useState( + null + ) const moduleName = getModuleDisplayName(module.moduleModel) const info = getInfoByModel(module.moduleModel) diff --git a/app/src/organisms/ModuleCard/ModuleOverflowMenu.tsx b/app/src/organisms/ModuleCard/ModuleOverflowMenu.tsx index fe27d5376c6..d37be183b8d 100644 --- a/app/src/organisms/ModuleCard/ModuleOverflowMenu.tsx +++ b/app/src/organisms/ModuleCard/ModuleOverflowMenu.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { Fragment } from 'react' import { useTranslation } from 'react-i18next' import { @@ -17,11 +17,8 @@ import { TEMPERATURE_MODULE_TYPE, THERMOCYCLER_MODULE_TYPE, } from '@opentrons/shared-data' -import { useCurrentRunId } from '/app/resources/runs' -import { - useRunStatuses, - useIsLegacySessionInProgress, -} from '/app/organisms/Devices/hooks' +import { useCurrentRunId, useRunStatuses } from '/app/resources/runs' +import { useIsLegacySessionInProgress } from '/app/resources/legacy_sessions' import { useIsFlex } from '/app/redux-resources/robots' import { useModuleOverflowMenu } from './hooks' @@ -148,7 +145,7 @@ export const ModuleOverflowMenu = ( {menuOverflowItemsByModuleType[module.moduleType].map( (item: any, index: number) => { return ( - + item.onClick(item.isSecondary)} disabled={item.disabledReason || isDisabled} @@ -157,7 +154,7 @@ export const ModuleOverflowMenu = ( {item.setSetting} {item.menuButtons} - + ) } )} diff --git a/app/src/organisms/ModuleCard/ModuleSetupModal.tsx b/app/src/organisms/ModuleCard/ModuleSetupModal.tsx index 218bfe4dd6b..16d3dec77d2 100644 --- a/app/src/organisms/ModuleCard/ModuleSetupModal.tsx +++ b/app/src/organisms/ModuleCard/ModuleSetupModal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { createPortal } from 'react-dom' import code from '/app/assets/images/module_instruction_code.png' @@ -15,7 +14,7 @@ import { LegacyStyledText, TYPOGRAPHY, } from '@opentrons/components' -import { getTopPortalEl } from '../../App/portal' +import { getTopPortalEl } from '/app/App/portal' const MODULE_SETUP_URL = 'https://support.opentrons.com/s/modules' diff --git a/app/src/organisms/ModuleCard/TemperatureModuleData.tsx b/app/src/organisms/ModuleCard/TemperatureModuleData.tsx index 369b7999552..a5ba2bcbd9f 100644 --- a/app/src/organisms/ModuleCard/TemperatureModuleData.tsx +++ b/app/src/organisms/ModuleCard/TemperatureModuleData.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { COLORS, diff --git a/app/src/organisms/ModuleCard/TemperatureModuleSlideout.tsx b/app/src/organisms/ModuleCard/TemperatureModuleSlideout.tsx index c3445efaf06..18928ecae10 100644 --- a/app/src/organisms/ModuleCard/TemperatureModuleSlideout.tsx +++ b/app/src/organisms/ModuleCard/TemperatureModuleSlideout.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { useTranslation } from 'react-i18next' import { useCreateLiveCommandMutation } from '@opentrons/react-api-client' @@ -37,9 +37,7 @@ export const TemperatureModuleSlideout = ( const { t } = useTranslation('device_details') const { createLiveCommand } = useCreateLiveCommandMutation() const name = getModuleDisplayName(module.moduleModel) - const [temperatureValue, setTemperatureValue] = React.useState( - null - ) + const [temperatureValue, setTemperatureValue] = useState(null) const handleSubmitTemperature = (): void => { if (temperatureValue != null) { const saveTempCommand: TemperatureModuleSetTargetTemperatureCreateCommand = { diff --git a/app/src/organisms/ModuleCard/TestShakeSlideout.tsx b/app/src/organisms/ModuleCard/TestShakeSlideout.tsx index 53847cddea3..7f0c8a8e576 100644 --- a/app/src/organisms/ModuleCard/TestShakeSlideout.tsx +++ b/app/src/organisms/ModuleCard/TestShakeSlideout.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { createPortal } from 'react-dom' import { useTranslation } from 'react-i18next' import { useSelector } from 'react-redux' @@ -32,7 +32,7 @@ import { } from '@opentrons/shared-data' import { getIsHeaterShakerAttached } from '/app/redux/config' -import { getTopPortalEl } from '../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import { Slideout } from '/app/atoms/Slideout' import { TertiaryButton } from '/app/atoms/buttons' import { Divider } from '/app/atoms/structure' @@ -66,11 +66,10 @@ export const TestShakeSlideout = ( }) const { toggleLatch, isLatchClosed } = useLatchControls(module) const configHasHeaterShakerAttached = useSelector(getIsHeaterShakerAttached) - const [shakeValue, setShakeValue] = React.useState(null) - const [ - showModuleSetupModal, - setShowModuleSetupModal, - ] = React.useState(false) + const [shakeValue, setShakeValue] = useState(null) + const [showModuleSetupModal, setShowModuleSetupModal] = useState( + false + ) const isShaking = module.data.speedStatus !== 'idle' const setShakeCommand: HeaterShakerSetAndWaitForShakeSpeedCreateCommand = { diff --git a/app/src/organisms/ModuleCard/ThermocyclerModuleData.tsx b/app/src/organisms/ModuleCard/ThermocyclerModuleData.tsx index f3d7d910301..c0eed06384d 100644 --- a/app/src/organisms/ModuleCard/ThermocyclerModuleData.tsx +++ b/app/src/organisms/ModuleCard/ThermocyclerModuleData.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { StatusLabel } from '/app/atoms/StatusLabel' import { diff --git a/app/src/organisms/ModuleCard/ThermocyclerModuleSlideout.tsx b/app/src/organisms/ModuleCard/ThermocyclerModuleSlideout.tsx index c393336357e..e0bf348022c 100644 --- a/app/src/organisms/ModuleCard/ThermocyclerModuleSlideout.tsx +++ b/app/src/organisms/ModuleCard/ThermocyclerModuleSlideout.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { useTranslation } from 'react-i18next' import { CELSIUS, @@ -40,7 +40,7 @@ export const ThermocyclerModuleSlideout = ( ): JSX.Element | null => { const { module, onCloseClick, isExpanded, isSecondaryTemp } = props const { t } = useTranslation('device_details') - const [tempValue, setTempValue] = React.useState(null) + const [tempValue, setTempValue] = useState(null) const { createLiveCommand } = useCreateLiveCommandMutation() const moduleName = getModuleDisplayName(module.moduleModel) const modulePart = isSecondaryTemp ? 'Lid' : 'Block' diff --git a/app/src/organisms/ModuleCard/__tests__/AboutModuleSlideout.test.tsx b/app/src/organisms/ModuleCard/__tests__/AboutModuleSlideout.test.tsx index 19f49c412c8..35eb81ab169 100644 --- a/app/src/organisms/ModuleCard/__tests__/AboutModuleSlideout.test.tsx +++ b/app/src/organisms/ModuleCard/__tests__/AboutModuleSlideout.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' @@ -17,10 +17,10 @@ import { mockTemperatureModuleGen2, mockThermocycler, } from '/app/redux/modules/__fixtures__' -import { useCurrentRunStatus } from '../../RunTimeControl/hooks' +import { useCurrentRunStatus } from '/app/organisms/RunTimeControl' import { AboutModuleSlideout } from '../AboutModuleSlideout' -vi.mock('../../RunTimeControl/hooks') +vi.mock('/app/organisms/RunTimeControl') const render = (props: React.ComponentProps) => { return renderWithProviders(, { diff --git a/app/src/organisms/ModuleCard/__tests__/Collapsible.test.tsx b/app/src/organisms/ModuleCard/__tests__/Collapsible.test.tsx index e312a177459..3db479e3228 100644 --- a/app/src/organisms/ModuleCard/__tests__/Collapsible.test.tsx +++ b/app/src/organisms/ModuleCard/__tests__/Collapsible.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' diff --git a/app/src/organisms/ModuleCard/__tests__/ConfirmAttachmentModal.test.tsx b/app/src/organisms/ModuleCard/__tests__/ConfirmAttachmentModal.test.tsx index 73e8f495e9c..ccc81bcb167 100644 --- a/app/src/organisms/ModuleCard/__tests__/ConfirmAttachmentModal.test.tsx +++ b/app/src/organisms/ModuleCard/__tests__/ConfirmAttachmentModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' diff --git a/app/src/organisms/ModuleCard/__tests__/ErrorInfo.test.tsx b/app/src/organisms/ModuleCard/__tests__/ErrorInfo.test.tsx index 467f512ef08..bde80a0d7d2 100644 --- a/app/src/organisms/ModuleCard/__tests__/ErrorInfo.test.tsx +++ b/app/src/organisms/ModuleCard/__tests__/ErrorInfo.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { beforeEach, describe, expect, it } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' diff --git a/app/src/organisms/ModuleCard/__tests__/FirmwareUpdateFailedModal.test.tsx b/app/src/organisms/ModuleCard/__tests__/FirmwareUpdateFailedModal.test.tsx index 498483c7b67..13395bcff69 100644 --- a/app/src/organisms/ModuleCard/__tests__/FirmwareUpdateFailedModal.test.tsx +++ b/app/src/organisms/ModuleCard/__tests__/FirmwareUpdateFailedModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { beforeEach, describe, expect, it, vi } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' diff --git a/app/src/organisms/ModuleCard/__tests__/HeaterShakerModuleData.test.tsx b/app/src/organisms/ModuleCard/__tests__/HeaterShakerModuleData.test.tsx index 7128c46f55d..348fdb614d4 100644 --- a/app/src/organisms/ModuleCard/__tests__/HeaterShakerModuleData.test.tsx +++ b/app/src/organisms/ModuleCard/__tests__/HeaterShakerModuleData.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { screen } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' diff --git a/app/src/organisms/ModuleCard/__tests__/HeaterShakerSlideout.test.tsx b/app/src/organisms/ModuleCard/__tests__/HeaterShakerSlideout.test.tsx index 74f770bb235..883d5b6bb7c 100644 --- a/app/src/organisms/ModuleCard/__tests__/HeaterShakerSlideout.test.tsx +++ b/app/src/organisms/ModuleCard/__tests__/HeaterShakerSlideout.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' diff --git a/app/src/organisms/ModuleCard/__tests__/MagneticModuleData.test.tsx b/app/src/organisms/ModuleCard/__tests__/MagneticModuleData.test.tsx index 594b17f1df0..b6534d233e3 100644 --- a/app/src/organisms/ModuleCard/__tests__/MagneticModuleData.test.tsx +++ b/app/src/organisms/ModuleCard/__tests__/MagneticModuleData.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { screen } from '@testing-library/react' import { afterEach, beforeEach, describe, it, vi } from 'vitest' diff --git a/app/src/organisms/ModuleCard/__tests__/MagneticModuleSlideout.test.tsx b/app/src/organisms/ModuleCard/__tests__/MagneticModuleSlideout.test.tsx index 2820cb7651c..fa10546af90 100644 --- a/app/src/organisms/ModuleCard/__tests__/MagneticModuleSlideout.test.tsx +++ b/app/src/organisms/ModuleCard/__tests__/MagneticModuleSlideout.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { COLORS } from '@opentrons/components' diff --git a/app/src/organisms/ModuleCard/__tests__/ModuleCard.test.tsx b/app/src/organisms/ModuleCard/__tests__/ModuleCard.test.tsx index e426c310216..d30a885b759 100644 --- a/app/src/organisms/ModuleCard/__tests__/ModuleCard.test.tsx +++ b/app/src/organisms/ModuleCard/__tests__/ModuleCard.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { when } from 'vitest-when' import { fireEvent, screen } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' @@ -15,9 +15,9 @@ import { mockHeaterShaker, } from '/app/redux/modules/__fixtures__' import { mockRobot } from '/app/redux/robot-api/__fixtures__' -import { useIsEstopNotDisengaged } from '/app/resources/devices/hooks/useIsEstopNotDisengaged' +import { useIsEstopNotDisengaged } from '/app/resources/devices' import { FAILURE, getRequestById, PENDING, SUCCESS } from '/app/redux/robot-api' -import { useCurrentRunStatus } from '/app/organisms/RunTimeControl/hooks' +import { useCurrentRunStatus } from '/app/organisms/RunTimeControl' import { useToaster } from '/app/organisms/ToasterOven' import { useIsFlex } from '/app/redux-resources/robots' import { MagneticModuleData } from '../MagneticModuleData' @@ -29,7 +29,6 @@ import { FirmwareUpdateFailedModal } from '../FirmwareUpdateFailedModal' import { ErrorInfo } from '../ErrorInfo' import { ModuleCard } from '..' -import type { NavigateFunction } from 'react-router-dom' import type { HeaterShakerModule, MagneticModule, @@ -44,20 +43,12 @@ vi.mock('../ThermocyclerModuleData') vi.mock('../HeaterShakerModuleData') vi.mock('/app/redux/config') vi.mock('../ModuleOverflowMenu') -vi.mock('../../RunTimeControl/hooks') +vi.mock('/app/organisms/RunTimeControl') vi.mock('../FirmwareUpdateFailedModal') vi.mock('/app/redux/robot-api') vi.mock('/app/redux-resources/robots') vi.mock('/app/organisms/ToasterOven') -vi.mock('/app/organisms/Devices/hooks') -vi.mock('/app/resources/devices/hooks/useIsEstopNotDisengaged') -vi.mock('react-router-dom', async importOriginal => { - const actual = await importOriginal() - return { - ...actual, - useNavigate: () => vi.fn(), - } -}) +vi.mock('/app/resources/devices') const mockMagneticModuleHub = { id: 'magdeck_id', diff --git a/app/src/organisms/ModuleCard/__tests__/ModuleOverflowMenu.test.tsx b/app/src/organisms/ModuleCard/__tests__/ModuleOverflowMenu.test.tsx index c840dfe1cff..75701934e36 100644 --- a/app/src/organisms/ModuleCard/__tests__/ModuleOverflowMenu.test.tsx +++ b/app/src/organisms/ModuleCard/__tests__/ModuleOverflowMenu.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' @@ -11,17 +11,14 @@ import { mockHeaterShaker, mockThermocyclerGen2, } from '/app/redux/modules/__fixtures__' -import { - useRunStatuses, - useIsLegacySessionInProgress, -} from '/app/organisms/Devices/hooks' +import { useIsLegacySessionInProgress } from '/app/resources/legacy_sessions' import { useIsFlex } from '/app/redux-resources/robots' -import { useCurrentRunId } from '/app/resources/runs' +import { useCurrentRunId, useRunStatuses } from '/app/resources/runs' import { ModuleOverflowMenu } from '../ModuleOverflowMenu' import type { TemperatureStatus } from '@opentrons/api-client' -vi.mock('../../Devices/hooks') +vi.mock('/app/resources/legacy_sessions') vi.mock('/app/redux-resources/robots') vi.mock('/app/resources/runs') diff --git a/app/src/organisms/ModuleCard/__tests__/ModuleSetupModal.test.tsx b/app/src/organisms/ModuleCard/__tests__/ModuleSetupModal.test.tsx index 3a8dab77008..7f24a60bc7c 100644 --- a/app/src/organisms/ModuleCard/__tests__/ModuleSetupModal.test.tsx +++ b/app/src/organisms/ModuleCard/__tests__/ModuleSetupModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { beforeEach, describe, expect, it, vi } from 'vitest' diff --git a/app/src/organisms/ModuleCard/__tests__/TemperatureModuleData.test.tsx b/app/src/organisms/ModuleCard/__tests__/TemperatureModuleData.test.tsx index 603388807c3..5b851ce5796 100644 --- a/app/src/organisms/ModuleCard/__tests__/TemperatureModuleData.test.tsx +++ b/app/src/organisms/ModuleCard/__tests__/TemperatureModuleData.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { screen } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' diff --git a/app/src/organisms/ModuleCard/__tests__/TemperatureModuleSlideout.test.tsx b/app/src/organisms/ModuleCard/__tests__/TemperatureModuleSlideout.test.tsx index 65fd489abc6..ce65306741d 100644 --- a/app/src/organisms/ModuleCard/__tests__/TemperatureModuleSlideout.test.tsx +++ b/app/src/organisms/ModuleCard/__tests__/TemperatureModuleSlideout.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' diff --git a/app/src/organisms/ModuleCard/__tests__/TestShakeSlideout.test.tsx b/app/src/organisms/ModuleCard/__tests__/TestShakeSlideout.test.tsx index 02e3509b078..f11816df8b6 100644 --- a/app/src/organisms/ModuleCard/__tests__/TestShakeSlideout.test.tsx +++ b/app/src/organisms/ModuleCard/__tests__/TestShakeSlideout.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen, waitFor } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' diff --git a/app/src/organisms/ModuleCard/__tests__/ThermocyclerModuleData.test.tsx b/app/src/organisms/ModuleCard/__tests__/ThermocyclerModuleData.test.tsx index f4289bf175c..0885c74bb5d 100644 --- a/app/src/organisms/ModuleCard/__tests__/ThermocyclerModuleData.test.tsx +++ b/app/src/organisms/ModuleCard/__tests__/ThermocyclerModuleData.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { screen } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' diff --git a/app/src/organisms/ModuleCard/__tests__/ThermocyclerModuleSlideout.test.tsx b/app/src/organisms/ModuleCard/__tests__/ThermocyclerModuleSlideout.test.tsx index 5996f43a6ab..d93a1b1f607 100644 --- a/app/src/organisms/ModuleCard/__tests__/ThermocyclerModuleSlideout.test.tsx +++ b/app/src/organisms/ModuleCard/__tests__/ThermocyclerModuleSlideout.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' diff --git a/app/src/organisms/ModuleCard/__tests__/hooks.test.tsx b/app/src/organisms/ModuleCard/__tests__/hooks.test.tsx index 0a92dd08099..ce0f0450179 100644 --- a/app/src/organisms/ModuleCard/__tests__/hooks.test.tsx +++ b/app/src/organisms/ModuleCard/__tests__/hooks.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { Provider } from 'react-redux' import { when } from 'vitest-when' import { createStore } from 'redux' @@ -17,9 +17,13 @@ import { mockThermocycler, mockThermocyclerGen2, } from '/app/redux/modules/__fixtures__' -import { useIsRobotBusy, useRunStatuses } from '../../Devices/hooks' -import { useMostRecentCompletedAnalysis } from '../../LabwarePositionCheck/useMostRecentCompletedAnalysis' -import { useCurrentRunId } from '/app/resources/runs' +import { useIsRobotBusy } from '/app/redux-resources/robots' + +import { + useCurrentRunId, + useMostRecentCompletedAnalysis, + useRunStatuses, +} from '/app/resources/runs' import { useLatchControls, useModuleOverflowMenu, @@ -30,9 +34,8 @@ import type { Store } from 'redux' import type { State } from '/app/redux/types' vi.mock('@opentrons/react-api-client') -vi.mock('../../LabwarePositionCheck/useMostRecentCompletedAnalysis') vi.mock('/app/resources/runs') -vi.mock('../../Devices/hooks') +vi.mock('/app/redux-resources/robots') const mockCloseLatchHeaterShaker = { id: 'heatershaker_id', diff --git a/app/src/organisms/ModuleCard/hooks.tsx b/app/src/organisms/ModuleCard/hooks.tsx index 0507fb80d88..b0322e9ebc1 100644 --- a/app/src/organisms/ModuleCard/hooks.tsx +++ b/app/src/organisms/ModuleCard/hooks.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useCreateLiveCommandMutation } from '@opentrons/react-api-client' import { useTranslation } from 'react-i18next' import { @@ -13,8 +12,11 @@ import { TEMPERATURE_MODULE_TYPE, THERMOCYCLER_MODULE_TYPE, } from '@opentrons/shared-data' -import { useMostRecentCompletedAnalysis } from '../LabwarePositionCheck/useMostRecentCompletedAnalysis' -import { useCurrentRunId } from '/app/resources/runs' + +import { + useCurrentRunId, + useMostRecentCompletedAnalysis, +} from '/app/resources/runs' import type { HeaterShakerCloseLatchCreateCommand, diff --git a/app/src/organisms/ModuleCard/index.tsx b/app/src/organisms/ModuleCard/index.tsx index f8f847c2a93..7b9cce9ea1c 100644 --- a/app/src/organisms/ModuleCard/index.tsx +++ b/app/src/organisms/ModuleCard/index.tsx @@ -1,9 +1,10 @@ -import * as React from 'react' +import { useState } from 'react' import { Trans, useTranslation } from 'react-i18next' import { useDispatch, useSelector } from 'react-redux' import { ALIGN_START, + Banner, BORDERS, Box, COLORS, @@ -41,12 +42,11 @@ import { dismissRequest, SUCCESS, } from '/app/redux/robot-api' -import { Banner } from '/app/atoms/Banner' import { UpdateBanner } from '/app/molecules/UpdateBanner' import { useChainLiveCommands } from '/app/resources/runs' -import { useCurrentRunStatus } from '/app/organisms/RunTimeControl/hooks' +import { useCurrentRunStatus } from '/app/organisms/RunTimeControl' import { useIsFlex } from '/app/redux-resources/robots' -import { getModuleTooHot } from '/app/organisms/Devices/getModuleTooHot' +import { getModuleTooHot } from '/app/transformations/modules' import { useToaster } from '/app/organisms/ToasterOven' import { MagneticModuleData } from './MagneticModuleData' import { TemperatureModuleData } from './TemperatureModuleData' @@ -59,13 +59,13 @@ import { AboutModuleSlideout } from './AboutModuleSlideout' import { HeaterShakerModuleData } from './HeaterShakerModuleData' import { HeaterShakerSlideout } from './HeaterShakerSlideout' import { TestShakeSlideout } from './TestShakeSlideout' -import { ModuleWizardFlows } from '../ModuleWizardFlows' -import { getModulePrepCommands } from '/app/organisms/Devices/getModulePrepCommands' +import { ModuleWizardFlows } from '/app/organisms/ModuleWizardFlows' +import { getModulePrepCommands } from '/app/local-resources/modules' import { getModuleCardImage } from './utils' import { FirmwareUpdateFailedModal } from './FirmwareUpdateFailedModal' import { ErrorInfo } from './ErrorInfo' import { ModuleSetupModal } from './ModuleSetupModal' -import { useIsEstopNotDisengaged } from '/app/resources/devices/hooks/useIsEstopNotDisengaged' +import { useIsEstopNotDisengaged } from '/app/resources/devices' import type { IconProps } from '@opentrons/components' import type { @@ -116,13 +116,13 @@ export const ModuleCard = (props: ModuleCardProps): JSX.Element | null => { setShowOverflowMenu(false) }, }) - const [showSlideout, setShowSlideout] = React.useState(false) - const [hasSecondary, setHasSecondary] = React.useState(false) - const [showAboutModule, setShowAboutModule] = React.useState(false) - const [showTestShake, setShowTestShake] = React.useState(false) - const [showHSWizard, setShowHSWizard] = React.useState(false) - const [showFWBanner, setShowFWBanner] = React.useState(true) - const [showCalModal, setShowCalModal] = React.useState(false) + const [showSlideout, setShowSlideout] = useState(false) + const [hasSecondary, setHasSecondary] = useState(false) + const [showAboutModule, setShowAboutModule] = useState(false) + const [showTestShake, setShowTestShake] = useState(false) + const [showHSWizard, setShowHSWizard] = useState(false) + const [showFWBanner, setShowFWBanner] = useState(true) + const [showCalModal, setShowCalModal] = useState(false) const [targetProps, tooltipProps] = useHoverTooltip() @@ -143,7 +143,7 @@ export const ModuleCard = (props: ModuleCardProps): JSX.Element | null => { const hasUpdated = !module.hasAvailableUpdate && latestRequest?.status === SUCCESS - const [showFirmwareToast, setShowFirmwareToast] = React.useState(hasUpdated) + const [showFirmwareToast, setShowFirmwareToast] = useState(hasUpdated) const { makeToast } = useToaster() if (showFirmwareToast) { makeToast(t('firmware_updated_successfully') as string, SUCCESS_TOAST) @@ -240,7 +240,7 @@ export const ModuleCard = (props: ModuleCardProps): JSX.Element | null => { const [ prepCommandErrorMessage, setPrepCommandErrorMessage, - ] = React.useState('') + ] = useState('') const handleCalibrateClick = (): void => { if (getModulePrepCommands(module).length > 0) { chainLiveCommands(getModulePrepCommands(module), false).catch( diff --git a/app/src/organisms/ModuleCard/utils.ts b/app/src/organisms/ModuleCard/utils.ts index 825a4bb6c6d..f581b379ca6 100644 --- a/app/src/organisms/ModuleCard/utils.ts +++ b/app/src/organisms/ModuleCard/utils.ts @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, useCallback } from 'react' import last from 'lodash/last' import { useDispatchApiRequest } from '/app/redux/robot-api' @@ -55,7 +55,7 @@ export function useModuleApiRequests(): [ const [ requestIdsBySerial, setRequestIdsBySerial, - ] = React.useState({}) + ] = useState({}) const handleModuleApiRequests = ( robotName: string, @@ -84,7 +84,7 @@ export function useModuleApiRequests(): [ } } - const getLatestRequestId = React.useCallback( + const getLatestRequestId = useCallback( (serialNumber: string): string | null => { if (serialNumber in requestIdsBySerial) { return last(requestIdsBySerial[serialNumber]) ?? null diff --git a/app/src/organisms/ModuleWizardFlows/AttachProbe.tsx b/app/src/organisms/ModuleWizardFlows/AttachProbe.tsx index 18fc3657732..fcd15766a54 100644 --- a/app/src/organisms/ModuleWizardFlows/AttachProbe.tsx +++ b/app/src/organisms/ModuleWizardFlows/AttachProbe.tsx @@ -1,8 +1,8 @@ -import * as React from 'react' import { css } from 'styled-components' import { Trans, useTranslation } from 'react-i18next' import { Flex, + Banner, RESPONSIVENESS, SPACING, LegacyStyledText, @@ -20,7 +20,6 @@ import type { CutoutId, CutoutFixtureId, } from '@opentrons/shared-data' -import { Banner } from '/app/atoms/Banner' import { GenericWizardTile } from '/app/molecules/GenericWizardTile' import type { ModuleCalibrationWizardStepProps } from './types' diff --git a/app/src/organisms/ModuleWizardFlows/BeforeBeginning.tsx b/app/src/organisms/ModuleWizardFlows/BeforeBeginning.tsx index edc65d0ebc0..440d8880af6 100644 --- a/app/src/organisms/ModuleWizardFlows/BeforeBeginning.tsx +++ b/app/src/organisms/ModuleWizardFlows/BeforeBeginning.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { Trans, useTranslation } from 'react-i18next' import { diff --git a/app/src/organisms/ModuleWizardFlows/DetachProbe.tsx b/app/src/organisms/ModuleWizardFlows/DetachProbe.tsx index fa82a3b507d..a580d1af861 100644 --- a/app/src/organisms/ModuleWizardFlows/DetachProbe.tsx +++ b/app/src/organisms/ModuleWizardFlows/DetachProbe.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { css } from 'styled-components' import detachProbe1 from '/app/assets/videos/pipette-wizard-flows/Pipette_Detach_Probe_1.webm' import detachProbe8 from '/app/assets/videos/pipette-wizard-flows/Pipette_Detach_Probe_8.webm' diff --git a/app/src/organisms/ModuleWizardFlows/PlaceAdapter.tsx b/app/src/organisms/ModuleWizardFlows/PlaceAdapter.tsx index f10c1d29fdc..f0af5ae9cd4 100644 --- a/app/src/organisms/ModuleWizardFlows/PlaceAdapter.tsx +++ b/app/src/organisms/ModuleWizardFlows/PlaceAdapter.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useEffect } from 'react' import { useTranslation } from 'react-i18next' import { css } from 'styled-components' import { v4 as uuidv4 } from 'uuid' @@ -79,7 +79,7 @@ export const PlaceAdapter = (props: PlaceAdapterProps): JSX.Element | null => { createdMaintenanceRunId, } = props const { t } = useTranslation('module_wizard_flows') - React.useEffect(() => { + useEffect(() => { if (createdMaintenanceRunId == null) { createMaintenanceRun({}) } diff --git a/app/src/organisms/ModuleWizardFlows/SelectLocation.tsx b/app/src/organisms/ModuleWizardFlows/SelectLocation.tsx index c7b9e98005f..0f993bbfe99 100644 --- a/app/src/organisms/ModuleWizardFlows/SelectLocation.tsx +++ b/app/src/organisms/ModuleWizardFlows/SelectLocation.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import isEqual from 'lodash/isEqual' import { useTranslation } from 'react-i18next' import { css } from 'styled-components' @@ -17,6 +16,7 @@ import { SINGLE_SLOT_FIXTURES, } from '@opentrons/shared-data' import { + Banner, DeckConfigurator, RESPONSIVENESS, SIZE_1, @@ -24,7 +24,6 @@ import { LegacyStyledText, TYPOGRAPHY, } from '@opentrons/components' -import { Banner } from '/app/atoms/Banner' import { GenericWizardTile } from '/app/molecules/GenericWizardTile' import type { ModuleCalibrationWizardStepProps } from './types' import type { diff --git a/app/src/organisms/ModuleWizardFlows/Success.tsx b/app/src/organisms/ModuleWizardFlows/Success.tsx index 724ce984dbb..52a69bb06c0 100644 --- a/app/src/organisms/ModuleWizardFlows/Success.tsx +++ b/app/src/organisms/ModuleWizardFlows/Success.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { css } from 'styled-components' import { getModuleDisplayName } from '@opentrons/shared-data' diff --git a/app/src/organisms/ModuleWizardFlows/index.tsx b/app/src/organisms/ModuleWizardFlows/index.tsx index f964c2a1600..27a3555d70c 100644 --- a/app/src/organisms/ModuleWizardFlows/index.tsx +++ b/app/src/organisms/ModuleWizardFlows/index.tsx @@ -14,9 +14,9 @@ import { getDeckDefFromRobotType, FLEX_ROBOT_TYPE, } from '@opentrons/shared-data' -import { getTopPortalEl } from '../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import { WizardHeader } from '/app/molecules/WizardHeader' -import { useAttachedPipettesFromInstrumentsQuery } from '/app/organisms/Devices/hooks' +import { useAttachedPipettesFromInstrumentsQuery } from '/app/resources/instruments' import { useCreateTargetedMaintenanceRunMutation } from '/app/resources/runs' import { getIsOnDevice } from '/app/redux/config' import { diff --git a/app/src/organisms/ModuleWizardFlows/types.ts b/app/src/organisms/ModuleWizardFlows/types.ts index 39fc6e6920e..64127dd125b 100644 --- a/app/src/organisms/ModuleWizardFlows/types.ts +++ b/app/src/organisms/ModuleWizardFlows/types.ts @@ -1,7 +1,7 @@ import type { AttachedModule } from '@opentrons/api-client' import type { FLOWS, SECTIONS } from './constants' import type { CreateCommand } from '@opentrons/shared-data' -import type { PipetteInformation } from '../Devices/hooks' +import type { PipetteInformation } from '/app/redux/pipettes' export type ModuleCalibrationWizardStep = | BeforeBeginningStep diff --git a/app/src/organisms/ChildNavigation/ChildNavigation.stories.tsx b/app/src/organisms/ODD/ChildNavigation/ChildNavigation.stories.tsx similarity index 100% rename from app/src/organisms/ChildNavigation/ChildNavigation.stories.tsx rename to app/src/organisms/ODD/ChildNavigation/ChildNavigation.stories.tsx diff --git a/app/src/organisms/ChildNavigation/__tests__/ChildNavigation.test.tsx b/app/src/organisms/ODD/ChildNavigation/__tests__/ChildNavigation.test.tsx similarity index 98% rename from app/src/organisms/ChildNavigation/__tests__/ChildNavigation.test.tsx rename to app/src/organisms/ODD/ChildNavigation/__tests__/ChildNavigation.test.tsx index 6bf5654398b..82a0dfb0b3c 100644 --- a/app/src/organisms/ChildNavigation/__tests__/ChildNavigation.test.tsx +++ b/app/src/organisms/ODD/ChildNavigation/__tests__/ChildNavigation.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { vi, it, describe, expect, beforeEach } from 'vitest' diff --git a/app/src/organisms/ChildNavigation/index.tsx b/app/src/organisms/ODD/ChildNavigation/index.tsx similarity index 99% rename from app/src/organisms/ChildNavigation/index.tsx rename to app/src/organisms/ODD/ChildNavigation/index.tsx index 9c2b0596ab1..ea6c72f293b 100644 --- a/app/src/organisms/ChildNavigation/index.tsx +++ b/app/src/organisms/ODD/ChildNavigation/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import styled from 'styled-components' import { diff --git a/app/src/organisms/InstrumentInfo/__tests__/InstrumentInfo.test.tsx b/app/src/organisms/ODD/InstrumentInfo/__tests__/InstrumentInfo.test.tsx similarity index 93% rename from app/src/organisms/InstrumentInfo/__tests__/InstrumentInfo.test.tsx rename to app/src/organisms/ODD/InstrumentInfo/__tests__/InstrumentInfo.test.tsx index ac6387cfc24..a478716483d 100644 --- a/app/src/organisms/InstrumentInfo/__tests__/InstrumentInfo.test.tsx +++ b/app/src/organisms/ODD/InstrumentInfo/__tests__/InstrumentInfo.test.tsx @@ -1,11 +1,11 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, vi, beforeEach, expect } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' import { mockPipetteData1Channel } from '/app/redux/pipettes/__fixtures__' -import { PipetteWizardFlows } from '../../PipetteWizardFlows' -import { GripperWizardFlows } from '../../GripperWizardFlows' +import { PipetteWizardFlows } from '/app/organisms/PipetteWizardFlows' +import { GripperWizardFlows } from '/app/organisms/GripperWizardFlows' import { InstrumentInfo } from '..' import type { GripperData } from '@opentrons/api-client' @@ -13,8 +13,8 @@ import type * as Dom from 'react-router-dom' const mockNavigate = vi.fn() -vi.mock('../../PipetteWizardFlows') -vi.mock('../../GripperWizardFlows') +vi.mock('/app/organisms/PipetteWizardFlows') +vi.mock('/app/organisms/GripperWizardFlows') vi.mock('react-router-dom', async importOriginal => { const reactRouterDom = await importOriginal() return { diff --git a/app/src/organisms/InstrumentInfo/index.tsx b/app/src/organisms/ODD/InstrumentInfo/index.tsx similarity index 95% rename from app/src/organisms/InstrumentInfo/index.tsx rename to app/src/organisms/ODD/InstrumentInfo/index.tsx index c4c77cbf100..68c3ebd5388 100644 --- a/app/src/organisms/InstrumentInfo/index.tsx +++ b/app/src/organisms/ODD/InstrumentInfo/index.tsx @@ -16,11 +16,11 @@ import { SINGLE_MOUNT_PIPETTES, NINETY_SIX_CHANNEL, } from '@opentrons/shared-data' -import { PipetteWizardFlows } from '../PipetteWizardFlows' -import { GripperWizardFlows } from '../GripperWizardFlows' +import { PipetteWizardFlows } from '/app/organisms/PipetteWizardFlows' +import { GripperWizardFlows } from '/app/organisms/GripperWizardFlows' import { MediumButton } from '/app/atoms/buttons' -import { FLOWS } from '../PipetteWizardFlows/constants' -import { GRIPPER_FLOW_TYPES } from '../GripperWizardFlows/constants' +import { FLOWS } from '/app/organisms/PipetteWizardFlows/constants' +import { GRIPPER_FLOW_TYPES } from '/app/organisms/GripperWizardFlows/constants' import { formatTimeWithUtcLabel } from '/app/resources/runs' import type { InstrumentData } from '@opentrons/api-client' diff --git a/app/src/organisms/InstrumentMountItem/AttachedInstrumentMountItem.tsx b/app/src/organisms/ODD/InstrumentMountItem/AttachedInstrumentMountItem.tsx similarity index 86% rename from app/src/organisms/InstrumentMountItem/AttachedInstrumentMountItem.tsx rename to app/src/organisms/ODD/InstrumentMountItem/AttachedInstrumentMountItem.tsx index d83e3d4e8fd..d2de81b8fdc 100644 --- a/app/src/organisms/InstrumentMountItem/AttachedInstrumentMountItem.tsx +++ b/app/src/organisms/ODD/InstrumentMountItem/AttachedInstrumentMountItem.tsx @@ -6,18 +6,18 @@ import { SINGLE_MOUNT_PIPETTES } from '@opentrons/shared-data' import { useGripperDisplayName, usePipetteModelSpecs, -} from '/app/resources/instruments/hooks' -import { ChoosePipette } from '../PipetteWizardFlows/ChoosePipette' -import { FLOWS } from '../PipetteWizardFlows/constants' -import { GRIPPER_FLOW_TYPES } from '../GripperWizardFlows/constants' +} from '/app/local-resources/instruments' +import { ChoosePipette } from '/app/organisms/PipetteWizardFlows/ChoosePipette' +import { FLOWS } from '/app/organisms/PipetteWizardFlows/constants' +import { GRIPPER_FLOW_TYPES } from '/app/organisms/GripperWizardFlows/constants' import { LabeledMount } from './LabeledMount' import type { InstrumentData } from '@opentrons/api-client' import type { GripperModel, PipetteModel } from '@opentrons/shared-data' import type { Mount } from '/app/redux/pipettes/types' -import type { SelectablePipettes } from '../PipetteWizardFlows/types' -import type { GripperWizardFlows } from '../GripperWizardFlows' -import type { PipetteWizardFlows } from '../PipetteWizardFlows' +import type { SelectablePipettes } from '/app/organisms/PipetteWizardFlows/types' +import type { GripperWizardFlows } from '/app/organisms/GripperWizardFlows' +import type { PipetteWizardFlows } from '/app/organisms/PipetteWizardFlows' interface AttachedInstrumentMountItemProps { mount: Mount | 'extension' diff --git a/app/src/organisms/InstrumentMountItem/LabeledMount.tsx b/app/src/organisms/ODD/InstrumentMountItem/LabeledMount.tsx similarity index 98% rename from app/src/organisms/InstrumentMountItem/LabeledMount.tsx rename to app/src/organisms/ODD/InstrumentMountItem/LabeledMount.tsx index 668d7b960a0..20fe3941604 100644 --- a/app/src/organisms/InstrumentMountItem/LabeledMount.tsx +++ b/app/src/organisms/ODD/InstrumentMountItem/LabeledMount.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useTranslation } from 'react-i18next' import styled from 'styled-components' import { diff --git a/app/src/organisms/InstrumentMountItem/ProtocolInstrumentMountItem.tsx b/app/src/organisms/ODD/InstrumentMountItem/ProtocolInstrumentMountItem.tsx similarity index 96% rename from app/src/organisms/InstrumentMountItem/ProtocolInstrumentMountItem.tsx rename to app/src/organisms/ODD/InstrumentMountItem/ProtocolInstrumentMountItem.tsx index 459b584f882..be034e8fb7a 100644 --- a/app/src/organisms/InstrumentMountItem/ProtocolInstrumentMountItem.tsx +++ b/app/src/organisms/ODD/InstrumentMountItem/ProtocolInstrumentMountItem.tsx @@ -22,10 +22,10 @@ import { SmallButton } from '/app/atoms/buttons' import { useGripperDisplayName, usePipetteNameSpecs, -} from '/app/resources/instruments/hooks' -import { FLOWS } from '../PipetteWizardFlows/constants' -import { PipetteWizardFlows } from '../PipetteWizardFlows' -import { GripperWizardFlows } from '../GripperWizardFlows' +} from '/app/local-resources/instruments' +import { FLOWS } from '/app/organisms/PipetteWizardFlows/constants' +import { PipetteWizardFlows } from '/app/organisms/PipetteWizardFlows' +import { GripperWizardFlows } from '/app/organisms/GripperWizardFlows' import type { InstrumentData } from '@opentrons/api-client' import type { diff --git a/app/src/organisms/InstrumentMountItem/__tests__/ProtocolInstrumentMountItem.test.tsx b/app/src/organisms/ODD/InstrumentMountItem/__tests__/ProtocolInstrumentMountItem.test.tsx similarity index 94% rename from app/src/organisms/InstrumentMountItem/__tests__/ProtocolInstrumentMountItem.test.tsx rename to app/src/organisms/ODD/InstrumentMountItem/__tests__/ProtocolInstrumentMountItem.test.tsx index eb4aa97ca65..6c4c308b8d2 100644 --- a/app/src/organisms/InstrumentMountItem/__tests__/ProtocolInstrumentMountItem.test.tsx +++ b/app/src/organisms/ODD/InstrumentMountItem/__tests__/ProtocolInstrumentMountItem.test.tsx @@ -1,15 +1,15 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, vi, beforeEach } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' import { LEFT } from '@opentrons/shared-data' import { fireEvent, screen } from '@testing-library/react' import { i18n } from '/app/i18n' -import { PipetteWizardFlows } from '../../PipetteWizardFlows' -import { GripperWizardFlows } from '../../GripperWizardFlows' +import { PipetteWizardFlows } from '/app/organisms/PipetteWizardFlows' +import { GripperWizardFlows } from '/app/organisms/GripperWizardFlows' import { ProtocolInstrumentMountItem } from '..' -vi.mock('../../PipetteWizardFlows') -vi.mock('../../GripperWizardFlows') +vi.mock('/app/organisms/PipetteWizardFlows') +vi.mock('/app/organisms/GripperWizardFlows') vi.mock('../../TakeoverModal') const mockGripperData = { diff --git a/app/src/organisms/InstrumentMountItem/index.tsx b/app/src/organisms/ODD/InstrumentMountItem/index.tsx similarity index 100% rename from app/src/organisms/InstrumentMountItem/index.tsx rename to app/src/organisms/ODD/InstrumentMountItem/index.tsx diff --git a/app/src/organisms/ODD/NameRobot/ConfirmRobotName.tsx b/app/src/organisms/ODD/NameRobot/ConfirmRobotName.tsx index 526d2a77f3d..962a2d10de3 100644 --- a/app/src/organisms/ODD/NameRobot/ConfirmRobotName.tsx +++ b/app/src/organisms/ODD/NameRobot/ConfirmRobotName.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useNavigate } from 'react-router-dom' import { useTranslation } from 'react-i18next' diff --git a/app/src/organisms/ODD/NameRobot/__tests__/ConfirmRobotName.test.tsx b/app/src/organisms/ODD/NameRobot/__tests__/ConfirmRobotName.test.tsx index 195a0764f0e..d9e8521260e 100644 --- a/app/src/organisms/ODD/NameRobot/__tests__/ConfirmRobotName.test.tsx +++ b/app/src/organisms/ODD/NameRobot/__tests__/ConfirmRobotName.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { fireEvent, screen } from '@testing-library/react' import { beforeEach, describe, expect, it, vi } from 'vitest' diff --git a/app/src/organisms/Navigation/NavigationMenu.tsx b/app/src/organisms/ODD/Navigation/NavigationMenu.tsx similarity index 97% rename from app/src/organisms/Navigation/NavigationMenu.tsx rename to app/src/organisms/ODD/Navigation/NavigationMenu.tsx index 1b18bc19029..d2347bf52b0 100644 --- a/app/src/organisms/Navigation/NavigationMenu.tsx +++ b/app/src/organisms/ODD/Navigation/NavigationMenu.tsx @@ -17,8 +17,8 @@ import { } from '@opentrons/components' import { home, ROBOT } from '/app/redux/robot-controls' -import { useLights } from '../Devices/hooks' -import { getTopPortalEl } from '../../App/portal' +import { useLights } from '/app/resources/devices' +import { getTopPortalEl } from '/app/App/portal' import { RestartRobotConfirmationModal } from './RestartRobotConfirmationModal' import type { Dispatch } from '/app/redux/types' diff --git a/app/src/organisms/Navigation/RestartRobotConfirmationModal.tsx b/app/src/organisms/ODD/Navigation/RestartRobotConfirmationModal.tsx similarity index 98% rename from app/src/organisms/Navigation/RestartRobotConfirmationModal.tsx rename to app/src/organisms/ODD/Navigation/RestartRobotConfirmationModal.tsx index 2cb4d794438..eb903ff5919 100644 --- a/app/src/organisms/Navigation/RestartRobotConfirmationModal.tsx +++ b/app/src/organisms/ODD/Navigation/RestartRobotConfirmationModal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { Trans, useTranslation } from 'react-i18next' import { useDispatch } from 'react-redux' diff --git a/app/src/organisms/Navigation/__tests__/Navigation.test.tsx b/app/src/organisms/ODD/Navigation/__tests__/Navigation.test.tsx similarity index 99% rename from app/src/organisms/Navigation/__tests__/Navigation.test.tsx rename to app/src/organisms/ODD/Navigation/__tests__/Navigation.test.tsx index 7090e1a9551..5a18c86f7dc 100644 --- a/app/src/organisms/Navigation/__tests__/Navigation.test.tsx +++ b/app/src/organisms/ODD/Navigation/__tests__/Navigation.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { fireEvent, screen } from '@testing-library/react' import { beforeEach, describe, expect, it, vi } from 'vitest' diff --git a/app/src/organisms/Navigation/__tests__/NavigationMenu.test.tsx b/app/src/organisms/ODD/Navigation/__tests__/NavigationMenu.test.tsx similarity index 96% rename from app/src/organisms/Navigation/__tests__/NavigationMenu.test.tsx rename to app/src/organisms/ODD/Navigation/__tests__/NavigationMenu.test.tsx index 4912161b8f2..b40122cdd6b 100644 --- a/app/src/organisms/Navigation/__tests__/NavigationMenu.test.tsx +++ b/app/src/organisms/ODD/Navigation/__tests__/NavigationMenu.test.tsx @@ -1,11 +1,11 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' import { home } from '/app/redux/robot-controls' -import { useLights } from '../../Devices/hooks' +import { useLights } from '/app/resources/devices' import { RestartRobotConfirmationModal } from '../RestartRobotConfirmationModal' import { NavigationMenu } from '../NavigationMenu' @@ -13,7 +13,7 @@ import type { NavigateFunction } from 'react-router-dom' vi.mock('/app/redux/robot-admin') vi.mock('/app/redux/robot-controls') -vi.mock('../../Devices/hooks') +vi.mock('/app/resources/devices') vi.mock('../RestartRobotConfirmationModal') const mockNavigate = vi.fn() diff --git a/app/src/organisms/Navigation/__tests__/RestartRobotConfirmationModal.test.tsx b/app/src/organisms/ODD/Navigation/__tests__/RestartRobotConfirmationModal.test.tsx similarity index 97% rename from app/src/organisms/Navigation/__tests__/RestartRobotConfirmationModal.test.tsx rename to app/src/organisms/ODD/Navigation/__tests__/RestartRobotConfirmationModal.test.tsx index 4f18362879e..8922a4225c2 100644 --- a/app/src/organisms/Navigation/__tests__/RestartRobotConfirmationModal.test.tsx +++ b/app/src/organisms/ODD/Navigation/__tests__/RestartRobotConfirmationModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { beforeEach, describe, expect, it, vi } from 'vitest' diff --git a/app/src/organisms/Navigation/index.tsx b/app/src/organisms/ODD/Navigation/index.tsx similarity index 99% rename from app/src/organisms/Navigation/index.tsx rename to app/src/organisms/ODD/Navigation/index.tsx index 2515761f2a4..a49d88a8ca9 100644 --- a/app/src/organisms/Navigation/index.tsx +++ b/app/src/organisms/ODD/Navigation/index.tsx @@ -31,7 +31,7 @@ import { ODD_FOCUS_VISIBLE } from '/app/atoms/buttons/constants' import { useNetworkConnection } from '/app/resources/networking/hooks/useNetworkConnection' import { getLocalRobot } from '/app/redux/discovery' import { NavigationMenu } from './NavigationMenu' -import type { ON_DEVICE_DISPLAY_PATHS } from '../../App/OnDeviceDisplayApp' +import type { ON_DEVICE_DISPLAY_PATHS } from '/app/App/OnDeviceDisplayApp' const NAV_LINKS: Array = [ '/protocols', diff --git a/app/src/organisms/ODD/NetworkSettings/AlternativeSecurityTypeModal.tsx b/app/src/organisms/ODD/NetworkSettings/AlternativeSecurityTypeModal.tsx index d63d34f0667..856423f4125 100644 --- a/app/src/organisms/ODD/NetworkSettings/AlternativeSecurityTypeModal.tsx +++ b/app/src/organisms/ODD/NetworkSettings/AlternativeSecurityTypeModal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { useNavigate } from 'react-router-dom' diff --git a/app/src/organisms/ODD/NetworkSettings/ConnectingNetwork.tsx b/app/src/organisms/ODD/NetworkSettings/ConnectingNetwork.tsx index 1fbb9811b6c..578abd4240d 100644 --- a/app/src/organisms/ODD/NetworkSettings/ConnectingNetwork.tsx +++ b/app/src/organisms/ODD/NetworkSettings/ConnectingNetwork.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { diff --git a/app/src/organisms/ODD/NetworkSettings/DisplaySearchNetwork.tsx b/app/src/organisms/ODD/NetworkSettings/DisplaySearchNetwork.tsx index 195c9d7799d..0dbe2cde650 100644 --- a/app/src/organisms/ODD/NetworkSettings/DisplaySearchNetwork.tsx +++ b/app/src/organisms/ODD/NetworkSettings/DisplaySearchNetwork.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { diff --git a/app/src/organisms/ODD/NetworkSettings/DisplayWifiList.tsx b/app/src/organisms/ODD/NetworkSettings/DisplayWifiList.tsx index 26ba8610229..3cd76255e32 100644 --- a/app/src/organisms/ODD/NetworkSettings/DisplayWifiList.tsx +++ b/app/src/organisms/ODD/NetworkSettings/DisplayWifiList.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { useNavigate } from 'react-router-dom' import { css } from 'styled-components' @@ -18,7 +17,7 @@ import { } from '@opentrons/components' import { ODD_FOCUS_VISIBLE } from '/app/atoms/buttons/constants' -import { RobotSetupHeader } from '/app/organisms/RobotSetupHeader' +import { RobotSetupHeader } from '/app/organisms/ODD/RobotSetupHeader' import { DisplaySearchNetwork } from './DisplaySearchNetwork' import type { WifiNetwork } from '/app/redux/networking/types' diff --git a/app/src/organisms/ODD/NetworkSettings/FailedToConnect.tsx b/app/src/organisms/ODD/NetworkSettings/FailedToConnect.tsx index d5a8f4cf331..e3859e4ed29 100644 --- a/app/src/organisms/ODD/NetworkSettings/FailedToConnect.tsx +++ b/app/src/organisms/ODD/NetworkSettings/FailedToConnect.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { diff --git a/app/src/organisms/ODD/NetworkSettings/SelectAuthenticationType.tsx b/app/src/organisms/ODD/NetworkSettings/SelectAuthenticationType.tsx index b017af2a927..b918d48df5e 100644 --- a/app/src/organisms/ODD/NetworkSettings/SelectAuthenticationType.tsx +++ b/app/src/organisms/ODD/NetworkSettings/SelectAuthenticationType.tsx @@ -18,7 +18,7 @@ import { import { getLocalRobot } from '/app/redux/discovery' import { getNetworkInterfaces, fetchStatus } from '/app/redux/networking' -import { useIsUnboxingFlowOngoing } from '../hooks' +import { useIsUnboxingFlowOngoing } from '/app/redux-resources/config' import { AlternativeSecurityTypeModal } from './AlternativeSecurityTypeModal' import type { WifiSecurityType } from '@opentrons/api-client' diff --git a/app/src/organisms/ODD/NetworkSettings/SetWifiCred.tsx b/app/src/organisms/ODD/NetworkSettings/SetWifiCred.tsx index 52cc37bd2cf..7d53b34f20c 100644 --- a/app/src/organisms/ODD/NetworkSettings/SetWifiCred.tsx +++ b/app/src/organisms/ODD/NetworkSettings/SetWifiCred.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useRef, useState, memo, useEffect } from 'react' import { useTranslation } from 'react-i18next' import { @@ -19,7 +19,7 @@ import { } from '@opentrons/components' import { FullKeyboard } from '/app/atoms/SoftwareKeyboard' -import { useIsUnboxingFlowOngoing } from '../hooks' +import { useIsUnboxingFlowOngoing } from '/app/redux-resources/config' interface SetWifiCredProps { password: string @@ -31,16 +31,16 @@ export function SetWifiCred({ setPassword, }: SetWifiCredProps): JSX.Element { const { t } = useTranslation(['device_settings', 'shared']) - const keyboardRef = React.useRef(null) - const [showPassword, setShowPassword] = React.useState(false) - const inputRef = React.useRef(null) + const keyboardRef = useRef(null) + const [showPassword, setShowPassword] = useState(false) + const inputRef = useRef(null) const isUnboxingFlowOngoing = useIsUnboxingFlowOngoing() - const MemoizedInput = React.memo(InputField) + const MemoizedInput = memo(InputField) const handleBlur = (): void => { if (inputRef.current != null) inputRef.current?.focus() } - React.useEffect(() => { + useEffect(() => { if (inputRef.current != null) { inputRef.current.focus() } diff --git a/app/src/organisms/ODD/NetworkSettings/SetWifiSsid.tsx b/app/src/organisms/ODD/NetworkSettings/SetWifiSsid.tsx index c537aa3dab6..d2ea891a254 100644 --- a/app/src/organisms/ODD/NetworkSettings/SetWifiSsid.tsx +++ b/app/src/organisms/ODD/NetworkSettings/SetWifiSsid.tsx @@ -13,7 +13,7 @@ import { } from '@opentrons/components' import { FullKeyboard } from '/app/atoms/SoftwareKeyboard' -import { useIsUnboxingFlowOngoing } from '../hooks' +import { useIsUnboxingFlowOngoing } from '/app/redux-resources/config' interface SetWifiSsidProps { errorMessage?: string | null diff --git a/app/src/organisms/ODD/NetworkSettings/WifiConnectionDetails.tsx b/app/src/organisms/ODD/NetworkSettings/WifiConnectionDetails.tsx index e6fd446f129..04e0fdb66a9 100644 --- a/app/src/organisms/ODD/NetworkSettings/WifiConnectionDetails.tsx +++ b/app/src/organisms/ODD/NetworkSettings/WifiConnectionDetails.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, useEffect } from 'react' import { useTranslation } from 'react-i18next' import { useDispatch, useSelector } from 'react-redux' import { useNavigate } from 'react-router-dom' @@ -18,7 +18,7 @@ import { } from '@opentrons/components' import { MediumButton } from '/app/atoms/buttons' -import { RobotSetupHeader } from '/app/organisms/RobotSetupHeader' +import { RobotSetupHeader } from '/app/organisms/ODD/RobotSetupHeader' import { getLocalRobot } from '/app/redux/discovery' import { getNetworkInterfaces, fetchStatus } from '/app/redux/networking' import { NetworkDetailsModal } from '../RobotSettingsDashboard/NetworkSettings/NetworkDetailsModal' @@ -53,9 +53,9 @@ export function WifiConnectionDetails({ const [ showNetworkDetailsModal, setShowNetworkDetailsModal, - ] = React.useState(false) + ] = useState(false) - React.useEffect(() => { + useEffect(() => { dispatch(fetchStatus(robotName)) // eslint-disable-next-line react-hooks/exhaustive-deps }, []) diff --git a/app/src/organisms/ODD/NetworkSettings/__tests__/AlternativeSecurityTypeModal.test.tsx b/app/src/organisms/ODD/NetworkSettings/__tests__/AlternativeSecurityTypeModal.test.tsx index 719ede15b7e..a01af9bba66 100644 --- a/app/src/organisms/ODD/NetworkSettings/__tests__/AlternativeSecurityTypeModal.test.tsx +++ b/app/src/organisms/ODD/NetworkSettings/__tests__/AlternativeSecurityTypeModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { beforeEach, describe, expect, it, vi } from 'vitest' diff --git a/app/src/organisms/ODD/NetworkSettings/__tests__/ConnectingNetwork.test.tsx b/app/src/organisms/ODD/NetworkSettings/__tests__/ConnectingNetwork.test.tsx index 293d6ad31cc..e040bee4572 100644 --- a/app/src/organisms/ODD/NetworkSettings/__tests__/ConnectingNetwork.test.tsx +++ b/app/src/organisms/ODD/NetworkSettings/__tests__/ConnectingNetwork.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { screen } from '@testing-library/react' import { beforeEach, describe, expect, it } from 'vitest' diff --git a/app/src/organisms/ODD/NetworkSettings/__tests__/DisplaySearchNetwork.test.tsx b/app/src/organisms/ODD/NetworkSettings/__tests__/DisplaySearchNetwork.test.tsx index 67a04a01977..b26dba4cd68 100644 --- a/app/src/organisms/ODD/NetworkSettings/__tests__/DisplaySearchNetwork.test.tsx +++ b/app/src/organisms/ODD/NetworkSettings/__tests__/DisplaySearchNetwork.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { screen } from '@testing-library/react' import { describe, expect, it } from 'vitest' diff --git a/app/src/organisms/ODD/NetworkSettings/__tests__/DisplayWifiList.test.tsx b/app/src/organisms/ODD/NetworkSettings/__tests__/DisplayWifiList.test.tsx index 756bc146ed6..e1449be3b9d 100644 --- a/app/src/organisms/ODD/NetworkSettings/__tests__/DisplayWifiList.test.tsx +++ b/app/src/organisms/ODD/NetworkSettings/__tests__/DisplayWifiList.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' diff --git a/app/src/organisms/ODD/NetworkSettings/__tests__/FailedToConnect.test.tsx b/app/src/organisms/ODD/NetworkSettings/__tests__/FailedToConnect.test.tsx index 6bcd02a200e..3dbf7bf1f46 100644 --- a/app/src/organisms/ODD/NetworkSettings/__tests__/FailedToConnect.test.tsx +++ b/app/src/organisms/ODD/NetworkSettings/__tests__/FailedToConnect.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { fireEvent, screen } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' diff --git a/app/src/organisms/ODD/NetworkSettings/__tests__/SelectAuthenticationType.test.tsx b/app/src/organisms/ODD/NetworkSettings/__tests__/SelectAuthenticationType.test.tsx index a5df5d7ba5e..bfce05cc22d 100644 --- a/app/src/organisms/ODD/NetworkSettings/__tests__/SelectAuthenticationType.test.tsx +++ b/app/src/organisms/ODD/NetworkSettings/__tests__/SelectAuthenticationType.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { MemoryRouter } from 'react-router-dom' import { afterEach, beforeEach, describe, it, vi } from 'vitest' @@ -6,7 +6,7 @@ import { afterEach, beforeEach, describe, it, vi } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' import { getNetworkInterfaces, INTERFACE_WIFI } from '/app/redux/networking' -import { useIsUnboxingFlowOngoing } from '../../hooks' +import { useIsUnboxingFlowOngoing } from '/app/redux-resources/config' import { AlternativeSecurityTypeModal } from '../AlternativeSecurityTypeModal' import { SelectAuthenticationType } from '../SelectAuthenticationType' import { SetWifiCred } from '../SetWifiCred' @@ -20,7 +20,7 @@ vi.mock('../SetWifiCred') vi.mock('/app/redux/networking') vi.mock('/app/redux/discovery/selectors') vi.mock('../AlternativeSecurityTypeModal') -vi.mock('../../hooks') +vi.mock('/app/redux-resources/config') vi.mock('react-router-dom', async importOriginal => { const actual = await importOriginal() return { diff --git a/app/src/organisms/ODD/NetworkSettings/__tests__/SetWifiCred.test.tsx b/app/src/organisms/ODD/NetworkSettings/__tests__/SetWifiCred.test.tsx index 4a89304f677..d1a25f069c9 100644 --- a/app/src/organisms/ODD/NetworkSettings/__tests__/SetWifiCred.test.tsx +++ b/app/src/organisms/ODD/NetworkSettings/__tests__/SetWifiCred.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { fireEvent, screen } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' diff --git a/app/src/organisms/ODD/NetworkSettings/__tests__/SetWifiSsid.test.tsx b/app/src/organisms/ODD/NetworkSettings/__tests__/SetWifiSsid.test.tsx index ab3fa750168..11eab279c37 100644 --- a/app/src/organisms/ODD/NetworkSettings/__tests__/SetWifiSsid.test.tsx +++ b/app/src/organisms/ODD/NetworkSettings/__tests__/SetWifiSsid.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { fireEvent, screen } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' diff --git a/app/src/organisms/ODD/NetworkSettings/__tests__/WifiConnectionDetails.test.tsx b/app/src/organisms/ODD/NetworkSettings/__tests__/WifiConnectionDetails.test.tsx index 0ac96705adc..efcee37e0c6 100644 --- a/app/src/organisms/ODD/NetworkSettings/__tests__/WifiConnectionDetails.test.tsx +++ b/app/src/organisms/ODD/NetworkSettings/__tests__/WifiConnectionDetails.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { fireEvent, screen } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' diff --git a/app/src/organisms/OpenDoorAlertModal/__tests__/OpenDoorAlertModal.test.tsx b/app/src/organisms/ODD/OpenDoorAlertModal/__tests__/OpenDoorAlertModal.test.tsx similarity index 94% rename from app/src/organisms/OpenDoorAlertModal/__tests__/OpenDoorAlertModal.test.tsx rename to app/src/organisms/ODD/OpenDoorAlertModal/__tests__/OpenDoorAlertModal.test.tsx index 9bd39379845..a431ecac1cb 100644 --- a/app/src/organisms/OpenDoorAlertModal/__tests__/OpenDoorAlertModal.test.tsx +++ b/app/src/organisms/ODD/OpenDoorAlertModal/__tests__/OpenDoorAlertModal.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { screen } from '@testing-library/react' import { describe, it } from 'vitest' diff --git a/app/src/organisms/OpenDoorAlertModal/index.tsx b/app/src/organisms/ODD/OpenDoorAlertModal/index.tsx similarity index 91% rename from app/src/organisms/OpenDoorAlertModal/index.tsx rename to app/src/organisms/ODD/OpenDoorAlertModal/index.tsx index b12435d9c99..38e18b502e3 100644 --- a/app/src/organisms/OpenDoorAlertModal/index.tsx +++ b/app/src/organisms/ODD/OpenDoorAlertModal/index.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { createPortal } from 'react-dom' import { useTranslation } from 'react-i18next' import { @@ -13,7 +12,7 @@ import { LegacyStyledText, TYPOGRAPHY, } from '@opentrons/components' -import { getTopPortalEl } from '../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import { OddModal } from '/app/molecules/OddModal' export function OpenDoorAlertModal(): JSX.Element { @@ -45,7 +44,7 @@ export function OpenDoorAlertModal(): JSX.Element { textAlign={TYPOGRAPHY.textAlignCenter} color={COLORS.grey60} > - {t('close_door_to_resume')} + {t('close_door_to_resume_run')} diff --git a/app/src/pages/ODD/InstrumentsDashboard/PipetteRecalibrationODDWarning.tsx b/app/src/organisms/ODD/PipetteRecalibrationODDWarning/PipetteRecalibrationODDWarning.tsx similarity index 93% rename from app/src/pages/ODD/InstrumentsDashboard/PipetteRecalibrationODDWarning.tsx rename to app/src/organisms/ODD/PipetteRecalibrationODDWarning/PipetteRecalibrationODDWarning.tsx index 95031cf91c5..1420204a492 100644 --- a/app/src/pages/ODD/InstrumentsDashboard/PipetteRecalibrationODDWarning.tsx +++ b/app/src/organisms/ODD/PipetteRecalibrationODDWarning/PipetteRecalibrationODDWarning.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { useTranslation, Trans } from 'react-i18next' import { ALIGN_CENTER, @@ -15,7 +15,7 @@ import { export const PipetteRecalibrationODDWarning = (): JSX.Element | null => { const { t } = useTranslation('instruments_dashboard') - const [showBanner, setShowBanner] = React.useState(true) + const [showBanner, setShowBanner] = useState(true) if (!showBanner) return null return ( diff --git a/app/src/pages/ODD/InstrumentsDashboard/__tests__/PipetteRecalibrationODDWarning.test.tsx b/app/src/organisms/ODD/PipetteRecalibrationODDWarning/__tests__/PipetteRecalibrationODDWarning.test.tsx similarity index 96% rename from app/src/pages/ODD/InstrumentsDashboard/__tests__/PipetteRecalibrationODDWarning.test.tsx rename to app/src/organisms/ODD/PipetteRecalibrationODDWarning/__tests__/PipetteRecalibrationODDWarning.test.tsx index 0286a6571df..afe42954cb0 100644 --- a/app/src/pages/ODD/InstrumentsDashboard/__tests__/PipetteRecalibrationODDWarning.test.tsx +++ b/app/src/organisms/ODD/PipetteRecalibrationODDWarning/__tests__/PipetteRecalibrationODDWarning.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { screen } from '@testing-library/react' import { describe, it } from 'vitest' diff --git a/app/src/organisms/ODD/PipetteRecalibrationODDWarning/index.ts b/app/src/organisms/ODD/PipetteRecalibrationODDWarning/index.ts new file mode 100644 index 00000000000..822473abfc2 --- /dev/null +++ b/app/src/organisms/ODD/PipetteRecalibrationODDWarning/index.ts @@ -0,0 +1 @@ +export * from './PipetteRecalibrationODDWarning' diff --git a/app/src/organisms/ODD/ProtocolDetails/ProtocolDetailsSkeleton.tsx b/app/src/organisms/ODD/ProtocolDetails/ProtocolDetailsSkeleton.tsx index e34e2d92b35..a7fbcc9accf 100644 --- a/app/src/organisms/ODD/ProtocolDetails/ProtocolDetailsSkeleton.tsx +++ b/app/src/organisms/ODD/ProtocolDetails/ProtocolDetailsSkeleton.tsx @@ -1,5 +1,3 @@ -import * as React from 'react' - import { Flex, BORDERS, DIRECTION_COLUMN, SPACING } from '@opentrons/components' import { Skeleton } from '/app/atoms/Skeleton' diff --git a/app/src/organisms/ODD/ProtocolDetails/__tests__/ProtocolDetailsSkeleton.test.tsx b/app/src/organisms/ODD/ProtocolDetails/__tests__/ProtocolDetailsSkeleton.test.tsx index 04c377834ef..c56d09722fe 100644 --- a/app/src/organisms/ODD/ProtocolDetails/__tests__/ProtocolDetailsSkeleton.test.tsx +++ b/app/src/organisms/ODD/ProtocolDetails/__tests__/ProtocolDetailsSkeleton.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { render, screen } from '@testing-library/react' import { describe, expect, it } from 'vitest' diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupDeckConfiguration/__tests__/ProtocolSetupDeckConfiguration.test.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupDeckConfiguration/__tests__/ProtocolSetupDeckConfiguration.test.tsx index f56c6db8c72..84a7fd2eb87 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupDeckConfiguration/__tests__/ProtocolSetupDeckConfiguration.test.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupDeckConfiguration/__tests__/ProtocolSetupDeckConfiguration.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { when } from 'vitest-when' import { fireEvent, screen } from '@testing-library/react' import { describe, it, vi, beforeEach, afterEach } from 'vitest' @@ -11,9 +11,9 @@ import { import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' -import { useMostRecentCompletedAnalysis } from '../../../../LabwarePositionCheck/useMostRecentCompletedAnalysis' -import { ProtocolSetupDeckConfiguration } from '..' +import { useMostRecentCompletedAnalysis } from '/app/resources/runs' import { useNotifyDeckConfigurationQuery } from '/app/resources/deck_configuration' +import { ProtocolSetupDeckConfiguration } from '..' import type { UseQueryResult } from 'react-query' import type { @@ -24,7 +24,7 @@ import type { Modules } from '@opentrons/api-client' vi.mock('@opentrons/components/src/hardware-sim/BaseDeck/index') vi.mock('@opentrons/react-api-client') -vi.mock('../../../../LabwarePositionCheck/useMostRecentCompletedAnalysis') +vi.mock('/app/resources/runs') vi.mock('/app/resources/deck_configuration') const mockSetSetupScreen = vi.fn() diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupDeckConfiguration/index.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupDeckConfiguration/index.tsx index cc3c181bd2c..a7148788639 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupDeckConfiguration/index.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupDeckConfiguration/index.tsx @@ -19,11 +19,11 @@ import { getSimplestDeckConfigForProtocol, } from '@opentrons/shared-data' -import { ChildNavigation } from '../../../ChildNavigation' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' import { AddFixtureModal } from '../../../DeviceDetailsDeckConfiguration/AddFixtureModal' import { DeckConfigurationDiscardChangesModal } from '../../../DeviceDetailsDeckConfiguration/DeckConfigurationDiscardChangesModal' -import { useMostRecentCompletedAnalysis } from '../../../LabwarePositionCheck/useMostRecentCompletedAnalysis' -import { getTopPortalEl } from '../../../../App/portal' +import { useMostRecentCompletedAnalysis } from '/app/resources/runs' +import { getTopPortalEl } from '/app/App/portal' import { useNotifyDeckConfigurationQuery } from '/app/resources/deck_configuration' import type { diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupInstruments/ProtocolSetupInstruments.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupInstruments/ProtocolSetupInstruments.tsx index 6c757f16dce..1af859bc431 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupInstruments/ProtocolSetupInstruments.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupInstruments/ProtocolSetupInstruments.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import styled from 'styled-components' import { useTranslation } from 'react-i18next' import { @@ -12,10 +12,10 @@ import { } from '@opentrons/components' import { useInstrumentsQuery } from '@opentrons/react-api-client' import { ODDBackButton } from '/app/molecules/ODDBackButton' -import { PipetteRecalibrationODDWarning } from '/app/pages/ODD/InstrumentsDashboard/PipetteRecalibrationODDWarning' -import { getShowPipetteCalibrationWarning } from '../../../Devices/utils' -import { useMostRecentCompletedAnalysis } from '../../../LabwarePositionCheck/useMostRecentCompletedAnalysis' -import { ProtocolInstrumentMountItem } from '../../../InstrumentMountItem' +import { PipetteRecalibrationODDWarning } from '/app/organisms/ODD/PipetteRecalibrationODDWarning' +import { getShowPipetteCalibrationWarning } from '/app/transformations/instruments' +import { useMostRecentCompletedAnalysis } from '/app/resources/runs' +import { ProtocolInstrumentMountItem } from '/app/organisms/ODD/InstrumentMountItem' import type { GripperData, PipetteData } from '@opentrons/api-client' import type { GripperModel } from '@opentrons/shared-data' diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupInstruments/__tests__/ProtocolSetupInstruments.test.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupInstruments/__tests__/ProtocolSetupInstruments.test.tsx index 3d82d3e544d..3a1273130ee 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupInstruments/__tests__/ProtocolSetupInstruments.test.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupInstruments/__tests__/ProtocolSetupInstruments.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { when } from 'vitest-when' import { MemoryRouter } from 'react-router-dom' import { fireEvent, screen } from '@testing-library/react' @@ -11,13 +10,13 @@ import { import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' -import { useMostRecentCompletedAnalysis } from '/app/organisms/LabwarePositionCheck/useMostRecentCompletedAnalysis' +import { useMostRecentCompletedAnalysis } from '/app/resources/runs' import { useIsOEMMode } from '/app/resources/robot-settings/hooks' import { mockRecentAnalysis } from '../__fixtures__' import { ProtocolSetupInstruments } from '..' vi.mock('@opentrons/react-api-client') -vi.mock('/app/organisms/LabwarePositionCheck/useMostRecentCompletedAnalysis') +vi.mock('/app/resources/runs') vi.mock('/app/resources/robot-settings/hooks') const mockGripperData = { diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLabware/LabwareMapView.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLabware/LabwareMapView.tsx index d7003d8a4fa..21b6fb20854 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLabware/LabwareMapView.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLabware/LabwareMapView.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import map from 'lodash/map' import { BaseDeck, Flex } from '@opentrons/components' import { @@ -7,8 +6,8 @@ import { THERMOCYCLER_MODULE_V1, } from '@opentrons/shared-data' -import { getStandardDeckViewLayerBlockList } from '../../../Devices/ProtocolRun/utils/getStandardDeckViewLayerBlockList' -import { getLabwareRenderInfo } from '../../../Devices/ProtocolRun/utils/getLabwareRenderInfo' +import { getStandardDeckViewLayerBlockList } from '/app/local-resources/deck_configuration' +import { getLabwareRenderInfo } from '/app/transformations/analysis' import type { CompletedProtocolAnalysis, @@ -16,7 +15,7 @@ import type { LabwareDefinition2, LoadedLabwareByAdapter, } from '@opentrons/shared-data' -import type { AttachedProtocolModuleMatch } from '../ProtocolSetupModulesAndDeck/utils' +import type { AttachedProtocolModuleMatch } from '/app/transformations/analysis' interface LabwareMapViewProps { attachedProtocolModuleMatches: AttachedProtocolModuleMatch[] diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLabware/SingleLabwareModal.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLabware/SingleLabwareModal.tsx index 81ced71c592..91ccd682acf 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLabware/SingleLabwareModal.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLabware/SingleLabwareModal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { createPortal } from 'react-dom' import { useTranslation } from 'react-i18next' import styled from 'styled-components' @@ -17,7 +16,7 @@ import { } from '@opentrons/components' import { getLabwareDisplayName } from '@opentrons/shared-data' -import { getTopPortalEl } from '../../../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import { OddModal } from '/app/molecules/OddModal' import type { diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLabware/__tests__/LabwareMapView.test.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLabware/__tests__/LabwareMapView.test.tsx index 541c719def6..8729ae0f811 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLabware/__tests__/LabwareMapView.test.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLabware/__tests__/LabwareMapView.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { when } from 'vitest-when' import { describe, it, vi, beforeEach, afterEach, expect } from 'vitest' @@ -12,8 +12,8 @@ import { import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' -import { getLabwareRenderInfo } from '../../../../Devices/ProtocolRun/utils/getLabwareRenderInfo' -import { getStandardDeckViewLayerBlockList } from '../../../../Devices/ProtocolRun/utils/getStandardDeckViewLayerBlockList' +import { getLabwareRenderInfo } from '/app/transformations/analysis' +import { getStandardDeckViewLayerBlockList } from '/app/local-resources/deck_configuration' import { mockProtocolModuleInfo } from '../__fixtures__' import { LabwareMapView } from '../LabwareMapView' @@ -25,7 +25,7 @@ import type { ModuleModel, } from '@opentrons/shared-data' -vi.mock('../../../../Devices/ProtocolRun/utils/getLabwareRenderInfo') +vi.mock('/app/transformations/analysis') vi.mock('@opentrons/components/src/hardware-sim/Labware/LabwareRender') vi.mock('@opentrons/components/src/hardware-sim/BaseDeck') vi.mock('@opentrons/shared-data/js/helpers/getSimplestFlexDeckConfig') diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLabware/__tests__/ProtocolSetupLabware.test.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLabware/__tests__/ProtocolSetupLabware.test.tsx index fe975d4ad0e..0f34b8ebd9e 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLabware/__tests__/ProtocolSetupLabware.test.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLabware/__tests__/ProtocolSetupLabware.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { when } from 'vitest-when' import { MemoryRouter } from 'react-router-dom' @@ -15,8 +14,8 @@ import { import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' -import { useMostRecentCompletedAnalysis } from '/app/organisms/LabwarePositionCheck/useMostRecentCompletedAnalysis' -import { getProtocolModulesInfo } from '../../../../Devices/ProtocolRun/utils/getProtocolModulesInfo' +import { useMostRecentCompletedAnalysis } from '/app/resources/runs' +import { getProtocolModulesInfo } from '/app/transformations/analysis/getProtocolModulesInfo' import { ProtocolSetupLabware } from '..' import { mockProtocolModuleInfo, @@ -40,8 +39,8 @@ vi.mock('@opentrons/react-api-client', async importOriginal => { } }) -vi.mock('/app/organisms/LabwarePositionCheck/useMostRecentCompletedAnalysis') -vi.mock('../../../../Devices/ProtocolRun/utils/getProtocolModulesInfo') +vi.mock('/app/resources/runs') +vi.mock('/app/transformations/analysis/getProtocolModulesInfo') vi.mock('/app/resources/deck_configuration') const RUN_ID = "otie's run" diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLabware/index.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLabware/index.tsx index 8a08f5fa672..1a54e2fc00d 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLabware/index.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLabware/index.tsx @@ -37,13 +37,17 @@ import { import { FloatingActionButton, SmallButton } from '/app/atoms/buttons' import { ODDBackButton } from '/app/molecules/ODDBackButton' -import { getLabwareSetupItemGroups } from '/app/transformations/commands' +import { + getLabwareSetupItemGroups, + getNestedLabwareInfo, +} from '/app/transformations/commands' +import { + getAttachedProtocolModuleMatches, + getProtocolModulesInfo, +} from '/app/transformations/analysis' import { useNotifyDeckConfigurationQuery } from '/app/resources/deck_configuration' -import { getProtocolModulesInfo } from '../../../Devices/ProtocolRun/utils/getProtocolModulesInfo' -import { getNestedLabwareInfo } from '../../../Devices/ProtocolRun/SetupLabware/getNestedLabwareInfo' -import { LabwareStackModal } from '../../../Devices/ProtocolRun/SetupLabware/LabwareStackModal' -import { useMostRecentCompletedAnalysis } from '../../../LabwarePositionCheck/useMostRecentCompletedAnalysis' -import { getAttachedProtocolModuleMatches } from '../ProtocolSetupModulesAndDeck/utils' +import { LabwareStackModal } from '/app/molecules/LabwareStackModal' +import { useMostRecentCompletedAnalysis } from '/app/resources/runs' import { LabwareMapView } from './LabwareMapView' import { SingleLabwareModal } from './SingleLabwareModal' @@ -57,10 +61,12 @@ import type { RunTimeCommand, } from '@opentrons/shared-data' import type { HeaterShakerModule, Modules } from '@opentrons/api-client' -import type { LabwareSetupItem } from '/app/transformations/commands' +import type { + LabwareSetupItem, + NestedLabwareInfo, +} from '/app/transformations/commands' import type { SetupScreens } from '../types' -import type { NestedLabwareInfo } from '../../../Devices/ProtocolRun/SetupLabware/getNestedLabwareInfo' -import type { AttachedProtocolModuleMatch } from '../ProtocolSetupModulesAndDeck/utils' +import type { AttachedProtocolModuleMatch } from '/app/transformations/analysis' const MODULE_REFETCH_INTERVAL_MS = 5000 const DECK_CONFIG_POLL_MS = 5000 diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLiquids/LiquidDetails.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLiquids/LiquidDetails.tsx index 0b1651ad0ae..796e9595d85 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLiquids/LiquidDetails.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLiquids/LiquidDetails.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import styled from 'styled-components' import { useTranslation } from 'react-i18next' import { @@ -14,9 +14,9 @@ import { WRAP, } from '@opentrons/components' import { MICRO_LITERS } from '@opentrons/shared-data' -import { LiquidsLabwareDetailsModal } from '../../../Devices/ProtocolRun/SetupLiquids/LiquidsLabwareDetailsModal' -import { getLocationInfoNames } from '../../../Devices/ProtocolRun/utils/getLocationInfoNames' -import { getVolumePerWell } from '../../../Devices/ProtocolRun/SetupLiquids/utils' +import { LiquidsLabwareDetailsModal } from '/app/organisms/LiquidsLabwareDetailsModal' +import { getLocationInfoNames } from '/app/transformations/commands' +import { getVolumePerWell } from '/app/transformations/analysis' import type { LabwareByLiquidId, @@ -70,9 +70,7 @@ interface LiquidDetailsProps { export function LiquidDetails(props: LiquidDetailsProps): JSX.Element { const { liquid, labwareByLiquidId, runId, commands } = props const { t } = useTranslation('protocol_setup') - const [labwareIdModal, setLabwareIdModal] = React.useState( - null - ) + const [labwareIdModal, setLabwareIdModal] = useState(null) return ( diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLiquids/__tests__/LiquidDetails.test.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLiquids/__tests__/LiquidDetails.test.tsx index 0100a7a27da..feeb3e863a4 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLiquids/__tests__/LiquidDetails.test.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLiquids/__tests__/LiquidDetails.test.tsx @@ -1,25 +1,23 @@ -import * as React from 'react' +import type * as React from 'react' import { screen, fireEvent } from '@testing-library/react' import { describe, it, beforeEach, vi } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' import { RUN_ID_1 } from '/app/resources/runs/__fixtures__' -import { getLocationInfoNames } from '../../../../Devices/ProtocolRun/utils/getLocationInfoNames' -import { getVolumePerWell } from '../../../../Devices/ProtocolRun/SetupLiquids/utils' +import { getLocationInfoNames } from '/app/transformations/commands' +import { getVolumePerWell } from '/app/transformations/analysis' import { LiquidDetails } from '../LiquidDetails' -import { LiquidsLabwareDetailsModal } from '../../../../Devices/ProtocolRun/SetupLiquids/LiquidsLabwareDetailsModal' +import { LiquidsLabwareDetailsModal } from '/app/organisms/LiquidsLabwareDetailsModal' import { MOCK_LABWARE_INFO_BY_LIQUID_ID, MOCK_PROTOCOL_ANALYSIS, } from '../fixtures' import type { CompletedProtocolAnalysis } from '@opentrons/shared-data' -vi.mock('../../../../Devices/ProtocolRun/SetupLiquids/utils') -vi.mock('../../../../Devices/ProtocolRun/utils/getLocationInfoNames') -vi.mock( - '../../../../Devices/ProtocolRun/SetupLiquids/LiquidsLabwareDetailsModal' -) +vi.mock('/app/transformations/analysis') +vi.mock('/app/transformations/commands') +vi.mock('/app/organisms/LiquidsLabwareDetailsModal') const render = (props: React.ComponentProps) => { return renderWithProviders(, { diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLiquids/__tests__/ProtocolSetupLiquids.test.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLiquids/__tests__/ProtocolSetupLiquids.test.tsx index 15a705119f5..487fbbd0bce 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLiquids/__tests__/ProtocolSetupLiquids.test.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLiquids/__tests__/ProtocolSetupLiquids.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, beforeEach, vi } from 'vitest' import { screen, fireEvent } from '@testing-library/react' @@ -10,8 +10,8 @@ import { import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' import { RUN_ID_1 } from '/app/resources/runs/__fixtures__' -import { getTotalVolumePerLiquidId } from '../../../../Devices/ProtocolRun/SetupLiquids/utils' -import { useMostRecentCompletedAnalysis } from '../../../../LabwarePositionCheck/useMostRecentCompletedAnalysis' +import { getTotalVolumePerLiquidId } from '/app/transformations/analysis' +import { useMostRecentCompletedAnalysis } from '/app/resources/runs' import { LiquidDetails } from '../LiquidDetails' import { MOCK_LABWARE_INFO_BY_LIQUID_ID, @@ -22,10 +22,10 @@ import { ProtocolSetupLiquids } from '..' import type * as SharedData from '@opentrons/shared-data' -vi.mock('../../../../Devices/ProtocolRun/SetupLiquids/utils') +vi.mock('/app/transformations/analysis') vi.mock('/app/atoms/buttons') vi.mock('../LiquidDetails') -vi.mock('../../../../LabwarePositionCheck/useMostRecentCompletedAnalysis') +vi.mock('/app/resources/runs') vi.mock('@opentrons/shared-data', async importOriginal => { const actualSharedData = await importOriginal() return { diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLiquids/index.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLiquids/index.tsx index f271d312716..551b7e716cd 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLiquids/index.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupLiquids/index.tsx @@ -22,8 +22,8 @@ import { import { ODDBackButton } from '/app/molecules/ODDBackButton' import { SmallButton } from '/app/atoms/buttons' -import { useMostRecentCompletedAnalysis } from '../../../LabwarePositionCheck/useMostRecentCompletedAnalysis' -import { getTotalVolumePerLiquidId } from '../../../Devices/ProtocolRun/SetupLiquids/utils' +import { useMostRecentCompletedAnalysis } from '/app/resources/runs' +import { getTotalVolumePerLiquidId } from '/app/transformations/analysis' import { LiquidDetails } from './LiquidDetails' import type { ParsedLiquid, RunTimeCommand } from '@opentrons/shared-data' import type { SetupScreens } from '../types' diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/FixtureTable.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/FixtureTable.tsx index 43e5ae29036..3491d7530c7 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/FixtureTable.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/FixtureTable.tsx @@ -20,12 +20,15 @@ import { getFixtureDisplayName, getSimplestDeckConfigForProtocol, SINGLE_SLOT_FIXTURES, + TC_MODULE_LOCATION_OT3, + THERMOCYCLER_V2_FRONT_FIXTURE, + THERMOCYCLER_V2_REAR_FIXTURE, } from '@opentrons/shared-data' import { SmallButton } from '/app/atoms/buttons' import { useDeckConfigurationCompatibility } from '/app/resources/deck_configuration/hooks' import { getRequiredDeckConfig } from '/app/resources/deck_configuration/utils' -import { LocationConflictModal } from '../../../Devices/ProtocolRun/SetupModuleAndDeck/LocationConflictModal' +import { LocationConflictModal } from '/app/organisms/LocationConflictModal' import type { CompletedProtocolAnalysis, @@ -74,8 +77,30 @@ export function FixtureTable({ deckConfigCompatibility ) + const hasTwoLabwareThermocyclerConflicts = + requiredDeckConfigCompatibility.some( + ({ cutoutFixtureId, missingLabwareDisplayName }) => + cutoutFixtureId === THERMOCYCLER_V2_FRONT_FIXTURE && + missingLabwareDisplayName != null + ) && + requiredDeckConfigCompatibility.some( + ({ cutoutFixtureId, missingLabwareDisplayName }) => + cutoutFixtureId === THERMOCYCLER_V2_REAR_FIXTURE && + missingLabwareDisplayName != null + ) + + // if there are two labware conflicts with the thermocycler, don't show the conflict with the thermocycler rear fixture + const filteredDeckConfigCompatibility = requiredDeckConfigCompatibility.filter( + ({ cutoutFixtureId }) => { + return ( + !hasTwoLabwareThermocyclerConflicts || + !(cutoutFixtureId === THERMOCYCLER_V2_REAR_FIXTURE) + ) + } + ) + // list not configured/conflicted fixtures first - const sortedDeckConfigCompatibility = requiredDeckConfigCompatibility.sort( + const sortedDeckConfigCompatibility = filteredDeckConfigCompatibility.sort( a => a.cutoutFixtureId != null && a.compatibleCutoutFixtureIds.includes(a.cutoutFixtureId) @@ -139,6 +164,11 @@ function FixtureTableItem({ cutoutFixtureId != null && compatibleCutoutFixtureIds.includes(cutoutFixtureId) const isRequiredSingleSlotMissing = missingLabwareDisplayName != null + + const isThermocyclerCurrentFixture = + cutoutFixtureId === THERMOCYCLER_V2_FRONT_FIXTURE || + cutoutFixtureId === THERMOCYCLER_V2_REAR_FIXTURE + let chipLabel: JSX.Element if (!isCurrentFixtureCompatible) { const isConflictingFixtureConfigured = @@ -219,7 +249,13 @@ function FixtureTableItem({ - + {showMapView ? ( - + + + ) : ( <> {isModuleMismatch && !clearModuleMismatchBanner ? ( diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/SetupInstructionsModal.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/SetupInstructionsModal.tsx index 4c701bc108e..d2fdc3bf540 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/SetupInstructionsModal.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/SetupInstructionsModal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/__tests__/FixtureTable.test.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/__tests__/FixtureTable.test.tsx index 2f754de1590..e6ca8735d77 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/__tests__/FixtureTable.test.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/__tests__/FixtureTable.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, beforeEach, afterEach, vi, expect } from 'vitest' @@ -12,7 +12,7 @@ import { import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' -import { LocationConflictModal } from '/app/organisms/Devices/ProtocolRun/SetupModuleAndDeck/LocationConflictModal' +import { LocationConflictModal } from '/app/organisms/LocationConflictModal' import { useDeckConfigurationCompatibility } from '/app/resources/deck_configuration/hooks' import { FixtureTable } from '../FixtureTable' import { getLocalRobot } from '/app/redux/discovery' @@ -20,9 +20,7 @@ import { mockConnectedRobot } from '/app/redux/discovery/__fixtures__' vi.mock('/app/redux/discovery') vi.mock('/app/resources/deck_configuration/hooks') -vi.mock( - '/app/organisms/Devices/ProtocolRun/SetupModuleAndDeck/LocationConflictModal' -) +vi.mock('/app/organisms/LocationConflictModal') const mockSetSetupScreen = vi.fn() const mockSetCutoutId = vi.fn() diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/__tests__/ModulesAndDeckMapView.test.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/__tests__/ModulesAndDeckMapView.test.tsx index 0fb9b90fd97..d31a0312d02 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/__tests__/ModulesAndDeckMapView.test.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/__tests__/ModulesAndDeckMapView.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, vi, beforeEach, afterEach } from 'vitest' import { screen } from '@testing-library/react' @@ -16,10 +16,9 @@ vi.mock('@opentrons/components/src/hardware-sim/BaseDeck') vi.mock('@opentrons/api-client') vi.mock('@opentrons/shared-data/js/helpers/getSimplestFlexDeckConfig') vi.mock('/app/redux/config') -vi.mock('../../../../Devices/hooks') vi.mock('/app/resources/deck_configuration/utils') -vi.mock('../../../../Devices/ModuleInfo') -vi.mock('../../../../Devices/ProtocolRun/utils/getLabwareRenderInfo') +vi.mock('/app/molecules/ModuleInfo') +vi.mock('/app/transformations/analysis') const mockRunId = 'mockRunId' const PROTOCOL_ANALYSIS = { diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/__tests__/ProtocolSetupModulesAndDeck.test.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/__tests__/ProtocolSetupModulesAndDeck.test.tsx index f59e0df775b..010a1f43f70 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/__tests__/ProtocolSetupModulesAndDeck.test.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/__tests__/ProtocolSetupModulesAndDeck.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { fireEvent, screen, waitFor } from '@testing-library/react' import { vi, it, expect, describe, beforeEach, afterEach } from 'vitest' import { when } from 'vitest-when' @@ -13,24 +12,25 @@ import { import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' -import { useChainLiveCommands, useRunStatus } from '/app/resources/runs' -import { mockRobotSideAnalysis } from '/app/molecules/Command/__fixtures__' import { - useAttachedModules, + useChainLiveCommands, + useRunStatus, + useMostRecentCompletedAnalysis, useRunCalibrationStatus, -} from '../../../../Devices/hooks' -import { useMostRecentCompletedAnalysis } from '../../../../LabwarePositionCheck/useMostRecentCompletedAnalysis' -import { getProtocolModulesInfo } from '../../../../Devices/ProtocolRun/utils/getProtocolModulesInfo' +} from '/app/resources/runs' +import { mockRobotSideAnalysis } from '/app/molecules/Command/__fixtures__' +import { useAttachedModules } from '/app/resources/modules' +import { + getProtocolModulesInfo, + getAttachedProtocolModuleMatches, +} from '/app/transformations/analysis' import { mockApiHeaterShaker } from '/app/redux/modules/__fixtures__' import { mockProtocolModuleInfo } from '../../ProtocolSetupInstruments/__fixtures__' import { getLocalRobot } from '/app/redux/discovery' import { mockConnectedRobot } from '/app/redux/discovery/__fixtures__' -import { - getAttachedProtocolModuleMatches, - getUnmatchedModulesForProtocol, -} from '../utils' -import { LocationConflictModal } from '../../../../Devices/ProtocolRun/SetupModuleAndDeck/LocationConflictModal' -import { ModuleWizardFlows } from '../../../../ModuleWizardFlows' +import { getUnmatchedModulesForProtocol } from '../utils' +import { LocationConflictModal } from '/app/organisms/LocationConflictModal' +import { ModuleWizardFlows } from '/app/organisms/ModuleWizardFlows' import { SetupInstructionsModal } from '../SetupInstructionsModal' import { FixtureTable } from '../FixtureTable' import { ModulesAndDeckMapView } from '../ModulesAndDeckMapView' @@ -41,18 +41,15 @@ import type { CutoutConfig, DeckConfiguration } from '@opentrons/shared-data' import type { UseQueryResult } from 'react-query' vi.mock('/app/resources/runs') +vi.mock('/app/resources/modules') vi.mock('/app/redux/discovery') -vi.mock('/app/organisms/Devices/hooks') vi.mock('/app/resources/deck_configuration') -vi.mock('/app/organisms/LabwarePositionCheck/useMostRecentCompletedAnalysis') -vi.mock('/app/organisms/Devices/ProtocolRun/utils/getProtocolModulesInfo') +vi.mock('/app/transformations/analysis') vi.mock('../utils') vi.mock('../SetupInstructionsModal') -vi.mock('../../../../ModuleWizardFlows') +vi.mock('/app/organisms/ModuleWizardFlows') vi.mock('../FixtureTable') -vi.mock( - '../../../../Devices/ProtocolRun/SetupModuleAndDeck/LocationConflictModal' -) +vi.mock('/app/organisms/LocationConflictModal') vi.mock('../ModulesAndDeckMapView') const ROBOT_NAME = 'otie' diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/__tests__/SetupInstructionsModal.test.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/__tests__/SetupInstructionsModal.test.tsx index 28c0dd8222b..8f6f4c01739 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/__tests__/SetupInstructionsModal.test.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/__tests__/SetupInstructionsModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, beforeEach, vi } from 'vitest' diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/__tests__/utils.test.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/__tests__/utils.test.tsx index 81fb410bc30..c8d92ad5530 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/__tests__/utils.test.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/__tests__/utils.test.tsx @@ -1,14 +1,8 @@ import { describe, it, expect } from 'vitest' -import { - TEMPERATURE_MODULE_V2_FIXTURE, - getModuleDef2, -} from '@opentrons/shared-data' +import { getModuleDef2 } from '@opentrons/shared-data' import { mockTemperatureModuleGen2 } from '/app/redux/modules/__fixtures__' -import { - getAttachedProtocolModuleMatches, - getUnmatchedModulesForProtocol, -} from '../utils' +import { getUnmatchedModulesForProtocol } from '../utils' const temperatureProtocolModule = { moduleId: 'mockTempModuleId', @@ -36,58 +30,6 @@ const magneticProtocolModule = { slotName: 'D1', } -describe('getAttachedProtocolModuleMatches', () => { - it('returns no module matches when no modules attached', () => { - const result = getAttachedProtocolModuleMatches( - [], - [temperatureProtocolModule, magneticProtocolModule], - [] - ) - expect(result).toEqual([ - { ...temperatureProtocolModule, attachedModuleMatch: null }, - { ...magneticProtocolModule, attachedModuleMatch: null }, - ]) - }) - - it('returns no module matches when no modules match', () => { - const result = getAttachedProtocolModuleMatches( - [mockTemperatureModuleGen2], - [magneticProtocolModule], - [ - { - cutoutId: 'cutoutD1', - cutoutFixtureId: TEMPERATURE_MODULE_V2_FIXTURE, - opentronsModuleSerialNumber: mockTemperatureModuleGen2.serialNumber, - }, - ] - ) - expect(result).toEqual([ - { ...magneticProtocolModule, attachedModuleMatch: null }, - ]) - }) - - it('returns module match when modules match', () => { - const result = getAttachedProtocolModuleMatches( - [mockTemperatureModuleGen2], - [temperatureProtocolModule, magneticProtocolModule], - [ - { - cutoutId: 'cutoutD1', - cutoutFixtureId: TEMPERATURE_MODULE_V2_FIXTURE, - opentronsModuleSerialNumber: mockTemperatureModuleGen2.serialNumber, - }, - ] - ) - expect(result).toEqual([ - { - ...temperatureProtocolModule, - attachedModuleMatch: mockTemperatureModuleGen2, - }, - { ...magneticProtocolModule, attachedModuleMatch: null }, - ]) - }) -}) - describe('getUnmatchedModulesForProtocol', () => { it('returns no missing module ids or remaining attached modules when no modules required or attached', () => { const result = getUnmatchedModulesForProtocol([], []) diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/utils.ts b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/utils.ts index 6d98c8edd11..11862dcca94 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/utils.ts +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupModulesAndDeck/utils.ts @@ -1,81 +1,11 @@ import { - FLEX_ROBOT_TYPE, NON_CONNECTING_MODULE_TYPES, - OT2_ROBOT_TYPE, - checkModuleCompatibility, - getCutoutFixturesForModuleModel, - getCutoutIdsFromModuleSlotName, - getDeckDefFromRobotType, getModuleType, } from '@opentrons/shared-data' -import type { DeckConfiguration, RobotType } from '@opentrons/shared-data' -import type { ProtocolModuleInfo } from '../../../Devices/ProtocolRun/utils/getProtocolModulesInfo' +import type { ProtocolModuleInfo } from '/app/transformations/analysis' import type { AttachedModule } from '/app/redux/modules/types' -export type AttachedProtocolModuleMatch = ProtocolModuleInfo & { - attachedModuleMatch: AttachedModule | null -} - -// NOTE: some logic copied from useModuleRenderInfoForProtocolById -export function getAttachedProtocolModuleMatches( - attachedModules: AttachedModule[], - protocolModulesInfo: ProtocolModuleInfo[], - deckConfig: DeckConfiguration, - robotType: RobotType = FLEX_ROBOT_TYPE -): AttachedProtocolModuleMatch[] { - const deckDef = getDeckDefFromRobotType(robotType) - const robotSupportsModuleConfig = robotType !== OT2_ROBOT_TYPE - const matchedAttachedModules: AttachedModule[] = [] - const attachedProtocolModuleMatches = protocolModulesInfo.map( - protocolModule => { - const moduleFixtures = getCutoutFixturesForModuleModel( - protocolModule.moduleDef.model, - deckDef - ) - const moduleCutoutIds = getCutoutIdsFromModuleSlotName( - protocolModule.slotName, - moduleFixtures, - deckDef - ) - const compatibleAttachedModule = - attachedModules.find( - attachedModule => - checkModuleCompatibility( - attachedModule.moduleModel, - protocolModule.moduleDef.model - ) && - // check id instead of object reference in useModuleRenderInfoForProtocolById - !matchedAttachedModules.some( - matchedAttachedModule => - matchedAttachedModule.serialNumber === - attachedModule.serialNumber - ) && - // then if robotType supports configurable modules check the deck config has a - // a module with the expected serial number in the expected location - (!robotSupportsModuleConfig || - deckConfig.some( - ({ cutoutId, opentronsModuleSerialNumber }) => - attachedModule.serialNumber === opentronsModuleSerialNumber && - moduleCutoutIds.includes(cutoutId) - )) - ) ?? null - if (compatibleAttachedModule !== null) { - matchedAttachedModules.push(compatibleAttachedModule) - return { - ...protocolModule, - attachedModuleMatch: compatibleAttachedModule, - } - } - return { - ...protocolModule, - attachedModuleMatch: null, - } - } - ) - return attachedProtocolModuleMatches -} - interface UnmatchedModuleResults { missingModuleIds: string[] remainingAttachedModules: AttachedModule[] diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupOffsets/index.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupOffsets/index.tsx index a66e6dd8a93..3f287ea80e6 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupOffsets/index.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupOffsets/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useTranslation } from 'react-i18next' import { Chip, @@ -16,11 +16,13 @@ import { useToaster } from '/app/organisms/ToasterOven' import { ODDBackButton } from '/app/molecules/ODDBackButton' import { FloatingActionButton, SmallButton } from '/app/atoms/buttons' import type { SetupScreens } from '../types' -import { useMostRecentCompletedAnalysis } from '../../../LabwarePositionCheck/useMostRecentCompletedAnalysis' import { TerseOffsetTable } from '/app/organisms/LabwarePositionCheck/ResultsSummary' import { getLabwareDefinitionsFromCommands } from '/app/molecules/Command/utils/getLabwareDefinitionsFromCommands' -import { useNotifyRunQuery } from '/app/resources/runs' -import { getLatestCurrentOffsets } from '/app/organisms/Devices/ProtocolRun/SetupLabwarePositionCheck/utils' +import { + useNotifyRunQuery, + useMostRecentCompletedAnalysis, +} from '/app/resources/runs' +import { getLatestCurrentOffsets } from '/app/transformations/runs' export interface ProtocolSetupOffsetsProps { runId: string @@ -120,7 +122,7 @@ export function ProtocolSetupOffsets({ /> ) : ( - + )} (initialFileObject) + ] = useState(initialFileObject) const handleBackButton = (): void => { if (!isEqual(csvFileSelected, initialFileObject)) { @@ -87,7 +87,7 @@ export function ChooseCsvFile({ handleGoBack() } - React.useEffect(() => { + useEffect(() => { if (csvFilesOnUSB.length === 0) { setCsvFileSelected({}) } @@ -119,7 +119,7 @@ export function ChooseCsvFile({ {csvFilesOnRobot.length !== 0 ? ( csvFilesOnRobot.map((csv: CsvFileData) => ( - + - + )) ) : ( @@ -150,7 +150,7 @@ export function ChooseCsvFile({ sortedCsvFilesOnUSB.map(csvFilePath => { const fileName = last(csvFilePath.split('/')) return ( - + {csvFilePath.length !== 0 && fileName !== undefined ? ( ) : null} - + ) }) ) : ( diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/ChooseEnum.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/ChooseEnum.tsx index a4723edf734..0576d1d8c78 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/ChooseEnum.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/ChooseEnum.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { ALIGN_CENTER, @@ -10,7 +9,7 @@ import { TYPOGRAPHY, } from '@opentrons/components' import { useToaster } from '../../../ToasterOven' -import { ChildNavigation } from '../../../ChildNavigation' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' import type { ChoiceParameter } from '@opentrons/shared-data' interface ChooseEnumProps { diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/ChooseNumber.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/ChooseNumber.tsx index 179fbffb5df..cf2ae445e1c 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/ChooseNumber.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/ChooseNumber.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useRef, useState, useEffect } from 'react' import { useTranslation } from 'react-i18next' import { @@ -12,7 +12,7 @@ import { } from '@opentrons/components' import { useToaster } from '/app/organisms/ToasterOven' -import { ChildNavigation } from '/app/organisms/ChildNavigation' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' import { NumericalKeyboard } from '/app/atoms/SoftwareKeyboard' import type { NumberParameter } from '@opentrons/shared-data' @@ -30,16 +30,14 @@ export function ChooseNumber({ const { makeSnackbar } = useToaster() const { i18n, t } = useTranslation(['protocol_setup', 'shared']) - const keyboardRef = React.useRef(null) - const [paramValue, setParamValue] = React.useState( - String(parameter.value) - ) + const keyboardRef = useRef(null) + const [paramValue, setParamValue] = useState(String(parameter.value)) // We need to arbitrarily set the value of the keyboard to a string the // same length as the initial parameter value (as string) when the component mounts // so that the delete button operates properly on the exisiting input field value. - const [prevKeyboardValue, setPrevKeyboardValue] = React.useState('') - React.useEffect(() => { + const [prevKeyboardValue, setPrevKeyboardValue] = useState('') + useEffect(() => { const arbitraryInput = new Array(paramValue).join('*') // @ts-expect-error keyboard should expose for `setInput` method keyboardRef.current?.setInput(arbitraryInput) diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/EmptyFile.stories.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/EmptyFile.stories.tsx index 45d0fa652fa..5932aca9031 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/EmptyFile.stories.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/EmptyFile.stories.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { Flex, SPACING, VIEWPORT } from '@opentrons/components' import { EmptyFile as EmptyFileComponent } from './EmptyFile' diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/EmptyFile.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/EmptyFile.tsx index 888a0f0f91b..413042caad8 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/EmptyFile.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/EmptyFile.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { ALIGN_CENTER, diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/ProtocolSetupParameters.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/ProtocolSetupParameters.tsx index 3264213f10d..a80ea2b1f84 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/ProtocolSetupParameters.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/ProtocolSetupParameters.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, Fragment } from 'react' import { useTranslation } from 'react-i18next' import { useNavigate } from 'react-router-dom' import { @@ -23,7 +23,7 @@ import { getRunTimeParameterFilesForRun, getRunTimeParameterValuesForRun, } from '/app/transformations/runs' -import { ChildNavigation } from '/app/organisms/ChildNavigation' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' import { ResetValuesModal } from './ResetValuesModal' import { ChooseEnum } from './ChooseEnum' import { ChooseNumber } from './ChooseNumber' @@ -62,23 +62,20 @@ export function ProtocolSetupParameters({ const [ chooseValueScreen, setChooseValueScreen, - ] = React.useState(null) + ] = useState(null) const [ showNumericalInputScreen, setShowNumericalInputScreen, - ] = React.useState(null) + ] = useState(null) const [ chooseCsvFileScreen, setChooseCsvFileScreen, - ] = React.useState(null) - const [resetValuesModal, showResetValuesModal] = React.useState( - false - ) - const [startSetup, setStartSetup] = React.useState(false) - const [ - runTimeParametersOverrides, - setRunTimeParametersOverrides, - ] = React.useState( + ] = useState(null) + const [resetValuesModal, showResetValuesModal] = useState(false) + const [startSetup, setStartSetup] = useState(false) + const [runTimeParametersOverrides, setRunTimeParametersOverrides] = useState< + RunTimeParameter[] + >( runTimeParameters.map(parameter => parameter.type === 'csv_file' ? { ...parameter, file: null } @@ -296,7 +293,7 @@ export function ProtocolSetupParameters({ setupStatus = 'inform' } return ( - + - + ) } )} diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/ResetValuesModal.stories.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/ResetValuesModal.stories.tsx index 975d8104a26..3becd83d063 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/ResetValuesModal.stories.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/ResetValuesModal.stories.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { VIEWPORT } from '@opentrons/components' import { ResetValuesModal } from './ResetValuesModal' diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/ResetValuesModal.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/ResetValuesModal.tsx index 4000052e933..ed3e70cd7df 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/ResetValuesModal.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/ResetValuesModal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/ViewOnlyParameters.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/ViewOnlyParameters.tsx index c8c892902a4..1946d122848 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/ViewOnlyParameters.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/ViewOnlyParameters.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useTranslation } from 'react-i18next' import { css } from 'styled-components' @@ -18,8 +18,8 @@ import { LegacyStyledText, TYPOGRAPHY, } from '@opentrons/components' -import { useMostRecentCompletedAnalysis } from '/app/organisms/LabwarePositionCheck/useMostRecentCompletedAnalysis' -import { ChildNavigation } from '/app/organisms/ChildNavigation' +import { useMostRecentCompletedAnalysis } from '/app/resources/runs' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' import { useToaster } from '/app/organisms/ToasterOven' import type { SetupScreens } from '../types' diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/__tests__/AnalysisFailedModal.test.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/__tests__/AnalysisFailedModal.test.tsx index b64e1c34e54..ac43f26d621 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/__tests__/AnalysisFailedModal.test.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/__tests__/AnalysisFailedModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, vi, beforeEach, expect } from 'vitest' import { when } from 'vitest-when' import { fireEvent, screen } from '@testing-library/react' diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/__tests__/ChooseCsvFile.test.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/__tests__/ChooseCsvFile.test.tsx index 6440581840c..2f365fa5fbc 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/__tests__/ChooseCsvFile.test.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/__tests__/ChooseCsvFile.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, beforeEach, vi, expect } from 'vitest' import { screen, fireEvent } from '@testing-library/react' import { when } from 'vitest-when' diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/__tests__/ChooseEnum.test.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/__tests__/ChooseEnum.test.tsx index 9e19d40a78b..a65c760d544 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/__tests__/ChooseEnum.test.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/__tests__/ChooseEnum.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { it, describe, beforeEach, vi, expect } from 'vitest' import { fireEvent, screen } from '@testing-library/react' import '@testing-library/jest-dom/vitest' diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/__tests__/ChooseNumber.test.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/__tests__/ChooseNumber.test.tsx index 6c7d29eeb49..611c0e124fc 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/__tests__/ChooseNumber.test.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/__tests__/ChooseNumber.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { it, describe, beforeEach, vi, expect } from 'vitest' import { fireEvent, screen } from '@testing-library/react' import '@testing-library/jest-dom/vitest' diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/__tests__/EmptyFile.test.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/__tests__/EmptyFile.test.tsx index 0a48ea73f5a..386667d8430 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/__tests__/EmptyFile.test.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/__tests__/EmptyFile.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { describe, it, expect } from 'vitest' import { screen } from '@testing-library/react' diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/__tests__/ProtocolSetupParameters.test.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/__tests__/ProtocolSetupParameters.test.tsx index 0906ae6ae72..18a01391711 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/__tests__/ProtocolSetupParameters.test.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/__tests__/ProtocolSetupParameters.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { when } from 'vitest-when' import { it, describe, beforeEach, vi, expect } from 'vitest' import { fireEvent, screen } from '@testing-library/react' @@ -31,7 +31,7 @@ vi.mock('../ChooseCsvFile') vi.mock('/app/redux/config') vi.mock('/app/organisms/ToasterOven') vi.mock('@opentrons/react-api-client') -vi.mock('/app/organisms/LabwarePositionCheck/useMostRecentCompletedAnalysis') +vi.mock('/app/resources/runs') vi.mock('react-router-dom', async importOriginal => { const reactRouterDom = await importOriginal() return { diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/__tests__/ResetValuesModal.test.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/__tests__/ResetValuesModal.test.tsx index 244fa6808ed..4e263f9984b 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/__tests__/ResetValuesModal.test.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/__tests__/ResetValuesModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, vi, beforeEach, expect } from 'vitest' import { fireEvent, screen } from '@testing-library/react' diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/__tests__/ViewOnlyParameters.test.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/__tests__/ViewOnlyParameters.test.tsx index b360ed71251..aed74fea585 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/__tests__/ViewOnlyParameters.test.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupParameters/__tests__/ViewOnlyParameters.test.tsx @@ -1,15 +1,15 @@ -import * as React from 'react' +import type * as React from 'react' import { when } from 'vitest-when' import { it, describe, beforeEach, vi, expect } from 'vitest' import { fireEvent, screen } from '@testing-library/react' import { i18n } from '/app/i18n' import { renderWithProviders } from '/app/__testing-utils__' -import { useMostRecentCompletedAnalysis } from '/app/organisms/LabwarePositionCheck/useMostRecentCompletedAnalysis' +import { useMostRecentCompletedAnalysis } from '/app/resources/runs' import { useToaster } from '/app/organisms/ToasterOven' import { mockRunTimeParameterData } from '../../__fixtures__' import { ViewOnlyParameters } from '../ViewOnlyParameters' -vi.mock('/app/organisms/LabwarePositionCheck/useMostRecentCompletedAnalysis') +vi.mock('/app/resources/runs') vi.mock('/app/organisms/ToasterOven') const RUN_ID = 'mockId' const render = (props: React.ComponentProps) => { diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupSkeleton.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupSkeleton.tsx index 4fc048a4422..55a996ef3f3 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupSkeleton.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupSkeleton.tsx @@ -1,5 +1,3 @@ -import * as React from 'react' - import { BORDERS } from '@opentrons/components' import { Skeleton } from '/app/atoms/Skeleton' diff --git a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupStep/index.tsx b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupStep/index.tsx index 5078d53b861..172aa5c7ebd 100644 --- a/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupStep/index.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/ProtocolSetupStep/index.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { css } from 'styled-components' import { Btn, diff --git a/app/src/organisms/ODD/ProtocolSetup/__tests__/ProtocolSetupSkeleton.test.tsx b/app/src/organisms/ODD/ProtocolSetup/__tests__/ProtocolSetupSkeleton.test.tsx index 53f5506c4a7..9fd0d8c3fa0 100644 --- a/app/src/organisms/ODD/ProtocolSetup/__tests__/ProtocolSetupSkeleton.test.tsx +++ b/app/src/organisms/ODD/ProtocolSetup/__tests__/ProtocolSetupSkeleton.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { render, screen } from '@testing-library/react' import { describe, expect, it } from 'vitest' diff --git a/app/src/organisms/QuickTransferFlow/ConfirmExitModal.tsx b/app/src/organisms/ODD/QuickTransferFlow/ConfirmExitModal.tsx similarity index 97% rename from app/src/organisms/QuickTransferFlow/ConfirmExitModal.tsx rename to app/src/organisms/ODD/QuickTransferFlow/ConfirmExitModal.tsx index f92fa2eab8e..9b6420ebbfb 100644 --- a/app/src/organisms/QuickTransferFlow/ConfirmExitModal.tsx +++ b/app/src/organisms/ODD/QuickTransferFlow/ConfirmExitModal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { SPACING, diff --git a/app/src/organisms/QuickTransferFlow/CreateNewTransfer.tsx b/app/src/organisms/ODD/QuickTransferFlow/CreateNewTransfer.tsx similarity index 95% rename from app/src/organisms/QuickTransferFlow/CreateNewTransfer.tsx rename to app/src/organisms/ODD/QuickTransferFlow/CreateNewTransfer.tsx index 49a6bcced3c..10b036b9064 100644 --- a/app/src/organisms/QuickTransferFlow/CreateNewTransfer.tsx +++ b/app/src/organisms/ODD/QuickTransferFlow/CreateNewTransfer.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useTranslation, Trans } from 'react-i18next' import { @@ -10,7 +10,7 @@ import { DIRECTION_COLUMN, } from '@opentrons/components' -import { ChildNavigation } from '../ChildNavigation' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' import { useNotifyDeckConfigurationQuery } from '/app/resources/deck_configuration' import type { SmallButton } from '/app/atoms/buttons' diff --git a/app/src/organisms/QuickTransferFlow/NameQuickTransfer.tsx b/app/src/organisms/ODD/QuickTransferFlow/NameQuickTransfer.tsx similarity index 86% rename from app/src/organisms/QuickTransferFlow/NameQuickTransfer.tsx rename to app/src/organisms/ODD/QuickTransferFlow/NameQuickTransfer.tsx index 5aa111c79c0..8bff060ac38 100644 --- a/app/src/organisms/QuickTransferFlow/NameQuickTransfer.tsx +++ b/app/src/organisms/ODD/QuickTransferFlow/NameQuickTransfer.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, useRef } from 'react' import { useTranslation } from 'react-i18next' import { createPortal } from 'react-dom' @@ -14,9 +14,9 @@ import { TYPOGRAPHY, } from '@opentrons/components' -import { getTopPortalEl } from '../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import { FullKeyboard } from '/app/atoms/SoftwareKeyboard' -import { ChildNavigation } from '../ChildNavigation' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' interface NameQuickTransferProps { onSave: (protocolName: string) => void @@ -25,8 +25,9 @@ interface NameQuickTransferProps { export function NameQuickTransfer(props: NameQuickTransferProps): JSX.Element { const { onSave } = props const { t } = useTranslation('quick_transfer') - const [name, setName] = React.useState('') - const keyboardRef = React.useRef(null) + const [name, setName] = useState('') + const keyboardRef = useRef(null) + const [isSaving, setIsSaving] = useState(false) let error: string | null = null if (name.length > 60) { @@ -40,9 +41,10 @@ export function NameQuickTransfer(props: NameQuickTransferProps): JSX.Element { header={t('name_your_transfer')} buttonText={t('save')} onClickButton={() => { + setIsSaving(true) onSave(name) }} - buttonIsDisabled={name === '' || error != null} + buttonIsDisabled={name === '' || error != null || isSaving} /> ( @@ -81,10 +84,22 @@ export function AirGap(props: AirGapProps): JSX.Element { setCurrentStep(currentStep + 1) } else { dispatch({ type: action, volume: undefined }) + trackEventWithRobotSerial({ + name: ANALYTICS_QUICK_TRANSFER_SETTING_SAVED, + properties: { + setting: `AirGap_${kind}`, + }, + }) onBack() } } else if (currentStep === 2) { dispatch({ type: action, volume: volume ?? undefined }) + trackEventWithRobotSerial({ + name: ANALYTICS_QUICK_TRANSFER_SETTING_SAVED, + properties: { + setting: `AirGap_${kind}`, + }, + }) onBack() } } @@ -207,7 +222,7 @@ export function AirGap(props: AirGapProps): JSX.Element { > { setVolume(Number(e)) }} diff --git a/app/src/organisms/QuickTransferFlow/QuickTransferAdvancedSettings/BaseSettings.tsx b/app/src/organisms/ODD/QuickTransferFlow/QuickTransferAdvancedSettings/BaseSettings.tsx similarity index 100% rename from app/src/organisms/QuickTransferFlow/QuickTransferAdvancedSettings/BaseSettings.tsx rename to app/src/organisms/ODD/QuickTransferFlow/QuickTransferAdvancedSettings/BaseSettings.tsx diff --git a/app/src/organisms/QuickTransferFlow/QuickTransferAdvancedSettings/BlowOut.tsx b/app/src/organisms/ODD/QuickTransferFlow/QuickTransferAdvancedSettings/BlowOut.tsx similarity index 90% rename from app/src/organisms/QuickTransferFlow/QuickTransferAdvancedSettings/BlowOut.tsx rename to app/src/organisms/ODD/QuickTransferFlow/QuickTransferAdvancedSettings/BlowOut.tsx index 34073d18b8e..55984b27d8b 100644 --- a/app/src/organisms/QuickTransferFlow/QuickTransferAdvancedSettings/BlowOut.tsx +++ b/app/src/organisms/ODD/QuickTransferFlow/QuickTransferAdvancedSettings/BlowOut.tsx @@ -15,9 +15,11 @@ import { FLEX_SINGLE_SLOT_BY_CUTOUT_ID, TRASH_BIN_ADAPTER_FIXTURE, } from '@opentrons/shared-data' -import { getTopPortalEl } from '../../../App/portal' +import { ANALYTICS_QUICK_TRANSFER_SETTING_SAVED } from '/app/redux/analytics' +import { getTopPortalEl } from '/app/App/portal' import { useNotifyDeckConfigurationQuery } from '/app/resources/deck_configuration' -import { ChildNavigation } from '../../ChildNavigation' +import { useTrackEventWithRobotSerial } from '/app/redux-resources/analytics' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' import { ACTIONS } from '../constants' import type { DeckConfiguration } from '@opentrons/shared-data' @@ -91,6 +93,7 @@ export const useBlowOutLocationOptions = ( export function BlowOut(props: BlowOutProps): JSX.Element { const { onBack, state, dispatch } = props const { t } = useTranslation('quick_transfer') + const { trackEventWithRobotSerial } = useTrackEventWithRobotSerial() const deckConfig = useNotifyDeckConfigurationQuery().data ?? [] const [isBlowOutEnabled, setisBlowOutEnabled] = React.useState( @@ -134,6 +137,12 @@ export function BlowOut(props: BlowOutProps): JSX.Element { type: ACTIONS.SET_BLOW_OUT, location: undefined, }) + trackEventWithRobotSerial({ + name: ANALYTICS_QUICK_TRANSFER_SETTING_SAVED, + properties: { + settting: `BlowOut`, + }, + }) onBack() } else { setCurrentStep(currentStep + 1) @@ -143,6 +152,12 @@ export function BlowOut(props: BlowOutProps): JSX.Element { type: ACTIONS.SET_BLOW_OUT, location: blowOutLocation, }) + trackEventWithRobotSerial({ + name: ANALYTICS_QUICK_TRANSFER_SETTING_SAVED, + properties: { + settting: `BlowOut`, + }, + }) onBack() } } diff --git a/app/src/organisms/QuickTransferFlow/QuickTransferAdvancedSettings/Delay.tsx b/app/src/organisms/ODD/QuickTransferFlow/QuickTransferAdvancedSettings/Delay.tsx similarity index 90% rename from app/src/organisms/QuickTransferFlow/QuickTransferAdvancedSettings/Delay.tsx rename to app/src/organisms/ODD/QuickTransferFlow/QuickTransferAdvancedSettings/Delay.tsx index 75e2389bf5d..56aad4d7820 100644 --- a/app/src/organisms/QuickTransferFlow/QuickTransferAdvancedSettings/Delay.tsx +++ b/app/src/organisms/ODD/QuickTransferFlow/QuickTransferAdvancedSettings/Delay.tsx @@ -12,9 +12,10 @@ import { POSITION_FIXED, SPACING, } from '@opentrons/components' - -import { getTopPortalEl } from '../../../App/portal' -import { ChildNavigation } from '../../ChildNavigation' +import { ANALYTICS_QUICK_TRANSFER_SETTING_SAVED } from '/app/redux/analytics' +import { getTopPortalEl } from '/app/App/portal' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' +import { useTrackEventWithRobotSerial } from '/app/redux-resources/analytics' import { ACTIONS } from '../constants' import type { @@ -35,6 +36,7 @@ interface DelayProps { export function Delay(props: DelayProps): JSX.Element { const { kind, onBack, state, dispatch } = props const { t } = useTranslation('quick_transfer') + const { trackEventWithRobotSerial } = useTrackEventWithRobotSerial() const keyboardRef = React.useRef(null) const [currentStep, setCurrentStep] = React.useState(1) @@ -87,6 +89,12 @@ export function Delay(props: DelayProps): JSX.Element { type: action, delaySettings: undefined, }) + trackEventWithRobotSerial({ + name: ANALYTICS_QUICK_TRANSFER_SETTING_SAVED, + properties: { + settting: `Delay_${kind}`, + }, + }) onBack() } else { setCurrentStep(2) @@ -102,6 +110,12 @@ export function Delay(props: DelayProps): JSX.Element { positionFromBottom: position, }, }) + trackEventWithRobotSerial({ + name: ANALYTICS_QUICK_TRANSFER_SETTING_SAVED, + properties: { + settting: `Delay_${kind}`, + }, + }) } onBack() } @@ -224,6 +238,7 @@ export function Delay(props: DelayProps): JSX.Element { > { setDelayDuration(Number(e)) }} @@ -264,7 +279,7 @@ export function Delay(props: DelayProps): JSX.Element { > { setPosition(Number(e)) }} diff --git a/app/src/organisms/QuickTransferFlow/QuickTransferAdvancedSettings/FlowRate.tsx b/app/src/organisms/ODD/QuickTransferFlow/QuickTransferAdvancedSettings/FlowRate.tsx similarity index 88% rename from app/src/organisms/QuickTransferFlow/QuickTransferAdvancedSettings/FlowRate.tsx rename to app/src/organisms/ODD/QuickTransferFlow/QuickTransferAdvancedSettings/FlowRate.tsx index dbbad16c11c..88279b1c76a 100644 --- a/app/src/organisms/QuickTransferFlow/QuickTransferAdvancedSettings/FlowRate.tsx +++ b/app/src/organisms/ODD/QuickTransferFlow/QuickTransferAdvancedSettings/FlowRate.tsx @@ -15,10 +15,13 @@ import { LOW_VOLUME_PIPETTES, getTipTypeFromTipRackDefinition, } from '@opentrons/shared-data' +import { ANALYTICS_QUICK_TRANSFER_SETTING_SAVED } from '/app/redux/analytics' -import { getTopPortalEl } from '../../../App/portal' -import { ChildNavigation } from '../../ChildNavigation' +import { getTopPortalEl } from '/app/App/portal' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' import { NumericalKeyboard } from '/app/atoms/SoftwareKeyboard' +import { useTrackEventWithRobotSerial } from '/app/redux-resources/analytics' + import { ACTIONS } from '../constants' import type { SupportedTip } from '@opentrons/shared-data' @@ -38,6 +41,7 @@ interface FlowRateEntryProps { export function FlowRateEntry(props: FlowRateEntryProps): JSX.Element { const { onBack, state, dispatch, kind } = props const { i18n, t } = useTranslation(['quick_transfer', 'shared']) + const { trackEventWithRobotSerial } = useTrackEventWithRobotSerial() const keyboardRef = React.useRef(null) const [flowRate, setFlowRate] = React.useState( @@ -88,6 +92,12 @@ export function FlowRateEntry(props: FlowRateEntryProps): JSX.Element { type: flowRateAction, rate: flowRate, }) + trackEventWithRobotSerial({ + name: ANALYTICS_QUICK_TRANSFER_SETTING_SAVED, + properties: { + setting: `FlowRate_${kind}`, + }, + }) } onBack() } @@ -142,7 +152,7 @@ export function FlowRateEntry(props: FlowRateEntryProps): JSX.Element { > { setFlowRate(Number(e)) }} diff --git a/app/src/organisms/QuickTransferFlow/QuickTransferAdvancedSettings/Mix.tsx b/app/src/organisms/ODD/QuickTransferFlow/QuickTransferAdvancedSettings/Mix.tsx similarity index 90% rename from app/src/organisms/QuickTransferFlow/QuickTransferAdvancedSettings/Mix.tsx rename to app/src/organisms/ODD/QuickTransferFlow/QuickTransferAdvancedSettings/Mix.tsx index c4413cdc04d..3774662bc38 100644 --- a/app/src/organisms/QuickTransferFlow/QuickTransferAdvancedSettings/Mix.tsx +++ b/app/src/organisms/ODD/QuickTransferFlow/QuickTransferAdvancedSettings/Mix.tsx @@ -13,8 +13,10 @@ import { SPACING, } from '@opentrons/components' -import { getTopPortalEl } from '../../../App/portal' -import { ChildNavigation } from '../../ChildNavigation' +import { ANALYTICS_QUICK_TRANSFER_SETTING_SAVED } from '/app/redux/analytics' +import { getTopPortalEl } from '/app/App/portal' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' +import { useTrackEventWithRobotSerial } from '/app/redux-resources/analytics' import { ACTIONS } from '../constants' import type { @@ -35,6 +37,7 @@ interface MixProps { export function Mix(props: MixProps): JSX.Element { const { kind, onBack, state, dispatch } = props const { t } = useTranslation('quick_transfer') + const { trackEventWithRobotSerial } = useTrackEventWithRobotSerial() const keyboardRef = React.useRef(null) const [mixIsEnabled, setMixIsEnabled] = React.useState( @@ -87,6 +90,12 @@ export function Mix(props: MixProps): JSX.Element { type: mixAction, mixSettings: undefined, }) + trackEventWithRobotSerial({ + name: ANALYTICS_QUICK_TRANSFER_SETTING_SAVED, + properties: { + setting: `Mix_${kind}`, + }, + }) onBack() } else { setCurrentStep(2) @@ -99,6 +108,12 @@ export function Mix(props: MixProps): JSX.Element { type: mixAction, mixSettings: { mixVolume, repititions: mixReps }, }) + trackEventWithRobotSerial({ + name: ANALYTICS_QUICK_TRANSFER_SETTING_SAVED, + properties: { + setting: `Mix_${kind}`, + }, + }) } onBack() } @@ -204,7 +219,7 @@ export function Mix(props: MixProps): JSX.Element { > { setMixVolume(Number(e)) }} diff --git a/app/src/organisms/QuickTransferFlow/QuickTransferAdvancedSettings/PipettePath.tsx b/app/src/organisms/ODD/QuickTransferFlow/QuickTransferAdvancedSettings/PipettePath.tsx similarity index 89% rename from app/src/organisms/QuickTransferFlow/QuickTransferAdvancedSettings/PipettePath.tsx rename to app/src/organisms/ODD/QuickTransferFlow/QuickTransferAdvancedSettings/PipettePath.tsx index 86ef6cddf1a..9db8923bd58 100644 --- a/app/src/organisms/QuickTransferFlow/QuickTransferAdvancedSettings/PipettePath.tsx +++ b/app/src/organisms/ODD/QuickTransferFlow/QuickTransferAdvancedSettings/PipettePath.tsx @@ -15,8 +15,10 @@ import { } from '@opentrons/components' import { useNotifyDeckConfigurationQuery } from '/app/resources/deck_configuration' -import { getTopPortalEl } from '../../../App/portal' -import { ChildNavigation } from '../../ChildNavigation' +import { ANALYTICS_QUICK_TRANSFER_SETTING_SAVED } from '/app/redux/analytics' +import { getTopPortalEl } from '/app/App/portal' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' +import { useTrackEventWithRobotSerial } from '/app/redux-resources/analytics' import { useBlowOutLocationOptions } from './BlowOut' import { ACTIONS } from '../constants' @@ -39,6 +41,7 @@ interface PipettePathProps { export function PipettePath(props: PipettePathProps): JSX.Element { const { onBack, state, dispatch } = props const { t } = useTranslation('quick_transfer') + const { trackEventWithRobotSerial } = useTrackEventWithRobotSerial() const keyboardRef = React.useRef(null) const deckConfig = useNotifyDeckConfigurationQuery().data ?? [] @@ -48,9 +51,9 @@ export function PipettePath(props: PipettePathProps): JSX.Element { BlowOutLocation | undefined >(state.blowOut) - const [disposalVolume, setDisposalVolume] = React.useState( - state.volume - ) + const [disposalVolume, setDisposalVolume] = React.useState< + number | undefined + >(state?.disposalVolume) const maxPipetteVolume = Object.values(state.pipette.liquids)[0].maxVolume const tipVolume = Object.values(state.tipRack.wells)[0].totalLiquidVolume @@ -98,6 +101,12 @@ export function PipettePath(props: PipettePathProps): JSX.Element { type: ACTIONS.SET_PIPETTE_PATH, path: selectedPath, }) + trackEventWithRobotSerial({ + name: ANALYTICS_QUICK_TRANSFER_SETTING_SAVED, + properties: { + setting: `PipettePath`, + }, + }) onBack() } else { setCurrentStep(2) @@ -111,6 +120,12 @@ export function PipettePath(props: PipettePathProps): JSX.Element { disposalVolume, blowOutLocation, }) + trackEventWithRobotSerial({ + name: ANALYTICS_QUICK_TRANSFER_SETTING_SAVED, + properties: { + setting: `PipettePath`, + }, + }) onBack() } } @@ -124,7 +139,7 @@ export function PipettePath(props: PipettePathProps): JSX.Element { const volumeRange = { min: 1, max: maxDisposalCapacity } const volumeError = - disposalVolume !== null && + disposalVolume != null && (disposalVolume < volumeRange.min || disposalVolume > volumeRange.max) ? t(`value_out_of_range`, { min: volumeRange.min, @@ -203,7 +218,7 @@ export function PipettePath(props: PipettePathProps): JSX.Element { > { setDisposalVolume(Number(e)) }} diff --git a/app/src/organisms/QuickTransferFlow/QuickTransferAdvancedSettings/TipPosition.tsx b/app/src/organisms/ODD/QuickTransferFlow/QuickTransferAdvancedSettings/TipPosition.tsx similarity index 87% rename from app/src/organisms/QuickTransferFlow/QuickTransferAdvancedSettings/TipPosition.tsx rename to app/src/organisms/ODD/QuickTransferFlow/QuickTransferAdvancedSettings/TipPosition.tsx index 3d831200bca..92082cf9c7d 100644 --- a/app/src/organisms/QuickTransferFlow/QuickTransferAdvancedSettings/TipPosition.tsx +++ b/app/src/organisms/ODD/QuickTransferFlow/QuickTransferAdvancedSettings/TipPosition.tsx @@ -11,11 +11,13 @@ import { SPACING, } from '@opentrons/components' -import { getTopPortalEl } from '../../../App/portal' -import { ChildNavigation } from '../../ChildNavigation' +import { ANALYTICS_QUICK_TRANSFER_SETTING_SAVED } from '/app/redux/analytics' +import { getTopPortalEl } from '/app/App/portal' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' import { NumericalKeyboard } from '/app/atoms/SoftwareKeyboard' import { ACTIONS } from '../constants' import { createPortal } from 'react-dom' +import { useTrackEventWithRobotSerial } from '/app/redux-resources/analytics' import type { QuickTransferSummaryState, @@ -33,6 +35,7 @@ interface TipPositionEntryProps { export function TipPositionEntry(props: TipPositionEntryProps): JSX.Element { const { onBack, state, dispatch, kind } = props const { i18n, t } = useTranslation(['quick_transfer', 'shared']) + const { trackEventWithRobotSerial } = useTrackEventWithRobotSerial() const keyboardRef = React.useRef(null) const [tipPosition, setTipPosition] = React.useState( @@ -74,6 +77,12 @@ export function TipPositionEntry(props: TipPositionEntryProps): JSX.Element { type: tipPositionAction, position: tipPosition, }) + trackEventWithRobotSerial({ + name: ANALYTICS_QUICK_TRANSFER_SETTING_SAVED, + properties: { + setting: `TipPosition_${kind}`, + }, + }) } onBack() } @@ -133,7 +142,7 @@ export function TipPositionEntry(props: TipPositionEntryProps): JSX.Element { > { setTipPosition(Number(e)) }} diff --git a/app/src/organisms/QuickTransferFlow/QuickTransferAdvancedSettings/TouchTip.tsx b/app/src/organisms/ODD/QuickTransferFlow/QuickTransferAdvancedSettings/TouchTip.tsx similarity index 88% rename from app/src/organisms/QuickTransferFlow/QuickTransferAdvancedSettings/TouchTip.tsx rename to app/src/organisms/ODD/QuickTransferFlow/QuickTransferAdvancedSettings/TouchTip.tsx index 1bc81c09c97..de832cf3630 100644 --- a/app/src/organisms/QuickTransferFlow/QuickTransferAdvancedSettings/TouchTip.tsx +++ b/app/src/organisms/ODD/QuickTransferFlow/QuickTransferAdvancedSettings/TouchTip.tsx @@ -13,10 +13,12 @@ import { SPACING, } from '@opentrons/components' -import { getTopPortalEl } from '../../../App/portal' -import { ChildNavigation } from '../../ChildNavigation' +import { ANALYTICS_QUICK_TRANSFER_SETTING_SAVED } from '/app/redux/analytics' +import { getTopPortalEl } from '/app/App/portal' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' import { ACTIONS } from '../constants' import { i18n } from '/app/i18n' +import { useTrackEventWithRobotSerial } from '/app/redux-resources/analytics' import { NumericalKeyboard } from '/app/atoms/SoftwareKeyboard' import type { @@ -35,6 +37,7 @@ interface TouchTipProps { export function TouchTip(props: TouchTipProps): JSX.Element { const { kind, onBack, state, dispatch } = props const { t } = useTranslation('quick_transfer') + const { trackEventWithRobotSerial } = useTrackEventWithRobotSerial() const keyboardRef = React.useRef(null) const [touchTipIsEnabled, setTouchTipIsEnabled] = React.useState( @@ -79,12 +82,24 @@ export function TouchTip(props: TouchTipProps): JSX.Element { if (currentStep === 1) { if (!touchTipIsEnabled) { dispatch({ type: touchTipAction, position: undefined }) + trackEventWithRobotSerial({ + name: ANALYTICS_QUICK_TRANSFER_SETTING_SAVED, + properties: { + setting: `TouchTip_${kind}`, + }, + }) onBack() } else { setCurrentStep(2) } } else if (currentStep === 2) { dispatch({ type: touchTipAction, position: position ?? undefined }) + trackEventWithRobotSerial({ + name: ANALYTICS_QUICK_TRANSFER_SETTING_SAVED, + properties: { + setting: `TouchTip_${kind}`, + }, + }) onBack() } } @@ -196,7 +211,7 @@ export function TouchTip(props: TouchTipProps): JSX.Element { > { setPosition(Number(e)) }} diff --git a/app/src/organisms/QuickTransferFlow/QuickTransferAdvancedSettings/index.tsx b/app/src/organisms/ODD/QuickTransferFlow/QuickTransferAdvancedSettings/index.tsx similarity index 97% rename from app/src/organisms/QuickTransferFlow/QuickTransferAdvancedSettings/index.tsx rename to app/src/organisms/ODD/QuickTransferFlow/QuickTransferAdvancedSettings/index.tsx index de45a16fff1..2911b7975d1 100644 --- a/app/src/organisms/QuickTransferFlow/QuickTransferAdvancedSettings/index.tsx +++ b/app/src/organisms/ODD/QuickTransferFlow/QuickTransferAdvancedSettings/index.tsx @@ -1,5 +1,6 @@ import * as React from 'react' import { useTranslation } from 'react-i18next' + import { ALIGN_CENTER, COLORS, @@ -19,6 +20,9 @@ import { TRASH_BIN_ADAPTER_FIXTURE, WASTE_CHUTE_FIXTURES, } from '@opentrons/shared-data' + +import { ANALYTICS_QUICK_TRANSFER_ADVANCED_SETTINGS_TAB } from '/app/redux/analytics' +import { useTrackEventWithRobotSerial } from '/app/redux-resources/analytics' import { ACTIONS } from '../constants' import { useToaster } from '/app/organisms/ToasterOven' import { FlowRateEntry } from './FlowRate' @@ -47,8 +51,16 @@ export function QuickTransferAdvancedSettings( const [selectedSetting, setSelectedSetting] = React.useState( null ) + const { trackEventWithRobotSerial } = useTrackEventWithRobotSerial() const { makeSnackbar } = useToaster() + React.useEffect(() => { + trackEventWithRobotSerial({ + name: ANALYTICS_QUICK_TRANSFER_ADVANCED_SETTINGS_TAB, + properties: {}, + }) + }, []) + function getBlowoutValueCopy(): string | undefined { if (state.blowOut === 'dest_well') { return t('blow_out_into_destination_well') diff --git a/app/src/organisms/QuickTransferFlow/SaveOrRunModal.tsx b/app/src/organisms/ODD/QuickTransferFlow/SaveOrRunModal.tsx similarity index 81% rename from app/src/organisms/QuickTransferFlow/SaveOrRunModal.tsx rename to app/src/organisms/ODD/QuickTransferFlow/SaveOrRunModal.tsx index 46f4c63d7ee..c9e57469ac0 100644 --- a/app/src/organisms/QuickTransferFlow/SaveOrRunModal.tsx +++ b/app/src/organisms/ODD/QuickTransferFlow/SaveOrRunModal.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { useTranslation } from 'react-i18next' import { SPACING, @@ -19,7 +19,8 @@ interface SaveOrRunModalProps { export const SaveOrRunModal = (props: SaveOrRunModalProps): JSX.Element => { const { t } = useTranslation('quick_transfer') - const [showNameTransfer, setShowNameTransfer] = React.useState(false) + const [showNameTransfer, setShowNameTransfer] = useState(false) + const [isLoading, setIsLoading] = useState(false) return showNameTransfer ? ( @@ -43,6 +44,7 @@ export const SaveOrRunModal = (props: SaveOrRunModalProps): JSX.Element => { { setShowNameTransfer(true) }} @@ -51,7 +53,11 @@ export const SaveOrRunModal = (props: SaveOrRunModalProps): JSX.Element => { { + setIsLoading(true) + props.onRun() + }} /> diff --git a/app/src/organisms/QuickTransferFlow/SelectDestLabware.tsx b/app/src/organisms/ODD/QuickTransferFlow/SelectDestLabware.tsx similarity index 98% rename from app/src/organisms/QuickTransferFlow/SelectDestLabware.tsx rename to app/src/organisms/ODD/QuickTransferFlow/SelectDestLabware.tsx index 5cb809fd041..ba90e54de4d 100644 --- a/app/src/organisms/QuickTransferFlow/SelectDestLabware.tsx +++ b/app/src/organisms/ODD/QuickTransferFlow/SelectDestLabware.tsx @@ -12,7 +12,7 @@ import { RadioButton, } from '@opentrons/components' -import { ChildNavigation } from '../ChildNavigation' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' import { getCompatibleLabwareByCategory } from './utils' import type { LabwareDefinition2 } from '@opentrons/shared-data' diff --git a/app/src/organisms/QuickTransferFlow/SelectDestWells.tsx b/app/src/organisms/ODD/QuickTransferFlow/SelectDestWells.tsx similarity index 88% rename from app/src/organisms/QuickTransferFlow/SelectDestWells.tsx rename to app/src/organisms/ODD/QuickTransferFlow/SelectDestWells.tsx index d05f8993bc3..0cb402f6ee8 100644 --- a/app/src/organisms/QuickTransferFlow/SelectDestWells.tsx +++ b/app/src/organisms/ODD/QuickTransferFlow/SelectDestWells.tsx @@ -11,10 +11,12 @@ import { JUSTIFY_CENTER, } from '@opentrons/components' import { getAllDefinitions } from '@opentrons/shared-data' +import { ANALYTICS_QUICK_TRANSFER_WELL_SELECTION_DURATION } from '/app/redux/analytics' -import { getTopPortalEl } from '../../App/portal' +import { useTrackEventWithRobotSerial } from '/app/redux-resources/analytics' +import { getTopPortalEl } from '/app/App/portal' import { OddModal } from '/app/molecules/OddModal' -import { ChildNavigation } from '/app/organisms/ChildNavigation' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' import { useToaster } from '/app/organisms/ToasterOven' import { WellSelection } from '/app/organisms/WellSelection' import { @@ -39,6 +41,7 @@ interface SelectDestWellsProps { export function SelectDestWells(props: SelectDestWellsProps): JSX.Element { const { onNext, onBack, state, dispatch } = props const { i18n, t } = useTranslation(['quick_transfer', 'shared']) + const { trackEventWithRobotSerial } = useTrackEventWithRobotSerial() const { makeToast } = useToaster() @@ -72,6 +75,21 @@ export function SelectDestWells(props: SelectDestWellsProps): JSX.Element { selectionUnits = t('grids') } + let labwareDefinition = + state.destination === 'source' ? state.source : state.destination + if (labwareDefinition?.parameters.format === '96Standard') { + const allDefinitions = getAllDefinitions() + if (Object.values(labwareDefinition.wells)[0].shape === 'circular') { + labwareDefinition = allDefinitions[CIRCULAR_WELL_96_PLATE_DEFINITION_URI] + } else { + labwareDefinition = + allDefinitions[RECTANGULAR_WELL_96_PLATE_DEFINITION_URI] + } + } + const is384WellPlate = labwareDefinition?.parameters.format === '384Standard' + + const [analyticsStartTime] = React.useState(new Date()) + const handleClickNext = (): void => { if ( selectedWellCount === 1 || @@ -82,6 +100,14 @@ export function SelectDestWells(props: SelectDestWellsProps): JSX.Element { type: 'SET_DEST_WELLS', wells: Object.keys(selectedWells), }) + const duration = new Date().getTime() - analyticsStartTime.getTime() + trackEventWithRobotSerial({ + name: ANALYTICS_QUICK_TRANSFER_WELL_SELECTION_DURATION, + properties: { + is384WellPlate, + duration: `${duration / 1000} seconds`, + }, + }) onNext() } else { setIsNumberWellsSelectedError(true) @@ -113,17 +139,7 @@ export function SelectDestWells(props: SelectDestWellsProps): JSX.Element { e.currentTarget.blur?.() }, } - let labwareDefinition = - state.destination === 'source' ? state.source : state.destination - if (labwareDefinition?.parameters.format === '96Standard') { - const allDefinitions = getAllDefinitions() - if (Object.values(labwareDefinition.wells)[0].shape === 'circular') { - labwareDefinition = allDefinitions[CIRCULAR_WELL_96_PLATE_DEFINITION_URI] - } else { - labwareDefinition = - allDefinitions[RECTANGULAR_WELL_96_PLATE_DEFINITION_URI] - } - } + return ( <> {createPortal( @@ -159,13 +175,7 @@ export function SelectDestWells(props: SelectDestWellsProps): JSX.Element { width="100%" > {labwareDefinition != null ? ( - + { diff --git a/app/src/organisms/QuickTransferFlow/SelectPipette.tsx b/app/src/organisms/ODD/QuickTransferFlow/SelectPipette.tsx similarity index 96% rename from app/src/organisms/QuickTransferFlow/SelectPipette.tsx rename to app/src/organisms/ODD/QuickTransferFlow/SelectPipette.tsx index 18831b06dd3..3331800e1a9 100644 --- a/app/src/organisms/QuickTransferFlow/SelectPipette.tsx +++ b/app/src/organisms/ODD/QuickTransferFlow/SelectPipette.tsx @@ -10,8 +10,8 @@ import { } from '@opentrons/components' import { useInstrumentsQuery } from '@opentrons/react-api-client' import { RIGHT, LEFT } from '@opentrons/shared-data' -import { usePipetteSpecsV2 } from '/app/resources/instruments/hooks' -import { ChildNavigation } from '../ChildNavigation' +import { usePipetteSpecsV2 } from '/app/local-resources/instruments' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' import type { PipetteData, Mount } from '@opentrons/api-client' import type { SmallButton } from '/app/atoms/buttons' diff --git a/app/src/organisms/QuickTransferFlow/SelectSourceLabware.tsx b/app/src/organisms/ODD/QuickTransferFlow/SelectSourceLabware.tsx similarity index 98% rename from app/src/organisms/QuickTransferFlow/SelectSourceLabware.tsx rename to app/src/organisms/ODD/QuickTransferFlow/SelectSourceLabware.tsx index 7807fe46b89..2d4752a5aa1 100644 --- a/app/src/organisms/QuickTransferFlow/SelectSourceLabware.tsx +++ b/app/src/organisms/ODD/QuickTransferFlow/SelectSourceLabware.tsx @@ -12,7 +12,7 @@ import { RadioButton, } from '@opentrons/components' -import { ChildNavigation } from '../ChildNavigation' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' import { getCompatibleLabwareByCategory } from './utils' import type { LabwareDefinition2 } from '@opentrons/shared-data' diff --git a/app/src/organisms/QuickTransferFlow/SelectSourceWells.tsx b/app/src/organisms/ODD/QuickTransferFlow/SelectSourceWells.tsx similarity index 82% rename from app/src/organisms/QuickTransferFlow/SelectSourceWells.tsx rename to app/src/organisms/ODD/QuickTransferFlow/SelectSourceWells.tsx index 9e23f101c83..a78ec884560 100644 --- a/app/src/organisms/QuickTransferFlow/SelectSourceWells.tsx +++ b/app/src/organisms/ODD/QuickTransferFlow/SelectSourceWells.tsx @@ -9,8 +9,10 @@ import { } from '@opentrons/components' import { getAllDefinitions } from '@opentrons/shared-data' -import { ChildNavigation } from '/app/organisms/ChildNavigation' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' import { WellSelection } from '/app/organisms/WellSelection' +import { ANALYTICS_QUICK_TRANSFER_WELL_SELECTION_DURATION } from '/app/redux/analytics' +import { useTrackEventWithRobotSerial } from '/app/redux-resources/analytics' import type { SmallButton } from '/app/atoms/buttons' import type { @@ -33,6 +35,7 @@ export const RECTANGULAR_WELL_96_PLATE_DEFINITION_URI = export function SelectSourceWells(props: SelectSourceWellsProps): JSX.Element { const { onNext, onBack, state, dispatch } = props const { i18n, t } = useTranslation(['quick_transfer', 'shared']) + const { trackEventWithRobotSerial } = useTrackEventWithRobotSerial() const sourceWells = state.sourceWells ?? [] const sourceWellGroup = sourceWells.reduce((acc, well) => { @@ -40,12 +43,22 @@ export function SelectSourceWells(props: SelectSourceWellsProps): JSX.Element { }, {}) const [selectedWells, setSelectedWells] = React.useState(sourceWellGroup) + const [startingTimeStamp] = React.useState(new Date()) + const is384WellPlate = state.source?.parameters.format === '384Standard' const handleClickNext = (): void => { dispatch({ type: 'SET_SOURCE_WELLS', wells: Object.keys(selectedWells), }) + const duration = new Date().getTime() - startingTimeStamp?.getTime() + trackEventWithRobotSerial({ + name: ANALYTICS_QUICK_TRANSFER_WELL_SELECTION_DURATION, + properties: { + is384WellPlate, + duration: `${duration / 1000} seconds`, + }, + }) onNext() } @@ -91,11 +104,7 @@ export function SelectSourceWells(props: SelectSourceWellsProps): JSX.Element { width="100%" > {state.source != null && displayLabwareDefinition != null ? ( - + { diff --git a/app/src/organisms/QuickTransferFlow/SelectTipRack.tsx b/app/src/organisms/ODD/QuickTransferFlow/SelectTipRack.tsx similarity index 97% rename from app/src/organisms/QuickTransferFlow/SelectTipRack.tsx rename to app/src/organisms/ODD/QuickTransferFlow/SelectTipRack.tsx index 588db092b06..e8ebd52d90c 100644 --- a/app/src/organisms/QuickTransferFlow/SelectTipRack.tsx +++ b/app/src/organisms/ODD/QuickTransferFlow/SelectTipRack.tsx @@ -7,7 +7,7 @@ import { RadioButton, } from '@opentrons/components' import { getAllDefinitions } from '@opentrons/shared-data' -import { ChildNavigation } from '../ChildNavigation' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' import type { LabwareDefinition2 } from '@opentrons/shared-data' import type { SmallButton } from '/app/atoms/buttons' diff --git a/app/src/organisms/QuickTransferFlow/SummaryAndSettings.tsx b/app/src/organisms/ODD/QuickTransferFlow/SummaryAndSettings.tsx similarity index 80% rename from app/src/organisms/QuickTransferFlow/SummaryAndSettings.tsx rename to app/src/organisms/ODD/QuickTransferFlow/SummaryAndSettings.tsx index cfc7d96e21d..6ddba5ca50e 100644 --- a/app/src/organisms/QuickTransferFlow/SummaryAndSettings.tsx +++ b/app/src/organisms/ODD/QuickTransferFlow/SummaryAndSettings.tsx @@ -17,9 +17,15 @@ import { useCreateRunMutation, useHost, } from '@opentrons/react-api-client' -import { useNotifyDeckConfigurationQuery } from '/app/resources/deck_configuration' -import { ChildNavigation } from '../ChildNavigation' +import { useNotifyDeckConfigurationQuery } from '/app/resources/deck_configuration' +import { + ANALYTICS_QUICK_TRANSFER_TIME_TO_CREATE, + ANALYTICS_QUICK_TRANSFER_SAVE_FOR_LATER, + ANALYTICS_QUICK_TRANSFER_RUN_NOW, +} from '/app/redux/analytics' +import { useTrackEventWithRobotSerial } from '/app/redux-resources/analytics' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' import { Overview } from './Overview' import { TipManagement } from './TipManagement' import { QuickTransferAdvancedSettings } from './QuickTransferAdvancedSettings' @@ -33,13 +39,15 @@ import type { QuickTransferWizardState } from './types' interface SummaryAndSettingsProps { exitButtonProps: React.ComponentProps state: QuickTransferWizardState + analyticsStartTime: Date } export function SummaryAndSettings( props: SummaryAndSettingsProps ): JSX.Element | null { - const { exitButtonProps, state: wizardFlowState } = props + const { exitButtonProps, state: wizardFlowState, analyticsStartTime } = props const navigate = useNavigate() + const { trackEventWithRobotSerial } = useTrackEventWithRobotSerial() const queryClient = useQueryClient() const host = useHost() const { t } = useTranslation(['quick_transfer', 'shared']) @@ -82,6 +90,17 @@ export function SummaryAndSettings( host ) + const handleClickCreateTransfer = (): void => { + setShowSaveOrRunModal(true) + const duration = new Date().getTime() - analyticsStartTime.getTime() + trackEventWithRobotSerial({ + name: ANALYTICS_QUICK_TRANSFER_TIME_TO_CREATE, + properties: { + duration: `${duration / 1000} seconds`, + }, + }) + } + const handleClickSave = (protocolName: string): void => { const protocolFile = createQuickTransferFile( state, @@ -94,6 +113,12 @@ export function SummaryAndSettings( }).then(() => { navigate('/quick-transfer') }) + trackEventWithRobotSerial({ + name: ANALYTICS_QUICK_TRANSFER_SAVE_FOR_LATER, + properties: { + name: protocolName, + }, + }) } const handleClickRun = (): void => { @@ -106,6 +131,10 @@ export function SummaryAndSettings( protocolId: data.data.id, }) }) + trackEventWithRobotSerial({ + name: ANALYTICS_QUICK_TRANSFER_RUN_NOW, + properties: {}, + }) } return showSaveOrRunModal ? ( @@ -115,9 +144,7 @@ export function SummaryAndSettings( { - setShowSaveOrRunModal(true) - }} + onClickButton={handleClickCreateTransfer} secondaryButtonProps={exitButtonProps} /> ( null ) + React.useEffect(() => { + trackEventWithRobotSerial({ + name: ANALYTICS_QUICK_TRANSFER_TIP_MANAGEMENT_TAB, + properties: {}, + }) + }, []) + const displayItems = [ { option: t('change_tip'), diff --git a/app/src/organisms/QuickTransferFlow/VolumeEntry.tsx b/app/src/organisms/ODD/QuickTransferFlow/VolumeEntry.tsx similarity index 98% rename from app/src/organisms/QuickTransferFlow/VolumeEntry.tsx rename to app/src/organisms/ODD/QuickTransferFlow/VolumeEntry.tsx index ce5b96b7316..0a6526676d6 100644 --- a/app/src/organisms/QuickTransferFlow/VolumeEntry.tsx +++ b/app/src/organisms/ODD/QuickTransferFlow/VolumeEntry.tsx @@ -9,7 +9,7 @@ import { SPACING, } from '@opentrons/components' -import { ChildNavigation } from '../ChildNavigation' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' import { NumericalKeyboard } from '/app/atoms/SoftwareKeyboard' import { getVolumeRange } from './utils' import { CONSOLIDATE, DISTRIBUTE } from './constants' diff --git a/app/src/organisms/QuickTransferFlow/__tests__/ConfirmExitModal.test.tsx b/app/src/organisms/ODD/QuickTransferFlow/__tests__/ConfirmExitModal.test.tsx similarity index 97% rename from app/src/organisms/QuickTransferFlow/__tests__/ConfirmExitModal.test.tsx rename to app/src/organisms/ODD/QuickTransferFlow/__tests__/ConfirmExitModal.test.tsx index a35a2b3eb5f..4b50c31ca29 100644 --- a/app/src/organisms/QuickTransferFlow/__tests__/ConfirmExitModal.test.tsx +++ b/app/src/organisms/ODD/QuickTransferFlow/__tests__/ConfirmExitModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, afterEach, vi, beforeEach } from 'vitest' diff --git a/app/src/organisms/QuickTransferFlow/__tests__/CreateNewTransfer.test.tsx b/app/src/organisms/ODD/QuickTransferFlow/__tests__/CreateNewTransfer.test.tsx similarity index 98% rename from app/src/organisms/QuickTransferFlow/__tests__/CreateNewTransfer.test.tsx rename to app/src/organisms/ODD/QuickTransferFlow/__tests__/CreateNewTransfer.test.tsx index 0b72abd3627..178086ae401 100644 --- a/app/src/organisms/QuickTransferFlow/__tests__/CreateNewTransfer.test.tsx +++ b/app/src/organisms/ODD/QuickTransferFlow/__tests__/CreateNewTransfer.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, afterEach, vi, beforeEach } from 'vitest' import { DeckConfigurator } from '@opentrons/components' diff --git a/app/src/organisms/QuickTransferFlow/__tests__/NameQuickTransfer.test.tsx b/app/src/organisms/ODD/QuickTransferFlow/__tests__/NameQuickTransfer.test.tsx similarity index 96% rename from app/src/organisms/QuickTransferFlow/__tests__/NameQuickTransfer.test.tsx rename to app/src/organisms/ODD/QuickTransferFlow/__tests__/NameQuickTransfer.test.tsx index 58339b4abb8..363c89cdc82 100644 --- a/app/src/organisms/QuickTransferFlow/__tests__/NameQuickTransfer.test.tsx +++ b/app/src/organisms/ODD/QuickTransferFlow/__tests__/NameQuickTransfer.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, afterEach, vi, beforeEach } from 'vitest' @@ -52,6 +52,7 @@ describe('NameQuickTransfer', () => { expect(saveBtn).toBeEnabled() fireEvent.click(saveBtn) expect(props.onSave).toHaveBeenCalled() + expect(saveBtn).toBeDisabled() }) it('disables save if you enter more than 60 characters', () => { diff --git a/app/src/organisms/QuickTransferFlow/__tests__/Overview.test.tsx b/app/src/organisms/ODD/QuickTransferFlow/__tests__/Overview.test.tsx similarity index 98% rename from app/src/organisms/QuickTransferFlow/__tests__/Overview.test.tsx rename to app/src/organisms/ODD/QuickTransferFlow/__tests__/Overview.test.tsx index a60804414f4..242b0f58a92 100644 --- a/app/src/organisms/QuickTransferFlow/__tests__/Overview.test.tsx +++ b/app/src/organisms/ODD/QuickTransferFlow/__tests__/Overview.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { screen } from '@testing-library/react' import { describe, it, afterEach, vi, beforeEach } from 'vitest' diff --git a/app/src/organisms/ODD/QuickTransferFlow/__tests__/QuickTransferAdvancedSettings/AirGap.test.tsx b/app/src/organisms/ODD/QuickTransferFlow/__tests__/QuickTransferAdvancedSettings/AirGap.test.tsx new file mode 100644 index 00000000000..434a882af5a --- /dev/null +++ b/app/src/organisms/ODD/QuickTransferFlow/__tests__/QuickTransferAdvancedSettings/AirGap.test.tsx @@ -0,0 +1,276 @@ +import type * as React from 'react' +import { fireEvent, screen } from '@testing-library/react' +import { describe, it, expect, afterEach, vi, beforeEach } from 'vitest' + +import { InputField } from '@opentrons/components' + +import { renderWithProviders } from '/app/__testing-utils__' +import { i18n } from '/app/i18n' +import { useTrackEventWithRobotSerial } from '/app/redux-resources/analytics' +import { AirGap } from '../../QuickTransferAdvancedSettings/AirGap' +import type { QuickTransferSummaryState } from '../../types' + +vi.mock('/app/redux-resources/analytics') +vi.mock('../utils') + +vi.mock('@opentrons/components', async importOriginal => { + const actualComponents = await importOriginal() + return { + ...actualComponents, + InputField: vi.fn(), + } +}) + +const render = (props: React.ComponentProps) => { + return renderWithProviders(, { + i18nInstance: i18n, + }) +} +let mockTrackEventWithRobotSerial: any + +describe('AirGap', () => { + let props: React.ComponentProps + + beforeEach(() => { + props = { + onBack: vi.fn(), + kind: 'aspirate', + state: { + mount: 'left', + pipette: { + channels: 1, + liquids: [ + { + maxVolume: 1000, + minVolume: 5, + }, + ] as any, + } as any, + tipRack: { + wells: { + A1: { + totalLiquidVolume: 200, + }, + } as any, + } as any, + sourceWells: ['A1'], + destinationWells: ['A1'], + transferType: 'transfer', + volume: 20, + path: 'single', + } as QuickTransferSummaryState, + dispatch: vi.fn(), + } + mockTrackEventWithRobotSerial = vi.fn( + () => new Promise(resolve => resolve({})) + ) + vi.mocked(useTrackEventWithRobotSerial).mockReturnValue({ + trackEventWithRobotSerial: mockTrackEventWithRobotSerial, + }) + }) + afterEach(() => { + vi.resetAllMocks() + }) + + it('renders the first air gap screen, continue, and back buttons', () => { + render(props) + screen.getByText('Air gap before aspirating') + screen.getByTestId('ChildNavigation_Primary_Button') + screen.getByText('Enabled') + screen.getByText('Disabled') + const exitBtn = screen.getByTestId('ChildNavigation_Back_Button') + fireEvent.click(exitBtn) + expect(props.onBack).toHaveBeenCalled() + }) + + it('renders save button if you select enabled, then moves to second screen', () => { + render(props) + const enabledBtn = screen.getByText('Enabled') + fireEvent.click(enabledBtn) + const continueBtn = screen.getByText('Continue') + fireEvent.click(continueBtn) + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Air gap volume (µL)', + error: null, + readOnly: true, + type: 'number', + value: null, + }, + {} + ) + }) + + it('calls dispatch button if you select disabled and save', () => { + render(props) + const disabledBtn = screen.getByText('Disabled') + fireEvent.click(disabledBtn) + const saveBtn = screen.getByText('Save') + fireEvent.click(saveBtn) + expect(props.dispatch).toHaveBeenCalled() + expect(mockTrackEventWithRobotSerial).toHaveBeenCalled() + }) + + it('has correct range for aspirate with a single pipette path', () => { + render(props) + const enabledBtn = screen.getByText('Enabled') + fireEvent.click(enabledBtn) + const continueBtn = screen.getByText('Continue') + fireEvent.click(continueBtn) + const numButton = screen.getByText('0') + fireEvent.click(numButton) + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Air gap volume (µL)', + error: 'Value must be between 1-180', + readOnly: true, + type: 'number', + value: 0, + }, + {} + ) + const saveBtn = screen.getByTestId('ChildNavigation_Primary_Button') + expect(saveBtn).toBeDisabled() + }) + + it('has correct range for aspirate with a multiAspirate pipette path', () => { + props = { + ...props, + state: { + ...props.state, + path: 'multiAspirate', + }, + } + render(props) + const enabledBtn = screen.getByText('Enabled') + fireEvent.click(enabledBtn) + const continueBtn = screen.getByText('Continue') + fireEvent.click(continueBtn) + const numButton = screen.getByText('0') + fireEvent.click(numButton) + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Air gap volume (µL)', + error: 'Value must be between 1-80', + readOnly: true, + type: 'number', + value: 0, + }, + {} + ) + }) + + it('has correct range for aspirate with a multiDispense pipette path', () => { + props = { + ...props, + state: { + ...props.state, + path: 'multiDispense', + }, + } + render(props) + const enabledBtn = screen.getByText('Enabled') + fireEvent.click(enabledBtn) + const continueBtn = screen.getByText('Continue') + fireEvent.click(continueBtn) + const numButton = screen.getByText('0') + fireEvent.click(numButton) + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Air gap volume (µL)', + error: 'Value must be between 1-140', + readOnly: true, + type: 'number', + value: 0, + }, + {} + ) + }) + + it('has correct range for and text for a dispense', () => { + props = { + ...props, + kind: 'dispense', + } + render(props) + screen.getByText('Air gap before dispensing') + const enabledBtn = screen.getByText('Enabled') + fireEvent.click(enabledBtn) + const continueBtn = screen.getByText('Continue') + fireEvent.click(continueBtn) + const numButton = screen.getByText('0') + fireEvent.click(numButton) + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Air gap volume (µL)', + error: 'Value must be between 1-200', + readOnly: true, + type: 'number', + value: 0, + }, + {} + ) + }) + + it('calls dispatch when an in range value is entered and saved', () => { + render(props) + const enabledBtn = screen.getByText('Enabled') + fireEvent.click(enabledBtn) + const continueBtn = screen.getByText('Continue') + fireEvent.click(continueBtn) + const numButton = screen.getByText('1') + fireEvent.click(numButton) + const saveBtn = screen.getByText('Save') + fireEvent.click(saveBtn) + expect(props.dispatch).toHaveBeenCalled() + expect(mockTrackEventWithRobotSerial).toHaveBeenCalled() + }) + + it('persists existing values if they are in state for aspirate', () => { + props = { + ...props, + state: { + ...props.state, + airGapAspirate: 4, + }, + } + render(props) + const continueBtn = screen.getByText('Continue') + fireEvent.click(continueBtn) + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Air gap volume (µL)', + error: null, + readOnly: true, + type: 'number', + value: 4, + }, + {} + ) + }) + + it('persists existing values if they are in state for dispense', () => { + props = { + ...props, + kind: 'dispense', + state: { + ...props.state, + airGapAspirate: 4, + airGapDispense: 16, + }, + } + render(props) + const continueBtn = screen.getByText('Continue') + fireEvent.click(continueBtn) + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Air gap volume (µL)', + error: null, + readOnly: true, + type: 'number', + value: 16, + }, + {} + ) + }) +}) diff --git a/app/src/organisms/ODD/QuickTransferFlow/__tests__/QuickTransferAdvancedSettings/BlowOut.test.tsx b/app/src/organisms/ODD/QuickTransferFlow/__tests__/QuickTransferAdvancedSettings/BlowOut.test.tsx new file mode 100644 index 00000000000..c75788ac8cd --- /dev/null +++ b/app/src/organisms/ODD/QuickTransferFlow/__tests__/QuickTransferAdvancedSettings/BlowOut.test.tsx @@ -0,0 +1,171 @@ +import type * as React from 'react' +import { fireEvent, screen } from '@testing-library/react' +import { describe, it, expect, afterEach, vi, beforeEach } from 'vitest' + +import { renderWithProviders } from '/app/__testing-utils__' +import { i18n } from '/app/i18n' +import { useNotifyDeckConfigurationQuery } from '/app/resources/deck_configuration' +import { useTrackEventWithRobotSerial } from '/app/redux-resources/analytics' +import { BlowOut } from '../../QuickTransferAdvancedSettings/BlowOut' +import type { QuickTransferSummaryState } from '../../types' + +vi.mock('/app/resources/deck_configuration') +vi.mock('/app/redux-resources/analytics') +vi.mock('../utils') + +const render = (props: React.ComponentProps) => { + return renderWithProviders(, { + i18nInstance: i18n, + }) +} +let mockTrackEventWithRobotSerial: any + +describe('BlowOut', () => { + let props: React.ComponentProps + + beforeEach(() => { + props = { + kind: 'aspirate', + onBack: vi.fn(), + state: { + mount: 'left', + pipette: { + channels: 1, + liquids: [ + { + maxVolume: 1000, + minVolume: 5, + }, + ] as any, + } as any, + tipRack: { + wells: { + A1: { + totalLiquidVolume: 200, + }, + } as any, + } as any, + sourceWells: ['A1'], + destinationWells: ['A1'], + transferType: 'transfer', + volume: 20, + path: 'single', + } as QuickTransferSummaryState, + dispatch: vi.fn(), + } + mockTrackEventWithRobotSerial = vi.fn( + () => new Promise(resolve => resolve({})) + ) + vi.mocked(useTrackEventWithRobotSerial).mockReturnValue({ + trackEventWithRobotSerial: mockTrackEventWithRobotSerial, + }) + vi.mocked(useNotifyDeckConfigurationQuery).mockReturnValue({ + data: [ + { + cutoutId: 'cutoutC3', + cutoutFixtureId: 'wasteChuteRightAdapterCovered', + }, + { + cutoutId: 'cutoutA3', + cutoutFixtureId: 'trashBinAdapter', + }, + ], + } as any) + }) + afterEach(() => { + vi.resetAllMocks() + }) + + it('renders the first blow out screen, continue, and back buttons', () => { + render(props) + screen.getByText('Blowout after dispensing') + screen.getByTestId('ChildNavigation_Primary_Button') + screen.getByText('Enabled') + screen.getByText('Disabled') + const exitBtn = screen.getByTestId('ChildNavigation_Back_Button') + fireEvent.click(exitBtn) + expect(props.onBack).toHaveBeenCalled() + }) + + it('calls dispatch button if you select disabled and save', () => { + render(props) + const disabledBtn = screen.getByText('Disabled') + fireEvent.click(disabledBtn) + const saveBtn = screen.getByText('Save') + fireEvent.click(saveBtn) + expect(props.dispatch).toHaveBeenCalled() + }) + + it('second screen renders both source and destination wells and deck config trash options for transfer', () => { + render(props) + const enabledBtn = screen.getByText('Enabled') + fireEvent.click(enabledBtn) + const continueBtn = screen.getByText('Continue') + fireEvent.click(continueBtn) + screen.getByText('Source well') + screen.getByText('Destination well') + screen.getByText('Trash bin in A3') + screen.getByText('Waste chute in C3') + }) + + it('second screen renders trash bin in A3 if deck config is empty', () => { + vi.mocked(useNotifyDeckConfigurationQuery).mockReturnValue({ + data: [] as any, + } as any) + render(props) + const enabledBtn = screen.getByText('Enabled') + fireEvent.click(enabledBtn) + const continueBtn = screen.getByText('Continue') + fireEvent.click(continueBtn) + screen.getByText('Trash bin in A3') + }) + + it('second screen renders source well but not dest well for distribute', () => { + props = { + ...props, + state: { + ...props.state, + transferType: 'distribute', + }, + } + render(props) + const enabledBtn = screen.getByText('Enabled') + fireEvent.click(enabledBtn) + const continueBtn = screen.getByText('Continue') + fireEvent.click(continueBtn) + screen.getByText('Source well') + expect(screen.queryByText('Destination well')).not.toBeInTheDocument() + }) + + it('second screen renders dest well but not source well for consolidate', () => { + props = { + ...props, + state: { + ...props.state, + transferType: 'consolidate', + }, + } + render(props) + const enabledBtn = screen.getByText('Enabled') + fireEvent.click(enabledBtn) + const continueBtn = screen.getByText('Continue') + fireEvent.click(continueBtn) + screen.getByText('Destination well') + expect(screen.queryByText('Source well')).not.toBeInTheDocument() + }) + + it('enables save button when you make a destination selection and calls dispatch when saved', () => { + render(props) + const enabledBtn = screen.getByText('Enabled') + fireEvent.click(enabledBtn) + const continueBtn = screen.getByText('Continue') + fireEvent.click(continueBtn) + const saveBtn = screen.getByTestId('ChildNavigation_Primary_Button') + expect(saveBtn).toBeDisabled() + const destBtn = screen.getByText('Destination well') + fireEvent.click(destBtn) + fireEvent.click(saveBtn) + expect(props.dispatch).toHaveBeenCalled() + expect(mockTrackEventWithRobotSerial).toHaveBeenCalled() + }) +}) diff --git a/app/src/organisms/ODD/QuickTransferFlow/__tests__/QuickTransferAdvancedSettings/Delay.test.tsx b/app/src/organisms/ODD/QuickTransferFlow/__tests__/QuickTransferAdvancedSettings/Delay.test.tsx new file mode 100644 index 00000000000..604a470a52e --- /dev/null +++ b/app/src/organisms/ODD/QuickTransferFlow/__tests__/QuickTransferAdvancedSettings/Delay.test.tsx @@ -0,0 +1,293 @@ +import type * as React from 'react' +import { fireEvent, screen } from '@testing-library/react' +import { describe, it, expect, afterEach, vi, beforeEach } from 'vitest' + +import { InputField } from '@opentrons/components' + +import { renderWithProviders } from '/app/__testing-utils__' +import { i18n } from '/app/i18n' +import { useTrackEventWithRobotSerial } from '/app/redux-resources/analytics' +import { Delay } from '../../QuickTransferAdvancedSettings/Delay' +import type { QuickTransferSummaryState } from '../../types' + +vi.mock('/app/redux-resources/analytics') +vi.mock('../utils') + +vi.mock('@opentrons/components', async importOriginal => { + const actualComponents = await importOriginal() + return { + ...actualComponents, + InputField: vi.fn(), + } +}) + +const render = (props: React.ComponentProps) => { + return renderWithProviders(, { + i18nInstance: i18n, + }) +} +let mockTrackEventWithRobotSerial: any + +describe('Delay', () => { + let props: React.ComponentProps + + beforeEach(() => { + props = { + onBack: vi.fn(), + kind: 'aspirate', + state: { + mount: 'left', + pipette: { + channels: 1, + liquids: [ + { + maxVolume: 1000, + minVolume: 5, + }, + ] as any, + } as any, + source: { + wells: { + A1: { + totalLiquidVolume: 200, + depth: 50, + }, + } as any, + } as any, + destination: { + wells: { + A1: { + totalLiquidVolume: 200, + depth: 200, + }, + } as any, + } as any, + sourceWells: ['A1'], + destinationWells: ['A1'], + transferType: 'transfer', + volume: 20, + path: 'single', + } as QuickTransferSummaryState, + dispatch: vi.fn(), + } + mockTrackEventWithRobotSerial = vi.fn( + () => new Promise(resolve => resolve({})) + ) + vi.mocked(useTrackEventWithRobotSerial).mockReturnValue({ + trackEventWithRobotSerial: mockTrackEventWithRobotSerial, + }) + }) + afterEach(() => { + vi.resetAllMocks() + }) + + it('renders the first delay screen, continue, and back buttons', () => { + render(props) + screen.getByText('Delay before aspirating') + screen.getByTestId('ChildNavigation_Primary_Button') + screen.getByText('Enabled') + screen.getByText('Disabled') + const exitBtn = screen.getByTestId('ChildNavigation_Back_Button') + fireEvent.click(exitBtn) + expect(props.onBack).toHaveBeenCalled() + }) + + it('renders save button if you select enabled, then moves to second screen', () => { + render(props) + const enabledBtn = screen.getByText('Enabled') + fireEvent.click(enabledBtn) + const continueBtn = screen.getByText('Continue') + fireEvent.click(continueBtn) + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Delay duration (seconds)', + error: null, + readOnly: true, + type: 'number', + value: null, + }, + {} + ) + }) + + it('calls dispatch button if you select disabled and save', () => { + render(props) + const disabledBtn = screen.getByText('Disabled') + fireEvent.click(disabledBtn) + const saveBtn = screen.getByText('Save') + fireEvent.click(saveBtn) + expect(props.dispatch).toHaveBeenCalled() + expect(mockTrackEventWithRobotSerial).toHaveBeenCalled() + }) + + it('has correct delay duration range', () => { + render(props) + const enabledBtn = screen.getByText('Enabled') + fireEvent.click(enabledBtn) + const continueBtn = screen.getByText('Continue') + fireEvent.click(continueBtn) + const oneButton = screen.getByText('0') + fireEvent.click(oneButton) + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Delay duration (seconds)', + error: 'Value must be between 1-9999999999', + readOnly: true, + type: 'number', + value: 0, + }, + {} + ) + const nextBtn = screen.getByTestId('ChildNavigation_Primary_Button') + expect(nextBtn).toBeDisabled() + }) + + it('has correct range for delay height for aspirate', () => { + render(props) + const enabledBtn = screen.getByText('Enabled') + fireEvent.click(enabledBtn) + const continueBtn = screen.getByText('Continue') + fireEvent.click(continueBtn) + const oneButton = screen.getByText('1') + fireEvent.click(oneButton) + const nextBtn = screen.getByTestId('ChildNavigation_Primary_Button') + fireEvent.click(nextBtn) + const zeroButton = screen.getByText('0') + fireEvent.click(zeroButton) + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Delay position from bottom of well (mm)', + error: 'Value must be between 1-100', + readOnly: true, + type: 'number', + value: 0, + }, + {} + ) + const saveBtn = screen.getByTestId('ChildNavigation_Primary_Button') + expect(saveBtn).toBeDisabled() + }) + + it('has correct range for delay height for dispense', () => { + props = { + ...props, + kind: 'dispense', + } + render(props) + const enabledBtn = screen.getByText('Enabled') + fireEvent.click(enabledBtn) + const continueBtn = screen.getByText('Continue') + fireEvent.click(continueBtn) + const oneButton = screen.getByText('1') + fireEvent.click(oneButton) + const nextBtn = screen.getByTestId('ChildNavigation_Primary_Button') + fireEvent.click(nextBtn) + const zeroButton = screen.getByText('0') + fireEvent.click(zeroButton) + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Delay position from bottom of well (mm)', + error: 'Value must be between 1-400', + readOnly: true, + type: 'number', + value: 0, + }, + {} + ) + const saveBtn = screen.getByTestId('ChildNavigation_Primary_Button') + expect(saveBtn).toBeDisabled() + }) + + it('calls dispatch when an in range value is entered and saved', () => { + render(props) + const enabledBtn = screen.getByText('Enabled') + fireEvent.click(enabledBtn) + const continueBtn = screen.getByText('Continue') + fireEvent.click(continueBtn) + const oneButton = screen.getByText('1') + fireEvent.click(oneButton) + const nextBtn = screen.getByTestId('ChildNavigation_Primary_Button') + fireEvent.click(nextBtn) + const twoButton = screen.getByText('2') + fireEvent.click(twoButton) + const saveBtn = screen.getByText('Save') + fireEvent.click(saveBtn) + expect(props.dispatch).toHaveBeenCalled() + expect(mockTrackEventWithRobotSerial).toHaveBeenCalled() + }) + + it('persists previously set value saved in state for aspirate', () => { + props = { + ...props, + state: { + ...props.state, + delayAspirate: { + delayDuration: 15, + positionFromBottom: 55, + }, + }, + } + render(props) + const continueBtn = screen.getByText('Continue') + fireEvent.click(continueBtn) + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Delay duration (seconds)', + error: null, + readOnly: true, + type: 'number', + value: 15, + }, + {} + ) + fireEvent.click(continueBtn) + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Delay position from bottom of well (mm)', + error: null, + readOnly: true, + type: 'number', + value: 55, + }, + {} + ) + }) + + it('persists previously set value saved in state for dispense', () => { + props = { + ...props, + kind: 'dispense', + state: { + ...props.state, + delayDispense: { + delayDuration: 20, + positionFromBottom: 84, + }, + }, + } + render(props) + const continueBtn = screen.getByText('Continue') + fireEvent.click(continueBtn) + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Delay duration (seconds)', + error: null, + readOnly: true, + type: 'number', + value: 20, + }, + {} + ) + fireEvent.click(continueBtn) + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Delay position from bottom of well (mm)', + error: null, + readOnly: true, + type: 'number', + value: 84, + }, + {} + ) + }) +}) diff --git a/app/src/organisms/ODD/QuickTransferFlow/__tests__/QuickTransferAdvancedSettings/FlowRate.test.tsx b/app/src/organisms/ODD/QuickTransferFlow/__tests__/QuickTransferAdvancedSettings/FlowRate.test.tsx new file mode 100644 index 00000000000..4b01bb52ebe --- /dev/null +++ b/app/src/organisms/ODD/QuickTransferFlow/__tests__/QuickTransferAdvancedSettings/FlowRate.test.tsx @@ -0,0 +1,158 @@ +import type * as React from 'react' +import { fireEvent, screen } from '@testing-library/react' +import { describe, it, expect, afterEach, vi, beforeEach } from 'vitest' + +import { InputField } from '@opentrons/components' + +import { renderWithProviders } from '/app/__testing-utils__' +import { i18n } from '/app/i18n' +import { useTrackEventWithRobotSerial } from '/app/redux-resources/analytics' +import { FlowRateEntry } from '../../QuickTransferAdvancedSettings/FlowRate' +import type { QuickTransferSummaryState } from '../../types' + +vi.mock('/app/redux-resources/analytics') +vi.mock('../utils') + +vi.mock('@opentrons/components', async importOriginal => { + const actualComponents = await importOriginal() + return { + ...actualComponents, + InputField: vi.fn(), + } +}) + +const render = (props: React.ComponentProps) => { + return renderWithProviders(, { + i18nInstance: i18n, + }) +} +let mockTrackEventWithRobotSerial: any + +describe('FlowRate', () => { + let props: React.ComponentProps + + beforeEach(() => { + props = { + onBack: vi.fn(), + kind: 'aspirate', + state: { + mount: 'left', + pipette: { + model: 'p50', + channels: 1, + liquids: { + default: { + maxVolume: 1000, + minVolume: 5, + supportedTips: { + t50: { + uiMaxFlowRate: 92, + defaultAspirateFlowRate: { + default: 30, + }, + defaultDispenseFlowRate: { + default: 80, + }, + }, + }, + }, + } as any, + } as any, + tipRack: { + wells: { + A1: { + totalLiquidVolume: 50, + }, + } as any, + } as any, + sourceWells: ['A1'], + destinationWells: ['A1'], + transferType: 'transfer', + volume: 20, + path: 'single', + aspirateFlowRate: 35, + dispenseFlowRate: 62, + } as QuickTransferSummaryState, + dispatch: vi.fn(), + } + mockTrackEventWithRobotSerial = vi.fn( + () => new Promise(resolve => resolve({})) + ) + vi.mocked(useTrackEventWithRobotSerial).mockReturnValue({ + trackEventWithRobotSerial: mockTrackEventWithRobotSerial, + }) + }) + afterEach(() => { + vi.resetAllMocks() + }) + + it('renders the flow rate aspirate screen, continue, and back buttons', () => { + render(props) + screen.getByText('Aspirate flow rate') + screen.getByTestId('ChildNavigation_Primary_Button') + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Aspirate flow rate (µL/s)', + error: null, + readOnly: true, + type: 'number', + value: 35, + }, + {} + ) + const exitBtn = screen.getByTestId('ChildNavigation_Back_Button') + fireEvent.click(exitBtn) + expect(props.onBack).toHaveBeenCalled() + }) + + it('renders the flow rate dispense screen', () => { + props = { + ...props, + kind: 'dispense', + } + render(props) + screen.getByText('Dispense flow rate') + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Dispense flow rate (µL/s)', + error: null, + readOnly: true, + type: 'number', + value: 62, + }, + {} + ) + }) + + it('renders correct range if you enter incorrect value', () => { + render(props) + const deleteBtn = screen.getByText('del') + fireEvent.click(deleteBtn) + fireEvent.click(deleteBtn) + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Aspirate flow rate (µL/s)', + error: 'Value must be between 1-92', + readOnly: true, + type: 'number', + value: 0, + }, + {} + ) + const saveBtn = screen.getByTestId('ChildNavigation_Primary_Button') + expect(saveBtn).toBeDisabled() + }) + + it('calls dispatch when an in range value is entered and saved', () => { + render(props) + const deleteBtn = screen.getByText('del') + fireEvent.click(deleteBtn) + fireEvent.click(deleteBtn) + const numButton = screen.getByText('1') + fireEvent.click(numButton) + const saveBtn = screen.getByText('Save') + fireEvent.click(saveBtn) + expect(props.dispatch).toHaveBeenCalled() + expect(mockTrackEventWithRobotSerial).toHaveBeenCalled() + }) +}) diff --git a/app/src/organisms/ODD/QuickTransferFlow/__tests__/QuickTransferAdvancedSettings/Mix.test.tsx b/app/src/organisms/ODD/QuickTransferFlow/__tests__/QuickTransferAdvancedSettings/Mix.test.tsx new file mode 100644 index 00000000000..c4d1c170be3 --- /dev/null +++ b/app/src/organisms/ODD/QuickTransferFlow/__tests__/QuickTransferAdvancedSettings/Mix.test.tsx @@ -0,0 +1,263 @@ +import type * as React from 'react' +import { fireEvent, screen } from '@testing-library/react' +import { describe, it, expect, afterEach, vi, beforeEach } from 'vitest' + +import { InputField } from '@opentrons/components' + +import { renderWithProviders } from '/app/__testing-utils__' +import { i18n } from '/app/i18n' +import { useTrackEventWithRobotSerial } from '/app/redux-resources/analytics' +import { Mix } from '../../QuickTransferAdvancedSettings/Mix' +import type { QuickTransferSummaryState } from '../../types' + +vi.mock('/app/redux-resources/analytics') +vi.mock('../utils') + +vi.mock('@opentrons/components', async importOriginal => { + const actualComponents = await importOriginal() + return { + ...actualComponents, + InputField: vi.fn(), + } +}) + +const render = (props: React.ComponentProps) => { + return renderWithProviders(, { + i18nInstance: i18n, + }) +} +let mockTrackEventWithRobotSerial: any + +describe('Mix', () => { + let props: React.ComponentProps + + beforeEach(() => { + props = { + onBack: vi.fn(), + kind: 'aspirate', + state: { + mount: 'left', + pipette: { + channels: 1, + liquids: [ + { + maxVolume: 1000, + minVolume: 5, + }, + ] as any, + } as any, + tipRack: { + wells: { + A1: { + totalLiquidVolume: 200, + }, + } as any, + } as any, + sourceWells: ['A1'], + destinationWells: ['A1'], + transferType: 'transfer', + volume: 20, + path: 'single', + } as QuickTransferSummaryState, + dispatch: vi.fn(), + } + mockTrackEventWithRobotSerial = vi.fn( + () => new Promise(resolve => resolve({})) + ) + vi.mocked(useTrackEventWithRobotSerial).mockReturnValue({ + trackEventWithRobotSerial: mockTrackEventWithRobotSerial, + }) + }) + afterEach(() => { + vi.resetAllMocks() + }) + + it('renders the first Mix screen, continue, and back buttons', () => { + render(props) + screen.getByText('Mix before aspirating') + screen.getByTestId('ChildNavigation_Primary_Button') + screen.getByText('Enabled') + screen.getByText('Disabled') + const exitBtn = screen.getByTestId('ChildNavigation_Back_Button') + fireEvent.click(exitBtn) + expect(props.onBack).toHaveBeenCalled() + }) + + it('renders the different copy for Mix on dispense', () => { + props = { + ...props, + kind: 'dispense', + } + render(props) + screen.getByText('Mix before dispensing') + }) + + it('renders save button if you select enabled, then moves to second screen', () => { + render(props) + const enabledBtn = screen.getByText('Enabled') + fireEvent.click(enabledBtn) + const continueBtn = screen.getByText('Continue') + fireEvent.click(continueBtn) + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Mix volume (µL)', + error: null, + readOnly: true, + type: 'number', + value: null, + }, + {} + ) + }) + + it('calls dispatch button if you select disabled and save', () => { + render(props) + const disabledBtn = screen.getByText('Disabled') + fireEvent.click(disabledBtn) + const saveBtn = screen.getByText('Save') + fireEvent.click(saveBtn) + expect(props.dispatch).toHaveBeenCalled() + expect(mockTrackEventWithRobotSerial).toHaveBeenCalled() + }) + + it('has correct Mix volume range', () => { + render(props) + const enabledBtn = screen.getByText('Enabled') + fireEvent.click(enabledBtn) + const continueBtn = screen.getByText('Continue') + fireEvent.click(continueBtn) + const oneButton = screen.getByText('0') + fireEvent.click(oneButton) + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Mix volume (µL)', + error: 'Value must be between 1-200', + readOnly: true, + type: 'number', + value: 0, + }, + {} + ) + const nextBtn = screen.getByTestId('ChildNavigation_Primary_Button') + expect(nextBtn).toBeDisabled() + }) + + it('has correct range for Mix repitition range', () => { + render(props) + const enabledBtn = screen.getByText('Enabled') + fireEvent.click(enabledBtn) + const continueBtn = screen.getByText('Continue') + fireEvent.click(continueBtn) + const oneButton = screen.getByText('1') + fireEvent.click(oneButton) + const nextBtn = screen.getByTestId('ChildNavigation_Primary_Button') + fireEvent.click(nextBtn) + const zeroButton = screen.getByText('0') + fireEvent.click(zeroButton) + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Mix repetitions', + error: 'Value must be between 1-999', + readOnly: true, + type: 'number', + value: 0, + }, + {} + ) + const saveBtn = screen.getByTestId('ChildNavigation_Primary_Button') + expect(saveBtn).toBeDisabled() + }) + + it('calls dispatch when an in range value is entered and saved', () => { + render(props) + const enabledBtn = screen.getByText('Enabled') + fireEvent.click(enabledBtn) + const continueBtn = screen.getByText('Continue') + fireEvent.click(continueBtn) + const oneButton = screen.getByText('1') + fireEvent.click(oneButton) + const nextBtn = screen.getByTestId('ChildNavigation_Primary_Button') + fireEvent.click(nextBtn) + const twoButton = screen.getByText('2') + fireEvent.click(twoButton) + const saveBtn = screen.getByText('Save') + fireEvent.click(saveBtn) + expect(props.dispatch).toHaveBeenCalled() + expect(mockTrackEventWithRobotSerial).toHaveBeenCalled() + }) + + it('persists previously set value saved in state for aspirate', () => { + props = { + ...props, + state: { + ...props.state, + mixOnAspirate: { + mixVolume: 15, + repititions: 55, + }, + }, + } + render(props) + const continueBtn = screen.getByText('Continue') + fireEvent.click(continueBtn) + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Mix volume (µL)', + error: null, + readOnly: true, + type: 'number', + value: 15, + }, + {} + ) + fireEvent.click(continueBtn) + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Mix repetitions', + error: null, + readOnly: true, + type: 'number', + value: 55, + }, + {} + ) + }) + + it('persists previously set value saved in state for dispense', () => { + props = { + ...props, + kind: 'dispense', + state: { + ...props.state, + mixOnDispense: { + mixVolume: 18, + repititions: 2, + }, + }, + } + render(props) + const continueBtn = screen.getByText('Continue') + fireEvent.click(continueBtn) + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Mix volume (µL)', + error: null, + readOnly: true, + type: 'number', + value: 18, + }, + {} + ) + fireEvent.click(continueBtn) + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Mix repetitions', + error: null, + readOnly: true, + type: 'number', + value: 2, + }, + {} + ) + }) +}) diff --git a/app/src/organisms/ODD/QuickTransferFlow/__tests__/QuickTransferAdvancedSettings/PipettePath.test.tsx b/app/src/organisms/ODD/QuickTransferFlow/__tests__/QuickTransferAdvancedSettings/PipettePath.test.tsx new file mode 100644 index 00000000000..e62571bdc6a --- /dev/null +++ b/app/src/organisms/ODD/QuickTransferFlow/__tests__/QuickTransferAdvancedSettings/PipettePath.test.tsx @@ -0,0 +1,230 @@ +import type * as React from 'react' +import { fireEvent, screen } from '@testing-library/react' +import { describe, it, expect, afterEach, vi, beforeEach } from 'vitest' + +import { InputField } from '@opentrons/components' + +import { renderWithProviders } from '/app/__testing-utils__' +import { i18n } from '/app/i18n' +import { useTrackEventWithRobotSerial } from '/app/redux-resources/analytics' +import { PipettePath } from '../../QuickTransferAdvancedSettings/PipettePath' +import { useBlowOutLocationOptions } from '../../QuickTransferAdvancedSettings/BlowOut' +import type { QuickTransferSummaryState } from '../../types' + +vi.mock('/app/redux-resources/analytics') +vi.mock('../utils') +vi.mock('../../QuickTransferAdvancedSettings/BlowOut') + +vi.mock('@opentrons/components', async importOriginal => { + const actualComponents = await importOriginal() + return { + ...actualComponents, + InputField: vi.fn(), + } +}) + +const render = (props: React.ComponentProps) => { + return renderWithProviders(, { + i18nInstance: i18n, + }) +} +let mockTrackEventWithRobotSerial: any + +describe('PipettePath', () => { + let props: React.ComponentProps + + beforeEach(() => { + props = { + onBack: vi.fn(), + state: { + mount: 'left', + pipette: { + channels: 1, + liquids: [ + { + maxVolume: 1000, + minVolume: 5, + }, + ] as any, + } as any, + tipRack: { + wells: { + A1: { + totalLiquidVolume: 200, + }, + } as any, + } as any, + transferType: 'consolidate', + volume: 20, + path: 'multiAspirate', + } as QuickTransferSummaryState, + dispatch: vi.fn(), + } + mockTrackEventWithRobotSerial = vi.fn( + () => new Promise(resolve => resolve({})) + ) + vi.mocked(useTrackEventWithRobotSerial).mockReturnValue({ + trackEventWithRobotSerial: mockTrackEventWithRobotSerial, + }) + vi.mocked(useBlowOutLocationOptions).mockReturnValue([ + { + location: 'source_well', + description: 'Source well', + }, + ]) + }) + afterEach(() => { + vi.resetAllMocks() + }) + + it('renders the first pipette path screen, continue, back buttons', () => { + render(props) + screen.getByText('Pipette path') + screen.getByTestId('ChildNavigation_Primary_Button') + const exitBtn = screen.getByTestId('ChildNavigation_Back_Button') + fireEvent.click(exitBtn) + expect(props.onBack).toHaveBeenCalled() + }) + + it('renders multi aspirate and single options for consolidate if there is room in the tip', () => { + render(props) + screen.getByText('Single transfers') + screen.getByText('Multi-aspirate') + const saveBtn = screen.getByTestId('ChildNavigation_Primary_Button') + fireEvent.click(saveBtn) + expect(props.dispatch).toHaveBeenCalled() + expect(mockTrackEventWithRobotSerial).toHaveBeenCalled() + }) + + it('renders single option only for consolidate if there is not room in the tip', () => { + props = { + ...props, + state: { + ...props.state, + volume: 101, + }, + } + render(props) + screen.getByText('Single transfers') + expect(screen.queryByText('Multi-aspirate')).not.toBeInTheDocument() + const saveBtn = screen.getByTestId('ChildNavigation_Primary_Button') + fireEvent.click(saveBtn) + expect(props.dispatch).toHaveBeenCalled() + expect(mockTrackEventWithRobotSerial).toHaveBeenCalled() + }) + + it('renders multi dispense and single options for distribute if there is room in the tip', () => { + props = { + ...props, + state: { + ...props.state, + transferType: 'distribute', + }, + } + render(props) + screen.getByText('Single transfers') + screen.getByText('Multi-dispense') + const saveBtn = screen.getByTestId('ChildNavigation_Primary_Button') + fireEvent.click(saveBtn) + expect(props.dispatch).toHaveBeenCalled() + expect(mockTrackEventWithRobotSerial).toHaveBeenCalled() + }) + + it('renders single option only for distribute if there is not room in the tip', () => { + props = { + ...props, + state: { + ...props.state, + transferType: 'distribute', + volume: 67, + }, + } + render(props) + screen.getByText('Single transfers') + expect(screen.queryByText('Multi-dispense')).not.toBeInTheDocument() + const saveBtn = screen.getByTestId('ChildNavigation_Primary_Button') + fireEvent.click(saveBtn) + expect(props.dispatch).toHaveBeenCalled() + expect(mockTrackEventWithRobotSerial).toHaveBeenCalled() + }) + + it('renders next cta and disposal volume screen if you choose multi dispense', () => { + props = { + ...props, + state: { + ...props.state, + transferType: 'distribute', + disposalVolume: 20, + blowOut: 'source_well', + }, + } + render(props) + const multiDispenseBtn = screen.getByText('Multi-dispense') + fireEvent.click(multiDispenseBtn) + const continueBtn = screen.getByTestId('ChildNavigation_Primary_Button') + fireEvent.click(continueBtn) + + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Disposal volume (µL)', + error: null, + readOnly: true, + type: 'number', + value: 20, + }, + {} + ) + }) + + it('renders error on disposal volume screen if you select an out of range value', () => { + props = { + ...props, + state: { + ...props.state, + transferType: 'distribute', + path: 'multiDispense', + disposalVolume: 20, + blowOut: 'source_well', + }, + } + render(props) + const continueBtn = screen.getByText('Continue') + fireEvent.click(continueBtn) + const oneButton = screen.getByText('1') + fireEvent.click(oneButton) + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Disposal volume (µL)', + error: 'Value must be between 1-160', + readOnly: true, + type: 'number', + value: 201, + }, + {} + ) + const nextBtn = screen.getByTestId('ChildNavigation_Primary_Button') + expect(nextBtn).toBeDisabled() + }) + + it('renders blowout options on third screen and calls dispatch when saved', () => { + props = { + ...props, + state: { + ...props.state, + transferType: 'distribute', + path: 'multiDispense', + disposalVolume: 20, + blowOut: 'source_well', + }, + } + render(props) + const continueBtn = screen.getByText('Continue') + fireEvent.click(continueBtn) + fireEvent.click(continueBtn) + screen.getByText('Source well') + const saveBtn = screen.getByTestId('ChildNavigation_Primary_Button') + fireEvent.click(saveBtn) + expect(props.dispatch).toHaveBeenCalled() + expect(mockTrackEventWithRobotSerial).toHaveBeenCalled() + }) +}) diff --git a/app/src/organisms/ODD/QuickTransferFlow/__tests__/QuickTransferAdvancedSettings/QuickTransferAdvancedSettings.test.tsx b/app/src/organisms/ODD/QuickTransferFlow/__tests__/QuickTransferAdvancedSettings/QuickTransferAdvancedSettings.test.tsx new file mode 100644 index 00000000000..64e400f5a10 --- /dev/null +++ b/app/src/organisms/ODD/QuickTransferFlow/__tests__/QuickTransferAdvancedSettings/QuickTransferAdvancedSettings.test.tsx @@ -0,0 +1,476 @@ +import type * as React from 'react' +import { fireEvent, screen } from '@testing-library/react' +import { describe, it, expect, afterEach, vi, beforeEach } from 'vitest' + +import { renderWithProviders } from '/app/__testing-utils__' +import { i18n } from '/app/i18n' +import { useTrackEventWithRobotSerial } from '/app/redux-resources/analytics' +import { QuickTransferAdvancedSettings } from '../../QuickTransferAdvancedSettings/' +import { useToaster } from '/app/organisms/ToasterOven' +import { PipettePath } from '../../QuickTransferAdvancedSettings/PipettePath' +import { FlowRateEntry } from '../../QuickTransferAdvancedSettings/FlowRate' +import { TipPositionEntry } from '../../QuickTransferAdvancedSettings/TipPosition' +import { Mix } from '../../QuickTransferAdvancedSettings/Mix' +import { Delay } from '../../QuickTransferAdvancedSettings/Delay' +import { TouchTip } from '../../QuickTransferAdvancedSettings/TouchTip' +import { AirGap } from '../../QuickTransferAdvancedSettings/AirGap' +import { BlowOut } from '../../QuickTransferAdvancedSettings/BlowOut' + +vi.mock('/app/redux-resources/analytics') +vi.mock('/app/organisms/ToasterOven') +vi.mock('../../QuickTransferAdvancedSettings/PipettePath') +vi.mock('../../QuickTransferAdvancedSettings/FlowRate') +vi.mock('../../QuickTransferAdvancedSettings/TipPosition') +vi.mock('../../QuickTransferAdvancedSettings/Mix') +vi.mock('../../QuickTransferAdvancedSettings/Delay') +vi.mock('../../QuickTransferAdvancedSettings/TouchTip') +vi.mock('../../QuickTransferAdvancedSettings/AirGap') +vi.mock('../../QuickTransferAdvancedSettings/BlowOut') + +const render = ( + props: React.ComponentProps +): any => { + return renderWithProviders(, { + i18nInstance: i18n, + }) +} +let mockTrackEventWithRobotSerial: any +let mockMakeSnackbar: any + +describe('QuickTransferAdvancedSettings', () => { + let props: React.ComponentProps + + beforeEach(() => { + props = { + state: { + pipette: { + channels: 1, + liquids: [ + { + maxVolume: 1000, + minVolume: 5, + }, + ] as any, + } as any, + mount: 'left', + tipRack: { + wells: { + A1: { + totalLiquidVolume: 200, + }, + } as any, + } as any, + source: { + metadata: { + displayCategory: 'wellPlate', + }, + wells: { + A1: { + totalLiquidVolume: 200, + depth: 50, + }, + } as any, + } as any, + sourceWells: ['A1'], + destination: { + metadata: { + displayCategory: 'wellPlate', + }, + wells: { + A1: { + totalLiquidVolume: 200, + depth: 200, + }, + } as any, + } as any, + destinationWells: ['A1'], + transferType: 'consolidate', + volume: 20, + aspirateFlowRate: 570, + dispenseFlowRate: 890, + path: 'single', + tipPositionAspirate: 10, + preWetTip: false, + tipPositionDispense: 2, + changeTip: 'once', + dropTipLocation: { + cutoutId: 'cutoutA3', + cutoutFixtureId: 'trashBinAdapter', + }, + } as any, + dispatch: vi.fn(), + } + mockTrackEventWithRobotSerial = vi.fn( + () => new Promise(resolve => resolve({})) + ) + mockMakeSnackbar = vi.fn() + vi.mocked(useTrackEventWithRobotSerial).mockReturnValue({ + trackEventWithRobotSerial: mockTrackEventWithRobotSerial, + }) + vi.mocked(useToaster).mockReturnValue({ + makeSnackbar: mockMakeSnackbar, + } as any) + }) + afterEach(() => { + vi.resetAllMocks() + }) + + // base settings section + it('renders base setting options and their values', () => { + render(props) + screen.getByText('Aspirate flow rate') + screen.getByText('570 µL/s') + screen.getByText('Dispense flow rate') + screen.getByText('890 µL/s') + screen.getByText('Pipette path') + screen.getByText('Single transfers') + }) + it('renders Aspirate flow rate component when seleted', () => { + render(props) + const aspirateFlowRate = screen.getByText('Aspirate flow rate') + fireEvent.click(aspirateFlowRate) + expect(vi.mocked(FlowRateEntry)).toHaveBeenCalled() + }) + it('renders Dispense flow rate component when seleted', () => { + render(props) + const dispenseFlowRate = screen.getByText('Dispense flow rate') + fireEvent.click(dispenseFlowRate) + expect(vi.mocked(FlowRateEntry)).toHaveBeenCalled() + }) + it('renders Pipette path component when seleted', () => { + render(props) + const pipettePath = screen.getByText('Pipette path') + fireEvent.click(pipettePath) + expect(vi.mocked(PipettePath)).toHaveBeenCalled() + }) + it('Pipette path button is disabled if 1 to 1 transfer', () => { + props = { + ...props, + state: { + ...props.state, + transferType: 'transfer', + }, + } + render(props) + const pipettePath = screen.getByText('Pipette path') + fireEvent.click(pipettePath) + expect(vi.mocked(PipettePath)).not.toHaveBeenCalled() + expect(mockMakeSnackbar).toHaveBeenCalled() + }) + it('shows additional information for multi dispense', () => { + props = { + ...props, + state: { + ...props.state, + transferType: 'distribute', + path: 'multiDispense', + blowOut: 'dest_well', + disposalVolume: 40, + }, + } + render(props) + screen.getByText('Pipette path') + screen.getByText( + 'Multi-dispense, 40 µL disposal volume, blowout into destination well' + ) + }) + + // aspirate/dispense default settings section + it('renders default aspirate and dispense setting options from summary state', () => { + render(props) + screen.getByText('Aspirate Settings') + expect(screen.getAllByText('Tip position')).toHaveLength(2) + screen.getByText('10 mm from the bottom') + screen.getByText('Pre-wet tip') + expect(screen.getAllByText('Mix')).toHaveLength(2) + expect(screen.getAllByText('Delay')).toHaveLength(2) + expect(screen.getAllByText('Touch tip')).toHaveLength(2) + expect(screen.getAllByText('Air gap')).toHaveLength(2) + screen.getByText('Dispense Settings') + screen.getByText('2 mm from the bottom') + screen.getByText('Blowout') + expect(screen.getAllByText('Disabled')).toHaveLength(10) + }) + + // aspirate settings + it('opens aspirate tip position when pressed', () => { + render(props) + const aspirateTipPosition = screen.getAllByText('Tip position')[0] + fireEvent.click(aspirateTipPosition) + expect(vi.mocked(TipPositionEntry)).toHaveBeenCalled() + }) + it('renders enabled when pre-wet tip is turned on and calls dispatch when pressed', () => { + props = { + ...props, + state: { + ...props.state, + preWetTip: true, + }, + } + render(props) + const preWetTip = screen.getByText('Pre-wet tip') + expect(screen.getAllByText('Disabled')).toHaveLength(9) + screen.getByText('Enabled') + fireEvent.click(preWetTip) + expect(props.dispatch).toHaveBeenCalled() + }) + it('renders aspirate mix text when setting has value and opens mix for 1 to 1 transfer', () => { + props = { + ...props, + state: { + ...props.state, + transferType: 'transfer', + mixOnAspirate: { + mixVolume: 15, + repititions: 25, + }, + }, + } + render(props) + const mixAspirate = screen.getAllByText('Mix')[0] + screen.getByText('15 µL, 25 times') + fireEvent.click(mixAspirate) + expect(vi.mocked(Mix)).toHaveBeenCalled() + }) + it('opens aspirate mix for distribute', () => { + props = { + ...props, + state: { + ...props.state, + transferType: 'distribute', + }, + } + render(props) + const mixAspirate = screen.getAllByText('Mix')[0] + fireEvent.click(mixAspirate) + expect(vi.mocked(Mix)).toHaveBeenCalled() + }) + it('does not open aspirate mix for consolidate', () => { + render(props) + const mixAspirate = screen.getAllByText('Mix')[0] + fireEvent.click(mixAspirate) + expect(vi.mocked(Mix)).not.toHaveBeenCalled() + expect(mockMakeSnackbar).toHaveBeenCalled() + }) + it('renders aspirate delay text if there is a value in state and opens delay component when pressed', () => { + props = { + ...props, + state: { + ...props.state, + delayAspirate: { + delayDuration: 5, + positionFromBottom: 17, + }, + }, + } + render(props) + const delayAspirate = screen.getAllByText('Delay')[0] + screen.getByText('5s, 17 mm from bottom') + fireEvent.click(delayAspirate) + expect(vi.mocked(Delay)).toHaveBeenCalled() + }) + it('renders aspirate touch tip text and opens component if labware is not a reservoir', () => { + props = { + ...props, + state: { + ...props.state, + touchTipAspirate: 8, + }, + } + render(props) + const touchtipAspirate = screen.getAllByText('Touch tip')[0] + screen.getByText('8 mm from bottom') + fireEvent.click(touchtipAspirate) + expect(vi.mocked(TouchTip)).toHaveBeenCalled() + }) + it('does not open aspirate touch tip component if source labware is a reservoir', () => { + props = { + ...props, + state: { + ...props.state, + source: { + ...props.state.source, + metadata: { + displayCategory: 'reservoir', + } as any, + }, + }, + } + render(props) + const touchtipAspirate = screen.getAllByText('Touch tip')[0] + fireEvent.click(touchtipAspirate) + expect(vi.mocked(TouchTip)).not.toHaveBeenCalled() + expect(mockMakeSnackbar).toHaveBeenCalled() + }) + it('renders aspirate air gap value if it exists and opens air gap component when pressed', () => { + props = { + ...props, + state: { + ...props.state, + airGapAspirate: 2, + }, + } + render(props) + const airGapAspirate = screen.getAllByText('Air gap')[0] + screen.getByText('2 µL') + fireEvent.click(airGapAspirate) + expect(vi.mocked(AirGap)).toHaveBeenCalled() + }) + + // dispense settings + it('opens dispense tip position when pressed', () => { + render(props) + const aspirateTipPosition = screen.getAllByText('Tip position')[1] + fireEvent.click(aspirateTipPosition) + expect(vi.mocked(TipPositionEntry)).toHaveBeenCalled() + }) + it('renders dispense mix text when setting has value and opens mix for 1 to 1 transfer', () => { + props = { + ...props, + state: { + ...props.state, + transferType: 'transfer', + mixOnDispense: { + mixVolume: 18, + repititions: 20, + }, + }, + } + render(props) + const mixDispense = screen.getAllByText('Mix')[1] + screen.getByText('18 µL, 20 times') + fireEvent.click(mixDispense) + expect(vi.mocked(Mix)).toHaveBeenCalled() + }) + it('opens dispense mix for consolidate', () => { + render(props) + const mixDispense = screen.getAllByText('Mix')[1] + fireEvent.click(mixDispense) + expect(vi.mocked(Mix)).toHaveBeenCalled() + }) + it('does not open dispense mix for distribute', () => { + props = { + ...props, + state: { + ...props.state, + transferType: 'distribute', + }, + } + render(props) + const mixDispense = screen.getAllByText('Mix')[1] + fireEvent.click(mixDispense) + expect(vi.mocked(Mix)).not.toHaveBeenCalled() + expect(mockMakeSnackbar).toHaveBeenCalled() + }) + it('renders dispense delay text if there is a value in state and opens delay component when pressed', () => { + props = { + ...props, + state: { + ...props.state, + delayDispense: { + delayDuration: 10, + positionFromBottom: 4, + }, + }, + } + render(props) + const delayDispense = screen.getAllByText('Delay')[1] + screen.getByText('10s, 4 mm from bottom') + fireEvent.click(delayDispense) + expect(vi.mocked(Delay)).toHaveBeenCalled() + }) + it('renders dispense touch tip text and opens component if labware is not a reservoir', () => { + props = { + ...props, + state: { + ...props.state, + touchTipDispense: 1, + }, + } + render(props) + const touchtipDispense = screen.getAllByText('Touch tip')[1] + screen.getByText('1 mm from bottom') + fireEvent.click(touchtipDispense) + expect(vi.mocked(TouchTip)).toHaveBeenCalled() + }) + it('does not open dispense touch tip component if destination labware is a reservoir', () => { + props = { + ...props, + state: { + ...props.state, + destination: { + metadata: { + displayCategory: 'reservoir', + } as any, + } as any, + }, + } + render(props) + const touchtipDispense = screen.getAllByText('Touch tip')[1] + fireEvent.click(touchtipDispense) + expect(vi.mocked(TouchTip)).not.toHaveBeenCalled() + expect(mockMakeSnackbar).toHaveBeenCalled() + }) + it('renders dispense air gap value if it exists and opens air gap component when pressed', () => { + props = { + ...props, + state: { + ...props.state, + airGapDispense: 9, + }, + } + render(props) + const airGapDispense = screen.getAllByText('Air gap')[1] + screen.getByText('9 µL') + fireEvent.click(airGapDispense) + expect(vi.mocked(AirGap)).toHaveBeenCalled() + }) + it('renders blowout location if it is a well and opens component when clicked if transfer type', () => { + props = { + ...props, + state: { + ...props.state, + transferType: 'transfer', + blowOut: 'source_well', + }, + } + render(props) + const blowOut = screen.getByText('Blowout') + screen.getByText('Into source well') + fireEvent.click(blowOut) + expect(vi.mocked(BlowOut)).toHaveBeenCalled() + }) + it('renders blowout location if it is a trash bin and opens component when clicked if consolidate type', () => { + props = { + ...props, + state: { + ...props.state, + blowOut: { + cutoutId: 'cutoutA3', + cutoutFixtureId: 'trashBinAdapter', + }, + }, + } + render(props) + const blowOut = screen.getByText('Blowout') + screen.getByText('Into trash bin') + fireEvent.click(blowOut) + expect(vi.mocked(BlowOut)).toHaveBeenCalled() + }) + it('does not render text or open blowout component when clicked if distribute type', () => { + props = { + ...props, + state: { + ...props.state, + blowOut: 'source_well', + transferType: 'distribute', + }, + } + render(props) + const blowOut = screen.getByText('Blowout') + expect(screen.getAllByText('Disabled')).toHaveLength(10) + fireEvent.click(blowOut) + expect(vi.mocked(BlowOut)).not.toHaveBeenCalled() + expect(mockMakeSnackbar).toHaveBeenCalled() + }) +}) diff --git a/app/src/organisms/ODD/QuickTransferFlow/__tests__/QuickTransferAdvancedSettings/TipPosition.test.tsx b/app/src/organisms/ODD/QuickTransferFlow/__tests__/QuickTransferAdvancedSettings/TipPosition.test.tsx new file mode 100644 index 00000000000..dc109c2c302 --- /dev/null +++ b/app/src/organisms/ODD/QuickTransferFlow/__tests__/QuickTransferAdvancedSettings/TipPosition.test.tsx @@ -0,0 +1,177 @@ +import type * as React from 'react' +import { fireEvent, screen } from '@testing-library/react' +import { describe, it, expect, afterEach, vi, beforeEach } from 'vitest' + +import { InputField } from '@opentrons/components' + +import { renderWithProviders } from '/app/__testing-utils__' +import { i18n } from '/app/i18n' +import { useTrackEventWithRobotSerial } from '/app/redux-resources/analytics' +import { TipPositionEntry } from '../../QuickTransferAdvancedSettings/TipPosition' +import type { QuickTransferSummaryState } from '../../types' + +vi.mock('/app/redux-resources/analytics') +vi.mock('../utils') + +vi.mock('@opentrons/components', async importOriginal => { + const actualComponents = await importOriginal() + return { + ...actualComponents, + InputField: vi.fn(), + } +}) + +const render = (props: React.ComponentProps) => { + return renderWithProviders(, { + i18nInstance: i18n, + }) +} +let mockTrackEventWithRobotSerial: any + +describe('TipPosition', () => { + let props: React.ComponentProps + + beforeEach(() => { + props = { + onBack: vi.fn(), + kind: 'aspirate', + state: { + mount: 'left', + pipette: { + channels: 1, + liquids: [ + { + maxVolume: 1000, + minVolume: 5, + }, + ] as any, + } as any, + source: { + wells: { + A1: { + totalLiquidVolume: 200, + depth: 50, + }, + } as any, + } as any, + destination: { + wells: { + A1: { + totalLiquidVolume: 200, + depth: 200, + }, + } as any, + } as any, + sourceWells: ['A1'], + destinationWells: ['A1'], + transferType: 'transfer', + volume: 20, + path: 'single', + tipPositionAspirate: 10, + tipPositionDispense: 75, + } as QuickTransferSummaryState, + dispatch: vi.fn(), + } + mockTrackEventWithRobotSerial = vi.fn( + () => new Promise(resolve => resolve({})) + ) + vi.mocked(useTrackEventWithRobotSerial).mockReturnValue({ + trackEventWithRobotSerial: mockTrackEventWithRobotSerial, + }) + }) + afterEach(() => { + vi.resetAllMocks() + }) + + it('renders the tip position aspirate screen, continue, and back buttons', () => { + render(props) + screen.getByText('Aspirate tip position') + screen.getByTestId('ChildNavigation_Primary_Button') + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Distance from bottom of well (mm)', + error: null, + readOnly: true, + type: 'text', + value: 10, + }, + {} + ) + const exitBtn = screen.getByTestId('ChildNavigation_Back_Button') + fireEvent.click(exitBtn) + expect(props.onBack).toHaveBeenCalled() + }) + + it('renders the tip position dispense screen', () => { + props = { + ...props, + kind: 'dispense', + } + render(props) + screen.getByText('Dispense tip position') + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Distance from bottom of well (mm)', + error: null, + readOnly: true, + type: 'text', + value: 75, + }, + {} + ) + }) + + it('renders correct range if you enter incorrect value for aspirate', () => { + render(props) + const deleteBtn = screen.getByText('del') + fireEvent.click(deleteBtn) + fireEvent.click(deleteBtn) + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Distance from bottom of well (mm)', + error: 'Value must be between 1-100', + readOnly: true, + type: 'text', + value: 0, + }, + {} + ) + const saveBtn = screen.getByTestId('ChildNavigation_Primary_Button') + expect(saveBtn).toBeDisabled() + }) + + it('renders correct range if you enter incorrect value for dispense', () => { + props = { + ...props, + kind: 'dispense', + } + render(props) + const deleteBtn = screen.getByText('del') + fireEvent.click(deleteBtn) + fireEvent.click(deleteBtn) + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Distance from bottom of well (mm)', + error: 'Value must be between 1-400', + readOnly: true, + type: 'text', + value: 0, + }, + {} + ) + const saveBtn = screen.getByTestId('ChildNavigation_Primary_Button') + expect(saveBtn).toBeDisabled() + }) + + it('calls dispatch when an in range value is entered and saved', () => { + render(props) + const deleteBtn = screen.getByText('del') + fireEvent.click(deleteBtn) + const numButton = screen.getByText('1') + fireEvent.click(numButton) + const saveBtn = screen.getByText('Save') + fireEvent.click(saveBtn) + expect(props.dispatch).toHaveBeenCalled() + expect(mockTrackEventWithRobotSerial).toHaveBeenCalled() + }) +}) diff --git a/app/src/organisms/ODD/QuickTransferFlow/__tests__/QuickTransferAdvancedSettings/TouchTip.test.tsx b/app/src/organisms/ODD/QuickTransferFlow/__tests__/QuickTransferAdvancedSettings/TouchTip.test.tsx new file mode 100644 index 00000000000..cc2b463c9a7 --- /dev/null +++ b/app/src/organisms/ODD/QuickTransferFlow/__tests__/QuickTransferAdvancedSettings/TouchTip.test.tsx @@ -0,0 +1,241 @@ +import type * as React from 'react' +import { fireEvent, screen } from '@testing-library/react' +import { describe, it, expect, afterEach, vi, beforeEach } from 'vitest' + +import { InputField } from '@opentrons/components' + +import { renderWithProviders } from '/app/__testing-utils__' +import { i18n } from '/app/i18n' +import { useTrackEventWithRobotSerial } from '/app/redux-resources/analytics' +import { TouchTip } from '../../QuickTransferAdvancedSettings/TouchTip' +import type { QuickTransferSummaryState } from '../../types' + +vi.mock('/app/redux-resources/analytics') +vi.mock('../utils') + +vi.mock('@opentrons/components', async importOriginal => { + const actualComponents = await importOriginal() + return { + ...actualComponents, + InputField: vi.fn(), + } +}) + +const render = (props: React.ComponentProps) => { + return renderWithProviders(, { + i18nInstance: i18n, + }) +} +let mockTrackEventWithRobotSerial: any + +describe('TouchTip', () => { + let props: React.ComponentProps + + beforeEach(() => { + props = { + onBack: vi.fn(), + kind: 'aspirate', + state: { + mount: 'left', + pipette: { + channels: 1, + liquids: [ + { + maxVolume: 1000, + minVolume: 5, + }, + ] as any, + } as any, + source: { + wells: { + A1: { + totalLiquidVolume: 200, + depth: 50, + }, + } as any, + } as any, + destination: { + wells: { + A1: { + totalLiquidVolume: 200, + depth: 200, + }, + } as any, + } as any, + sourceWells: ['A1'], + destinationWells: ['A1'], + transferType: 'transfer', + volume: 20, + path: 'single', + } as QuickTransferSummaryState, + dispatch: vi.fn(), + } + mockTrackEventWithRobotSerial = vi.fn( + () => new Promise(resolve => resolve({})) + ) + vi.mocked(useTrackEventWithRobotSerial).mockReturnValue({ + trackEventWithRobotSerial: mockTrackEventWithRobotSerial, + }) + }) + afterEach(() => { + vi.resetAllMocks() + }) + + it('renders the first touch tip screen, continue, and back buttons', () => { + render(props) + screen.getByText('Touch tip before aspirating') + screen.getByTestId('ChildNavigation_Primary_Button') + screen.getByText('Enabled') + screen.getByText('Disabled') + const exitBtn = screen.getByTestId('ChildNavigation_Back_Button') + fireEvent.click(exitBtn) + expect(props.onBack).toHaveBeenCalled() + }) + + it('renders the correct copy for dispense', () => { + props = { + ...props, + kind: 'dispense', + } + render(props) + screen.getByText('Touch tip before dispensing') + }) + + it('renders save button if you select enabled, then moves to second screen', () => { + render(props) + const enabledBtn = screen.getByText('Enabled') + fireEvent.click(enabledBtn) + const continueBtn = screen.getByText('Continue') + fireEvent.click(continueBtn) + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Touch tip position from bottom of well (mm)', + error: null, + readOnly: true, + type: 'number', + value: null, + }, + {} + ) + }) + + it('calls dispatch button if you select disabled and save', () => { + render(props) + const disabledBtn = screen.getByText('Disabled') + fireEvent.click(disabledBtn) + const saveBtn = screen.getByText('Save') + fireEvent.click(saveBtn) + expect(props.dispatch).toHaveBeenCalled() + expect(mockTrackEventWithRobotSerial).toHaveBeenCalled() + }) + + it('has correct range for aspirate', () => { + render(props) + const enabledBtn = screen.getByText('Enabled') + fireEvent.click(enabledBtn) + const continueBtn = screen.getByText('Continue') + fireEvent.click(continueBtn) + const numButton = screen.getByText('0') + fireEvent.click(numButton) + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Touch tip position from bottom of well (mm)', + error: 'Value must be between 25-50', + readOnly: true, + type: 'number', + value: 0, + }, + {} + ) + const saveBtn = screen.getByTestId('ChildNavigation_Primary_Button') + expect(saveBtn).toBeDisabled() + }) + + it('has correct range for dispense', () => { + props = { + ...props, + kind: 'dispense', + } + render(props) + const enabledBtn = screen.getByText('Enabled') + fireEvent.click(enabledBtn) + const continueBtn = screen.getByText('Continue') + fireEvent.click(continueBtn) + const numButton = screen.getByText('0') + fireEvent.click(numButton) + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Touch tip position from bottom of well (mm)', + error: 'Value must be between 100-200', + readOnly: true, + type: 'number', + value: 0, + }, + {} + ) + const saveBtn = screen.getByTestId('ChildNavigation_Primary_Button') + expect(saveBtn).toBeDisabled() + }) + + it('calls dispatch when an in range value is entered and saved', () => { + render(props) + const enabledBtn = screen.getByText('Enabled') + fireEvent.click(enabledBtn) + const continueBtn = screen.getByText('Continue') + fireEvent.click(continueBtn) + const numButton = screen.getByText('4') + fireEvent.click(numButton) + fireEvent.click(numButton) + const saveBtn = screen.getByText('Save') + fireEvent.click(saveBtn) + expect(props.dispatch).toHaveBeenCalled() + expect(mockTrackEventWithRobotSerial).toHaveBeenCalled() + }) + + it('renders previously set value saved in state for aspirate', () => { + props = { + ...props, + state: { + ...props.state, + touchTipAspirate: 32, + }, + } + render(props) + const continueBtn = screen.getByText('Continue') + fireEvent.click(continueBtn) + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Touch tip position from bottom of well (mm)', + error: null, + readOnly: true, + type: 'number', + value: 32, + }, + {} + ) + }) + + it('renders previously set value saved in state for dispense', () => { + props = { + ...props, + kind: 'dispense', + state: { + ...props.state, + touchTipDispense: 118, + }, + } + render(props) + const continueBtn = screen.getByText('Continue') + fireEvent.click(continueBtn) + expect(vi.mocked(InputField)).toHaveBeenCalledWith( + { + title: 'Touch tip position from bottom of well (mm)', + error: null, + readOnly: true, + type: 'number', + value: 118, + }, + {} + ) + }) +}) diff --git a/app/src/organisms/QuickTransferFlow/__tests__/SelectDestLabware.test.tsx b/app/src/organisms/ODD/QuickTransferFlow/__tests__/SelectDestLabware.test.tsx similarity index 98% rename from app/src/organisms/QuickTransferFlow/__tests__/SelectDestLabware.test.tsx rename to app/src/organisms/ODD/QuickTransferFlow/__tests__/SelectDestLabware.test.tsx index 848921eb76e..6448542c14e 100644 --- a/app/src/organisms/QuickTransferFlow/__tests__/SelectDestLabware.test.tsx +++ b/app/src/organisms/ODD/QuickTransferFlow/__tests__/SelectDestLabware.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, afterEach, vi, beforeEach } from 'vitest' diff --git a/app/src/organisms/QuickTransferFlow/__tests__/SelectPipette.test.tsx b/app/src/organisms/ODD/QuickTransferFlow/__tests__/SelectPipette.test.tsx similarity index 99% rename from app/src/organisms/QuickTransferFlow/__tests__/SelectPipette.test.tsx rename to app/src/organisms/ODD/QuickTransferFlow/__tests__/SelectPipette.test.tsx index 463b2b7bb61..e32f7645593 100644 --- a/app/src/organisms/QuickTransferFlow/__tests__/SelectPipette.test.tsx +++ b/app/src/organisms/ODD/QuickTransferFlow/__tests__/SelectPipette.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, afterEach, vi, beforeEach } from 'vitest' import { useInstrumentsQuery } from '@opentrons/react-api-client' diff --git a/app/src/organisms/QuickTransferFlow/__tests__/SelectSourceLabware.test.tsx b/app/src/organisms/ODD/QuickTransferFlow/__tests__/SelectSourceLabware.test.tsx similarity index 98% rename from app/src/organisms/QuickTransferFlow/__tests__/SelectSourceLabware.test.tsx rename to app/src/organisms/ODD/QuickTransferFlow/__tests__/SelectSourceLabware.test.tsx index 1f353557e1c..73121ea7b2d 100644 --- a/app/src/organisms/QuickTransferFlow/__tests__/SelectSourceLabware.test.tsx +++ b/app/src/organisms/ODD/QuickTransferFlow/__tests__/SelectSourceLabware.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, afterEach, vi, beforeEach } from 'vitest' diff --git a/app/src/organisms/QuickTransferFlow/__tests__/SelectTipRack.test.tsx b/app/src/organisms/ODD/QuickTransferFlow/__tests__/SelectTipRack.test.tsx similarity index 98% rename from app/src/organisms/QuickTransferFlow/__tests__/SelectTipRack.test.tsx rename to app/src/organisms/ODD/QuickTransferFlow/__tests__/SelectTipRack.test.tsx index 39f9f7cb5fb..f4ee22bd2b9 100644 --- a/app/src/organisms/QuickTransferFlow/__tests__/SelectTipRack.test.tsx +++ b/app/src/organisms/ODD/QuickTransferFlow/__tests__/SelectTipRack.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, afterEach, vi, beforeEach } from 'vitest' diff --git a/app/src/organisms/QuickTransferFlow/__tests__/SummaryAndSettings.test.tsx b/app/src/organisms/ODD/QuickTransferFlow/__tests__/SummaryAndSettings.test.tsx similarity index 85% rename from app/src/organisms/QuickTransferFlow/__tests__/SummaryAndSettings.test.tsx rename to app/src/organisms/ODD/QuickTransferFlow/__tests__/SummaryAndSettings.test.tsx index ff04b25c6e0..0f5f7c7742c 100644 --- a/app/src/organisms/QuickTransferFlow/__tests__/SummaryAndSettings.test.tsx +++ b/app/src/organisms/ODD/QuickTransferFlow/__tests__/SummaryAndSettings.test.tsx @@ -1,14 +1,18 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, afterEach, vi, beforeEach } from 'vitest' + import { useCreateProtocolMutation, useCreateRunMutation, } from '@opentrons/react-api-client' + import { useNotifyDeckConfigurationQuery } from '/app/resources/deck_configuration' +import { ANALYTICS_QUICK_TRANSFER_RUN_NOW } from '/app/redux/analytics' import { createQuickTransferFile } from '../utils' import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' +import { useTrackEventWithRobotSerial } from '/app/redux-resources/analytics' import { SummaryAndSettings } from '../SummaryAndSettings' import { NameQuickTransfer } from '../NameQuickTransfer' import { Overview } from '../Overview' @@ -25,6 +29,7 @@ vi.mock('react-router-dom', async importOriginal => { }) vi.mock('../Overview') vi.mock('../NameQuickTransfer') +vi.mock('/app/redux-resources/analytics') vi.mock('../utils', async () => { const actual = await vi.importActual('../utils') return { @@ -41,6 +46,7 @@ const render = (props: React.ComponentProps) => { i18nInstance: i18n, }) } +let mockTrackEventWithRobotSerial: any describe('SummaryAndSettings', () => { let props: React.ComponentProps @@ -65,13 +71,19 @@ describe('SummaryAndSettings', () => { transferType: 'transfer', volume: 25, }, + analyticsStartTime: new Date(), } + mockTrackEventWithRobotSerial = vi.fn( + () => new Promise(resolve => resolve({})) + ) vi.mocked(useNotifyDeckConfigurationQuery).mockReturnValue({ data: { data: [], }, } as any) - + vi.mocked(useTrackEventWithRobotSerial).mockReturnValue({ + trackEventWithRobotSerial: mockTrackEventWithRobotSerial, + }) vi.mocked(useCreateProtocolMutation).mockReturnValue({ mutateAsync: createProtocol, } as any) @@ -112,6 +124,7 @@ describe('SummaryAndSettings', () => { render(props) const continueBtn = screen.getByTestId('ChildNavigation_Primary_Button') fireEvent.click(continueBtn) + expect(mockTrackEventWithRobotSerial).toHaveBeenCalled() screen.getByText('Do you want to run your quick transfer now?') screen.getByText('Save your quick transfer to run it in the future.') }) @@ -129,6 +142,10 @@ describe('SummaryAndSettings', () => { fireEvent.click(continueBtn) const runBtn = screen.getByText('Run now') fireEvent.click(runBtn) + expect(mockTrackEventWithRobotSerial).toHaveBeenCalledWith({ + name: ANALYTICS_QUICK_TRANSFER_RUN_NOW, + properties: {}, + }) expect(vi.mocked(createQuickTransferFile)).toHaveBeenCalled() expect(vi.mocked(createProtocol)).toHaveBeenCalled() }) diff --git a/app/src/organisms/QuickTransferFlow/__tests__/TipManagement/ChangeTip.test.tsx b/app/src/organisms/ODD/QuickTransferFlow/__tests__/TipManagement/ChangeTip.test.tsx similarity index 87% rename from app/src/organisms/QuickTransferFlow/__tests__/TipManagement/ChangeTip.test.tsx rename to app/src/organisms/ODD/QuickTransferFlow/__tests__/TipManagement/ChangeTip.test.tsx index 2ca682f75f0..213633678e5 100644 --- a/app/src/organisms/QuickTransferFlow/__tests__/TipManagement/ChangeTip.test.tsx +++ b/app/src/organisms/ODD/QuickTransferFlow/__tests__/TipManagement/ChangeTip.test.tsx @@ -1,17 +1,23 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, afterEach, vi, beforeEach } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' +import { ANALYTICS_QUICK_TRANSFER_SETTING_SAVED } from '/app/redux/analytics' +import { useTrackEventWithRobotSerial } from '/app/redux-resources/analytics' import { ChangeTip } from '../../TipManagement/ChangeTip' +vi.mock('/app/redux-resources/analytics') + const render = (props: React.ComponentProps): any => { return renderWithProviders(, { i18nInstance: i18n, }) } +let mockTrackEventWithRobotSerial: any + describe('ChangeTip', () => { let props: React.ComponentProps @@ -28,6 +34,12 @@ describe('ChangeTip', () => { } as any, dispatch: vi.fn(), } + mockTrackEventWithRobotSerial = vi.fn( + () => new Promise(resolve => resolve({})) + ) + vi.mocked(useTrackEventWithRobotSerial).mockReturnValue({ + trackEventWithRobotSerial: mockTrackEventWithRobotSerial, + }) }) afterEach(() => { vi.resetAllMocks() @@ -49,6 +61,10 @@ describe('ChangeTip', () => { const saveBtn = screen.getByText('Save') fireEvent.click(saveBtn) expect(props.dispatch).toHaveBeenCalled() + expect(mockTrackEventWithRobotSerial).toHaveBeenCalledWith({ + name: ANALYTICS_QUICK_TRANSFER_SETTING_SAVED, + properties: { setting: 'ChangeTip' }, + }) }) it('renders correct change tip options when single transfer of less than 96 wells', () => { render(props) diff --git a/app/src/organisms/QuickTransferFlow/__tests__/TipManagement/TipDropLocation.test.tsx b/app/src/organisms/ODD/QuickTransferFlow/__tests__/TipManagement/TipDropLocation.test.tsx similarity index 74% rename from app/src/organisms/QuickTransferFlow/__tests__/TipManagement/TipDropLocation.test.tsx rename to app/src/organisms/ODD/QuickTransferFlow/__tests__/TipManagement/TipDropLocation.test.tsx index 92d119a80c6..aed3d143b31 100644 --- a/app/src/organisms/QuickTransferFlow/__tests__/TipManagement/TipDropLocation.test.tsx +++ b/app/src/organisms/ODD/QuickTransferFlow/__tests__/TipManagement/TipDropLocation.test.tsx @@ -1,19 +1,23 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, afterEach, vi, beforeEach } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' import { useNotifyDeckConfigurationQuery } from '/app/resources/deck_configuration' +import { ANALYTICS_QUICK_TRANSFER_SETTING_SAVED } from '/app/redux/analytics' +import { useTrackEventWithRobotSerial } from '/app/redux-resources/analytics' import { TipDropLocation } from '../../TipManagement/TipDropLocation' vi.mock('/app/resources/deck_configuration') +vi.mock('/app/redux-resources/analytics') const render = (props: React.ComponentProps): any => { return renderWithProviders(, { i18nInstance: i18n, }) } +let mockTrackEventWithRobotSerial: any describe('TipDropLocation', () => { let props: React.ComponentProps @@ -26,6 +30,12 @@ describe('TipDropLocation', () => { } as any, dispatch: vi.fn(), } + mockTrackEventWithRobotSerial = vi.fn( + () => new Promise(resolve => resolve({})) + ) + vi.mocked(useTrackEventWithRobotSerial).mockReturnValue({ + trackEventWithRobotSerial: mockTrackEventWithRobotSerial, + }) vi.mocked(useNotifyDeckConfigurationQuery).mockReturnValue({ data: [ { @@ -62,5 +72,9 @@ describe('TipDropLocation', () => { const saveBtn = screen.getByText('Save') fireEvent.click(saveBtn) expect(props.dispatch).toHaveBeenCalled() + expect(mockTrackEventWithRobotSerial).toHaveBeenCalledWith({ + name: ANALYTICS_QUICK_TRANSFER_SETTING_SAVED, + properties: { setting: 'TipDropLocation' }, + }) }) }) diff --git a/app/src/organisms/QuickTransferFlow/__tests__/TipManagement/TipManagement.test.tsx b/app/src/organisms/ODD/QuickTransferFlow/__tests__/TipManagement/TipManagement.test.tsx similarity index 72% rename from app/src/organisms/QuickTransferFlow/__tests__/TipManagement/TipManagement.test.tsx rename to app/src/organisms/ODD/QuickTransferFlow/__tests__/TipManagement/TipManagement.test.tsx index 79f50c4c09b..618153a8b53 100644 --- a/app/src/organisms/QuickTransferFlow/__tests__/TipManagement/TipManagement.test.tsx +++ b/app/src/organisms/ODD/QuickTransferFlow/__tests__/TipManagement/TipManagement.test.tsx @@ -1,21 +1,25 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, afterEach, vi, beforeEach } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' +import { ANALYTICS_QUICK_TRANSFER_TIP_MANAGEMENT_TAB } from '/app/redux/analytics' +import { useTrackEventWithRobotSerial } from '/app/redux-resources/analytics' import { ChangeTip } from '../../TipManagement/ChangeTip' import { TipDropLocation } from '../../TipManagement/TipDropLocation' import { TipManagement } from '../../TipManagement/' vi.mock('../../TipManagement/ChangeTip') vi.mock('../../TipManagement/TipDropLocation') +vi.mock('/app/redux-resources/analytics') const render = (props: React.ComponentProps): any => { return renderWithProviders(, { i18nInstance: i18n, }) } +let mockTrackEventWithRobotSerial: any describe('TipManagement', () => { let props: React.ComponentProps @@ -30,6 +34,12 @@ describe('TipManagement', () => { } as any, dispatch: vi.fn(), } + mockTrackEventWithRobotSerial = vi.fn( + () => new Promise(resolve => resolve({})) + ) + vi.mocked(useTrackEventWithRobotSerial).mockReturnValue({ + trackEventWithRobotSerial: mockTrackEventWithRobotSerial, + }) }) afterEach(() => { vi.resetAllMocks() @@ -41,6 +51,10 @@ describe('TipManagement', () => { screen.getByText('Once at the start of the transfer') screen.getByText('Tip drop location') screen.getByText('Trash bin') + expect(mockTrackEventWithRobotSerial).toHaveBeenCalledWith({ + name: ANALYTICS_QUICK_TRANSFER_TIP_MANAGEMENT_TAB, + properties: {}, + }) }) it('renders Change tip component when seleted', () => { render(props) diff --git a/app/src/organisms/QuickTransferFlow/__tests__/VolumeEntry.test.tsx b/app/src/organisms/ODD/QuickTransferFlow/__tests__/VolumeEntry.test.tsx similarity index 99% rename from app/src/organisms/QuickTransferFlow/__tests__/VolumeEntry.test.tsx rename to app/src/organisms/ODD/QuickTransferFlow/__tests__/VolumeEntry.test.tsx index 007adf2e98e..8a14b9a5993 100644 --- a/app/src/organisms/QuickTransferFlow/__tests__/VolumeEntry.test.tsx +++ b/app/src/organisms/ODD/QuickTransferFlow/__tests__/VolumeEntry.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, afterEach, vi, beforeEach } from 'vitest' diff --git a/app/src/organisms/QuickTransferFlow/__tests__/utils/generateCompatibleLabwareForPipette.test.ts b/app/src/organisms/ODD/QuickTransferFlow/__tests__/utils/generateCompatibleLabwareForPipette.test.ts similarity index 100% rename from app/src/organisms/QuickTransferFlow/__tests__/utils/generateCompatibleLabwareForPipette.test.ts rename to app/src/organisms/ODD/QuickTransferFlow/__tests__/utils/generateCompatibleLabwareForPipette.test.ts diff --git a/app/src/organisms/QuickTransferFlow/__tests__/utils/getInitialSummaryState.test.ts b/app/src/organisms/ODD/QuickTransferFlow/__tests__/utils/getInitialSummaryState.test.ts similarity index 100% rename from app/src/organisms/QuickTransferFlow/__tests__/utils/getInitialSummaryState.test.ts rename to app/src/organisms/ODD/QuickTransferFlow/__tests__/utils/getInitialSummaryState.test.ts diff --git a/app/src/organisms/QuickTransferFlow/__tests__/utils/getSelectedWellCount.test.ts b/app/src/organisms/ODD/QuickTransferFlow/__tests__/utils/getSelectedWellCount.test.ts similarity index 100% rename from app/src/organisms/QuickTransferFlow/__tests__/utils/getSelectedWellCount.test.ts rename to app/src/organisms/ODD/QuickTransferFlow/__tests__/utils/getSelectedWellCount.test.ts diff --git a/app/src/organisms/QuickTransferFlow/__tests__/utils/getVolumeRange.test.ts b/app/src/organisms/ODD/QuickTransferFlow/__tests__/utils/getVolumeRange.test.ts similarity index 100% rename from app/src/organisms/QuickTransferFlow/__tests__/utils/getVolumeRange.test.ts rename to app/src/organisms/ODD/QuickTransferFlow/__tests__/utils/getVolumeRange.test.ts diff --git a/app/src/organisms/QuickTransferFlow/constants.ts b/app/src/organisms/ODD/QuickTransferFlow/constants.ts similarity index 100% rename from app/src/organisms/QuickTransferFlow/constants.ts rename to app/src/organisms/ODD/QuickTransferFlow/constants.ts diff --git a/app/src/organisms/QuickTransferFlow/index.tsx b/app/src/organisms/ODD/QuickTransferFlow/index.tsx similarity index 84% rename from app/src/organisms/QuickTransferFlow/index.tsx rename to app/src/organisms/ODD/QuickTransferFlow/index.tsx index 149c52b3c07..f7d94a46000 100644 --- a/app/src/organisms/QuickTransferFlow/index.tsx +++ b/app/src/organisms/ODD/QuickTransferFlow/index.tsx @@ -6,6 +6,8 @@ import { StepMeter, POSITION_STICKY, } from '@opentrons/components' +import { ANALYTICS_QUICK_TRANSFER_EXIT_EARLY } from '/app/redux/analytics' +import { useTrackEventWithRobotSerial } from '/app/redux-resources/analytics' import { ConfirmExitModal } from './ConfirmExitModal' import { CreateNewTransfer } from './CreateNewTransfer' import { SelectPipette } from './SelectPipette' @@ -27,17 +29,26 @@ const initialQuickTransferState: QuickTransferWizardState = {} export const QuickTransferFlow = (): JSX.Element => { const navigate = useNavigate() const { i18n, t } = useTranslation(['quick_transfer', 'shared']) + const { trackEventWithRobotSerial } = useTrackEventWithRobotSerial() const [state, dispatch] = React.useReducer( quickTransferWizardReducer, initialQuickTransferState ) const [currentStep, setCurrentStep] = React.useState(0) + const [analyticsStartTime] = React.useState(new Date()) + const { confirm: confirmExit, showConfirmation: showConfirmExit, cancel: cancelExit, } = useConditionalConfirm(() => { + trackEventWithRobotSerial({ + name: ANALYTICS_QUICK_TRANSFER_EXIT_EARLY, + properties: { + step: currentStep, + }, + }) navigate('/quick-transfer') }, true) @@ -73,7 +84,11 @@ export const QuickTransferFlow = (): JSX.Element => { , , , - , + , ] return ( diff --git a/app/src/organisms/QuickTransferFlow/reducers.ts b/app/src/organisms/ODD/QuickTransferFlow/reducers.ts similarity index 100% rename from app/src/organisms/QuickTransferFlow/reducers.ts rename to app/src/organisms/ODD/QuickTransferFlow/reducers.ts diff --git a/app/src/organisms/QuickTransferFlow/types.ts b/app/src/organisms/ODD/QuickTransferFlow/types.ts similarity index 100% rename from app/src/organisms/QuickTransferFlow/types.ts rename to app/src/organisms/ODD/QuickTransferFlow/types.ts diff --git a/app/src/organisms/QuickTransferFlow/utils/createQuickTransferFile.ts b/app/src/organisms/ODD/QuickTransferFlow/utils/createQuickTransferFile.ts similarity index 96% rename from app/src/organisms/QuickTransferFlow/utils/createQuickTransferFile.ts rename to app/src/organisms/ODD/QuickTransferFlow/utils/createQuickTransferFile.ts index a4114c0a4d4..09fa2348f39 100644 --- a/app/src/organisms/QuickTransferFlow/utils/createQuickTransferFile.ts +++ b/app/src/organisms/ODD/QuickTransferFlow/utils/createQuickTransferFile.ts @@ -202,10 +202,9 @@ export function createQuickTransferFile( subcategory: null, tags: [], }, - // TODO: formalize designer application data type designerApplication: { - name: 'Quick Transfer', - version: '0.0', + name: 'opentrons/quick-transfer', + version: '1.0.0', data: quickTransferState, }, } @@ -250,8 +249,6 @@ export function createQuickTransferFile( ...commandAnnotionaV1Mixin, }) - // Leaving this in for debugging while work is still in flight - console.log('Here are the protocol contents:', protocolContents) return new File( [protocolContents], `${protocolBase.metadata.protocolName}.json` diff --git a/app/src/organisms/QuickTransferFlow/utils/generateCompatibleLabwareForPipette.ts b/app/src/organisms/ODD/QuickTransferFlow/utils/generateCompatibleLabwareForPipette.ts similarity index 100% rename from app/src/organisms/QuickTransferFlow/utils/generateCompatibleLabwareForPipette.ts rename to app/src/organisms/ODD/QuickTransferFlow/utils/generateCompatibleLabwareForPipette.ts diff --git a/app/src/organisms/QuickTransferFlow/utils/generateQuickTransferArgs.ts b/app/src/organisms/ODD/QuickTransferFlow/utils/generateQuickTransferArgs.ts similarity index 100% rename from app/src/organisms/QuickTransferFlow/utils/generateQuickTransferArgs.ts rename to app/src/organisms/ODD/QuickTransferFlow/utils/generateQuickTransferArgs.ts diff --git a/app/src/organisms/QuickTransferFlow/utils/getCompatibleLabwareByCategory.ts b/app/src/organisms/ODD/QuickTransferFlow/utils/getCompatibleLabwareByCategory.ts similarity index 100% rename from app/src/organisms/QuickTransferFlow/utils/getCompatibleLabwareByCategory.ts rename to app/src/organisms/ODD/QuickTransferFlow/utils/getCompatibleLabwareByCategory.ts diff --git a/app/src/organisms/QuickTransferFlow/utils/getInitialSummaryState.ts b/app/src/organisms/ODD/QuickTransferFlow/utils/getInitialSummaryState.ts similarity index 100% rename from app/src/organisms/QuickTransferFlow/utils/getInitialSummaryState.ts rename to app/src/organisms/ODD/QuickTransferFlow/utils/getInitialSummaryState.ts diff --git a/app/src/organisms/QuickTransferFlow/utils/getSelectedWellCount.ts b/app/src/organisms/ODD/QuickTransferFlow/utils/getSelectedWellCount.ts similarity index 100% rename from app/src/organisms/QuickTransferFlow/utils/getSelectedWellCount.ts rename to app/src/organisms/ODD/QuickTransferFlow/utils/getSelectedWellCount.ts diff --git a/app/src/organisms/QuickTransferFlow/utils/getVolumeRange.ts b/app/src/organisms/ODD/QuickTransferFlow/utils/getVolumeRange.ts similarity index 100% rename from app/src/organisms/QuickTransferFlow/utils/getVolumeRange.ts rename to app/src/organisms/ODD/QuickTransferFlow/utils/getVolumeRange.ts diff --git a/app/src/organisms/QuickTransferFlow/utils/index.ts b/app/src/organisms/ODD/QuickTransferFlow/utils/index.ts similarity index 100% rename from app/src/organisms/QuickTransferFlow/utils/index.ts rename to app/src/organisms/ODD/QuickTransferFlow/utils/index.ts diff --git a/app/src/organisms/ODD/RobotDashboard/EmptyRecentRun.tsx b/app/src/organisms/ODD/RobotDashboard/EmptyRecentRun.tsx index ddf462e570a..0dc551aff7a 100644 --- a/app/src/organisms/ODD/RobotDashboard/EmptyRecentRun.tsx +++ b/app/src/organisms/ODD/RobotDashboard/EmptyRecentRun.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { diff --git a/app/src/organisms/ODD/RobotDashboard/RecentRunProtocolCard.tsx b/app/src/organisms/ODD/RobotDashboard/RecentRunProtocolCard.tsx index 26d03fed45d..17ef7de2c3c 100644 --- a/app/src/organisms/ODD/RobotDashboard/RecentRunProtocolCard.tsx +++ b/app/src/organisms/ODD/RobotDashboard/RecentRunProtocolCard.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { css } from 'styled-components' import { useTranslation } from 'react-i18next' import { useNavigate } from 'react-router-dom' @@ -90,7 +90,7 @@ export function ProtocolWithLastRun({ // TODO(BC, 08/29/23): reintroduce this analytics event when we refactor the hook to fetch data lazily (performance concern) // const { trackProtocolRunEvent } = useTrackProtocolRunEvent(runData.id) const { cloneRun } = useCloneRun(runData.id) - const [showSpinner, setShowSpinner] = React.useState(false) + const [showSpinner, setShowSpinner] = useState(false) const protocolName = protocolData.metadata.protocolName ?? protocolData.files[0].name diff --git a/app/src/organisms/ODD/RobotDashboard/RecentRunProtocolCarousel.tsx b/app/src/organisms/ODD/RobotDashboard/RecentRunProtocolCarousel.tsx index ac9006dc93d..037347146f0 100644 --- a/app/src/organisms/ODD/RobotDashboard/RecentRunProtocolCarousel.tsx +++ b/app/src/organisms/ODD/RobotDashboard/RecentRunProtocolCarousel.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { ALIGN_FLEX_START, DIRECTION_ROW, diff --git a/app/src/organisms/ODD/RobotDashboard/ServerInitializing.tsx b/app/src/organisms/ODD/RobotDashboard/ServerInitializing.tsx index fc363f22b02..a062628a3bc 100644 --- a/app/src/organisms/ODD/RobotDashboard/ServerInitializing.tsx +++ b/app/src/organisms/ODD/RobotDashboard/ServerInitializing.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { diff --git a/app/src/organisms/ODD/RobotDashboard/__tests__/EmptyRecentRun.test.tsx b/app/src/organisms/ODD/RobotDashboard/__tests__/EmptyRecentRun.test.tsx index 5cfd0b070b6..6c7c7e5371c 100644 --- a/app/src/organisms/ODD/RobotDashboard/__tests__/EmptyRecentRun.test.tsx +++ b/app/src/organisms/ODD/RobotDashboard/__tests__/EmptyRecentRun.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { screen } from '@testing-library/react' import { describe, expect, it } from 'vitest' diff --git a/app/src/organisms/ODD/RobotDashboard/__tests__/RecentRunProtocolCard.test.tsx b/app/src/organisms/ODD/RobotDashboard/__tests__/RecentRunProtocolCard.test.tsx index e3bdb0fd63c..e03f548f069 100644 --- a/app/src/organisms/ODD/RobotDashboard/__tests__/RecentRunProtocolCard.test.tsx +++ b/app/src/organisms/ODD/RobotDashboard/__tests__/RecentRunProtocolCard.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { formatDistance } from 'date-fns' import { MemoryRouter } from 'react-router-dom' diff --git a/app/src/organisms/ODD/RobotDashboard/__tests__/RecentRunProtocolCarousel.test.tsx b/app/src/organisms/ODD/RobotDashboard/__tests__/RecentRunProtocolCarousel.test.tsx index be90caa09e4..277edf80d87 100644 --- a/app/src/organisms/ODD/RobotDashboard/__tests__/RecentRunProtocolCarousel.test.tsx +++ b/app/src/organisms/ODD/RobotDashboard/__tests__/RecentRunProtocolCarousel.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { screen } from '@testing-library/react' import { beforeEach, describe, it, vi } from 'vitest' diff --git a/app/src/organisms/ODD/RobotDashboard/hooks/__tests__/useHardwareStatusText.test.tsx b/app/src/organisms/ODD/RobotDashboard/hooks/__tests__/useHardwareStatusText.test.tsx index 04388bda536..f209e69f5ec 100644 --- a/app/src/organisms/ODD/RobotDashboard/hooks/__tests__/useHardwareStatusText.test.tsx +++ b/app/src/organisms/ODD/RobotDashboard/hooks/__tests__/useHardwareStatusText.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { I18nextProvider } from 'react-i18next' import { renderHook } from '@testing-library/react' import { beforeEach, describe, expect, it, vi } from 'vitest' diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/DeviceReset.tsx b/app/src/organisms/ODD/RobotSettingsDashboard/DeviceReset.tsx index d7416bbe625..40c6170fc56 100644 --- a/app/src/organisms/ODD/RobotSettingsDashboard/DeviceReset.tsx +++ b/app/src/organisms/ODD/RobotSettingsDashboard/DeviceReset.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, useEffect, Fragment } from 'react' import { useDispatch, useSelector } from 'react-redux' import { useTranslation } from 'react-i18next' import styled from 'styled-components' @@ -17,7 +17,7 @@ import { import { MediumButton, SmallButton } from '/app/atoms/buttons' import { OddModal } from '/app/molecules/OddModal' -import { ChildNavigation } from '/app/organisms/ChildNavigation' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' import { getResetConfigOptions, fetchResetConfigOptions, @@ -57,7 +57,7 @@ export function DeviceReset({ setCurrentOption, }: DeviceResetProps): JSX.Element { const { t } = useTranslation('device_settings') - const [resetOptions, setResetOptions] = React.useState({}) + const [resetOptions, setResetOptions] = useState({}) const options = useSelector((state: State) => getResetConfigOptions(state, robotName) ) @@ -141,11 +141,11 @@ export function DeviceReset({ subText, } } - React.useEffect(() => { + useEffect(() => { dispatch(fetchResetConfigOptions(robotName)) }, [dispatch, robotName]) - React.useEffect(() => { + useEffect(() => { if ( isEveryOptionSelected(resetOptions) && (!resetOptions.authorizedKeys || @@ -161,7 +161,7 @@ export function DeviceReset({ } }, [resetOptions]) - React.useEffect(() => { + useEffect(() => { if ( !isEveryOptionSelected(resetOptions) && resetOptions.authorizedKeys && @@ -205,7 +205,7 @@ export function DeviceReset({ {availableOptionsToDisplay.map(option => { const { optionText, subText } = renderText(option.id) return ( - + - + ) })} diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/EthernetConnectionDetails.tsx b/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/EthernetConnectionDetails.tsx index 34653237faa..842965ad677 100644 --- a/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/EthernetConnectionDetails.tsx +++ b/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/EthernetConnectionDetails.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { useSelector } from 'react-redux' import { css } from 'styled-components' @@ -15,7 +14,7 @@ import { TYPOGRAPHY, } from '@opentrons/components' -import { ChildNavigation } from '/app/organisms/ChildNavigation' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' import { getNetworkInterfaces } from '/app/redux/networking' import { getLocalRobot } from '/app/redux/discovery' diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/NetworkDetailsModal.tsx b/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/NetworkDetailsModal.tsx index a6b6c5fa473..ef835573c8f 100644 --- a/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/NetworkDetailsModal.tsx +++ b/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/NetworkDetailsModal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/RobotSettingsJoinOtherNetwork.tsx b/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/RobotSettingsJoinOtherNetwork.tsx index bf11cbd22c8..fed06e4572c 100644 --- a/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/RobotSettingsJoinOtherNetwork.tsx +++ b/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/RobotSettingsJoinOtherNetwork.tsx @@ -3,7 +3,7 @@ import { useTranslation } from 'react-i18next' import { DIRECTION_COLUMN, Flex } from '@opentrons/components' -import { ChildNavigation } from '/app/organisms/ChildNavigation' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' import { SetWifiSsid } from '../../NetworkSettings' import type { SetSettingOption } from '../types' diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/RobotSettingsSelectAuthenticationType.tsx b/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/RobotSettingsSelectAuthenticationType.tsx index bb870f8fb77..f8ce5e6a205 100644 --- a/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/RobotSettingsSelectAuthenticationType.tsx +++ b/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/RobotSettingsSelectAuthenticationType.tsx @@ -1,9 +1,9 @@ -import * as React from 'react' +import type * as React from 'react' import { useTranslation } from 'react-i18next' import { DIRECTION_COLUMN, Flex } from '@opentrons/components' -import { ChildNavigation } from '/app/organisms/ChildNavigation' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' import { SelectAuthenticationType } from '../../NetworkSettings' import type { WifiSecurityType } from '@opentrons/api-client' diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/RobotSettingsSetWifiCred.tsx b/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/RobotSettingsSetWifiCred.tsx index f86e4d977b1..9204f22f5c4 100644 --- a/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/RobotSettingsSetWifiCred.tsx +++ b/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/RobotSettingsSetWifiCred.tsx @@ -1,9 +1,9 @@ -import * as React from 'react' +import type * as React from 'react' import { useTranslation } from 'react-i18next' import { DIRECTION_COLUMN, Flex } from '@opentrons/components' -import { ChildNavigation } from '/app/organisms/ChildNavigation' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' import { SetWifiCred } from '../../NetworkSettings/SetWifiCred' import type { SetSettingOption } from '../types' diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/RobotSettingsWifi.tsx b/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/RobotSettingsWifi.tsx index 081c9967b38..add3565fe74 100644 --- a/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/RobotSettingsWifi.tsx +++ b/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/RobotSettingsWifi.tsx @@ -1,9 +1,9 @@ -import * as React from 'react' +import type * as React from 'react' import { useTranslation } from 'react-i18next' import { DIRECTION_COLUMN, Flex } from '@opentrons/components' -import { ChildNavigation } from '/app/organisms/ChildNavigation' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' import { WifiConnectionDetails } from './WifiConnectionDetails' import type { WifiSecurityType } from '@opentrons/api-client' diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/RobotSettingsWifiConnect.tsx b/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/RobotSettingsWifiConnect.tsx index 70377aef3c8..14dfdb6bd12 100644 --- a/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/RobotSettingsWifiConnect.tsx +++ b/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/RobotSettingsWifiConnect.tsx @@ -1,9 +1,8 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { Flex, DIRECTION_COLUMN, SPACING } from '@opentrons/components' -import { ChildNavigation } from '/app/organisms/ChildNavigation' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' import { ConnectingNetwork, FailedToConnect } from '../../NetworkSettings' import { FAILURE, PENDING, SUCCESS } from '/app/redux/robot-api' diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/WifiConnectionDetails.tsx b/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/WifiConnectionDetails.tsx index 0d94ec04d55..cc980592572 100644 --- a/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/WifiConnectionDetails.tsx +++ b/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/WifiConnectionDetails.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { useTranslation } from 'react-i18next' import { useSelector } from 'react-redux' @@ -42,10 +42,9 @@ export function WifiConnectionDetails({ handleJoinAnotherNetwork, }: WifiConnectionDetailsProps): JSX.Element { const { i18n, t } = useTranslation(['device_settings', 'shared']) - const [ - showNetworkDetailModal, - setShowNetworkDetailModal, - ] = React.useState(false) + const [showNetworkDetailModal, setShowNetworkDetailModal] = useState( + false + ) const localRobot = useSelector(getLocalRobot) const robotName = localRobot?.name != null ? localRobot.name : 'no name' const list = useWifiList(robotName, FETCH_WIFI_LIST_MS) diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/__tests__/EthernetConnectionDetails.test.tsx b/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/__tests__/EthernetConnectionDetails.test.tsx index e4d1a096ec7..ddefd80196d 100644 --- a/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/__tests__/EthernetConnectionDetails.test.tsx +++ b/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/__tests__/EthernetConnectionDetails.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, vi, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/__tests__/NetworkDetailsModal.test.tsx b/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/__tests__/NetworkDetailsModal.test.tsx index 21cd6fbc4c6..76b4c6f1be0 100644 --- a/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/__tests__/NetworkDetailsModal.test.tsx +++ b/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/__tests__/NetworkDetailsModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, vi, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/__tests__/NetworkSettings.test.tsx b/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/__tests__/NetworkSettings.test.tsx index 5c1244ba66c..266778c0c81 100644 --- a/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/__tests__/NetworkSettings.test.tsx +++ b/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/__tests__/NetworkSettings.test.tsx @@ -1,5 +1,5 @@ /* eslint-disable testing-library/no-node-access */ -import * as React from 'react' +import type * as React from 'react' import { screen } from '@testing-library/react' import { describe, it, expect, vi, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/__tests__/WifiConnectionDetails.test.tsx b/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/__tests__/WifiConnectionDetails.test.tsx index b7d6aeafe18..9650a89b76c 100644 --- a/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/__tests__/WifiConnectionDetails.test.tsx +++ b/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/__tests__/WifiConnectionDetails.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { when } from 'vitest-when' import { describe, it, expect, vi, beforeEach } from 'vitest' diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/index.tsx b/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/index.tsx index f3e6c1ea351..db73b89dae3 100644 --- a/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/index.tsx +++ b/app/src/organisms/ODD/RobotSettingsDashboard/NetworkSettings/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { css } from 'styled-components' import { useTranslation } from 'react-i18next' @@ -17,7 +17,7 @@ import { TYPOGRAPHY, } from '@opentrons/components' -import { ChildNavigation } from '/app/organisms/ChildNavigation' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' import type { IconName, ChipType } from '@opentrons/components' import type { NetworkConnection } from '/app/resources/networking/hooks/useNetworkConnection' diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/OnOffToggle.tsx b/app/src/organisms/ODD/RobotSettingsDashboard/OnOffToggle.tsx index 565a8fb0798..32b3a94e474 100644 --- a/app/src/organisms/ODD/RobotSettingsDashboard/OnOffToggle.tsx +++ b/app/src/organisms/ODD/RobotSettingsDashboard/OnOffToggle.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { ALIGN_CENTER, diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/Privacy.tsx b/app/src/organisms/ODD/RobotSettingsDashboard/Privacy.tsx index 5954ae3850e..3151d618b53 100644 --- a/app/src/organisms/ODD/RobotSettingsDashboard/Privacy.tsx +++ b/app/src/organisms/ODD/RobotSettingsDashboard/Privacy.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { useDispatch, useSelector } from 'react-redux' @@ -10,7 +9,7 @@ import { TYPOGRAPHY, } from '@opentrons/components' -import { ChildNavigation } from '/app/organisms/ChildNavigation' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' import { RobotSettingButton } from './RobotSettingButton' import { OnOffToggle } from './OnOffToggle' import { diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/RobotName.tsx b/app/src/organisms/ODD/RobotSettingsDashboard/RobotName.tsx index cb321fdaf95..3e640f2b4c0 100644 --- a/app/src/organisms/ODD/RobotSettingsDashboard/RobotName.tsx +++ b/app/src/organisms/ODD/RobotSettingsDashboard/RobotName.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/RobotSettingButton.tsx b/app/src/organisms/ODD/RobotSettingsDashboard/RobotSettingButton.tsx index da16402f0e2..f777c9fcb77 100644 --- a/app/src/organisms/ODD/RobotSettingsDashboard/RobotSettingButton.tsx +++ b/app/src/organisms/ODD/RobotSettingsDashboard/RobotSettingButton.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { css } from 'styled-components' import { diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/RobotSystemVersion.tsx b/app/src/organisms/ODD/RobotSettingsDashboard/RobotSystemVersion.tsx index 0cb3087c1f1..37d9352659e 100644 --- a/app/src/organisms/ODD/RobotSettingsDashboard/RobotSystemVersion.tsx +++ b/app/src/organisms/ODD/RobotSettingsDashboard/RobotSystemVersion.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { useTranslation } from 'react-i18next' import { @@ -14,7 +14,7 @@ import { } from '@opentrons/components' import { MediumButton } from '/app/atoms/buttons' -import { ChildNavigation } from '/app/organisms/ChildNavigation' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' import { RobotSystemVersionModal } from './RobotSystemVersionModal' import type { RobotUpdateInfo } from '/app/redux/robot-update/types' @@ -42,7 +42,7 @@ export function RobotSystemVersion({ 'app_settings', 'branded', ]) - const [showModal, setShowModal] = React.useState(isUpdateAvailable) + const [showModal, setShowModal] = useState(isUpdateAvailable) return ( <> diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/RobotSystemVersionModal.tsx b/app/src/organisms/ODD/RobotSettingsDashboard/RobotSystemVersionModal.tsx index d08ea8b7328..9d09a2cf6b2 100644 --- a/app/src/organisms/ODD/RobotSettingsDashboard/RobotSystemVersionModal.tsx +++ b/app/src/organisms/ODD/RobotSettingsDashboard/RobotSystemVersionModal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { useNavigate } from 'react-router-dom' diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/TextSize.tsx b/app/src/organisms/ODD/RobotSettingsDashboard/TextSize.tsx index ad71888349f..56ca4f8c053 100644 --- a/app/src/organisms/ODD/RobotSettingsDashboard/TextSize.tsx +++ b/app/src/organisms/ODD/RobotSettingsDashboard/TextSize.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import styled from 'styled-components' diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/TouchScreenSleep.tsx b/app/src/organisms/ODD/RobotSettingsDashboard/TouchScreenSleep.tsx index 520adff8438..ea3d879088f 100644 --- a/app/src/organisms/ODD/RobotSettingsDashboard/TouchScreenSleep.tsx +++ b/app/src/organisms/ODD/RobotSettingsDashboard/TouchScreenSleep.tsx @@ -9,12 +9,12 @@ import { RadioButton, } from '@opentrons/components' -import { ChildNavigation } from '/app/organisms/ChildNavigation' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' import { getOnDeviceDisplaySettings, updateConfigValue, } from '/app/redux/config' -import { SLEEP_NEVER_MS } from '../../../App/constants' +import { SLEEP_NEVER_MS } from '/app/local-resources/config' import type { Dispatch } from '/app/redux/types' import type { SetSettingOption } from './types' diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/TouchscreenBrightness.tsx b/app/src/organisms/ODD/RobotSettingsDashboard/TouchscreenBrightness.tsx index 2d2e7522fe5..c84d4abf574 100644 --- a/app/src/organisms/ODD/RobotSettingsDashboard/TouchscreenBrightness.tsx +++ b/app/src/organisms/ODD/RobotSettingsDashboard/TouchscreenBrightness.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { useDispatch, useSelector } from 'react-redux' import { useTranslation } from 'react-i18next' import styled from 'styled-components' @@ -16,7 +16,7 @@ import { SPACING, } from '@opentrons/components' -import { ChildNavigation } from '/app/organisms/ChildNavigation' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' import { getOnDeviceDisplaySettings, updateConfigValue, @@ -54,7 +54,7 @@ export function TouchscreenBrightness({ const { t } = useTranslation(['device_settings']) const dispatch = useDispatch() const initialBrightness = useSelector(getOnDeviceDisplaySettings).brightness - const [brightness, setBrightness] = React.useState(initialBrightness) + const [brightness, setBrightness] = useState(initialBrightness) const brightnessLevel = [6, 5, 4, 3, 2, 1] const handleClick = (changeType: 'up' | 'down'): void => { diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/UpdateChannel.tsx b/app/src/organisms/ODD/RobotSettingsDashboard/UpdateChannel.tsx index 856d5d4613c..c9668e8a079 100644 --- a/app/src/organisms/ODD/RobotSettingsDashboard/UpdateChannel.tsx +++ b/app/src/organisms/ODD/RobotSettingsDashboard/UpdateChannel.tsx @@ -14,7 +14,7 @@ import { CURSOR_POINTER, } from '@opentrons/components' -import { ChildNavigation } from '/app/organisms/ChildNavigation' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' import { getDevtoolsEnabled, getUpdateChannel, diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/DeviceReset.test.tsx b/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/DeviceReset.test.tsx index 8c04c6effa2..9f71205231e 100644 --- a/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/DeviceReset.test.tsx +++ b/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/DeviceReset.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, vi, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/Privacy.test.tsx b/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/Privacy.test.tsx index 82b72d2707e..03f4a987462 100644 --- a/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/Privacy.test.tsx +++ b/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/Privacy.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { vi, describe, beforeEach, afterEach, expect, it } from 'vitest' diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/RobotSystemVersion.test.tsx b/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/RobotSystemVersion.test.tsx index b5088e678c0..ad30e2539fa 100644 --- a/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/RobotSystemVersion.test.tsx +++ b/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/RobotSystemVersion.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, vi, beforeEach } from 'vitest' diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/RobotSystemVersionModal.test.tsx b/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/RobotSystemVersionModal.test.tsx index 7ddfe109485..0d7a125eb1f 100644 --- a/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/RobotSystemVersionModal.test.tsx +++ b/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/RobotSystemVersionModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, vi, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/TextSize.test.tsx b/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/TextSize.test.tsx index e58d805514c..703323c0d7e 100644 --- a/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/TextSize.test.tsx +++ b/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/TextSize.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, vi, beforeEach } from 'vitest' diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/TouchScreenSleep.test.tsx b/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/TouchScreenSleep.test.tsx index c1cfde27b4e..990c6bcf436 100644 --- a/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/TouchScreenSleep.test.tsx +++ b/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/TouchScreenSleep.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, vi, beforeEach } from 'vitest' import { i18n } from '/app/i18n' diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/TouchscreenBrightness.test.tsx b/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/TouchscreenBrightness.test.tsx index 5795f7a1bba..76993c42300 100644 --- a/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/TouchscreenBrightness.test.tsx +++ b/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/TouchscreenBrightness.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, vi, beforeEach } from 'vitest' diff --git a/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/UpdateChannel.test.tsx b/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/UpdateChannel.test.tsx index dd9b4c217be..c25e9582a4b 100644 --- a/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/UpdateChannel.test.tsx +++ b/app/src/organisms/ODD/RobotSettingsDashboard/__tests__/UpdateChannel.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, vi, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' diff --git a/app/src/organisms/RobotSetupHeader/index.tsx b/app/src/organisms/ODD/RobotSetupHeader/index.tsx similarity index 98% rename from app/src/organisms/RobotSetupHeader/index.tsx rename to app/src/organisms/ODD/RobotSetupHeader/index.tsx index 3a192c28148..6b7a3fa1049 100644 --- a/app/src/organisms/RobotSetupHeader/index.tsx +++ b/app/src/organisms/ODD/RobotSetupHeader/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { ALIGN_CENTER, diff --git a/app/src/organisms/ODD/RunningProtocol/CancelingRunModal.tsx b/app/src/organisms/ODD/RunningProtocol/CancelingRunModal.tsx index ff5f096fa64..1aa7c2c306e 100644 --- a/app/src/organisms/ODD/RunningProtocol/CancelingRunModal.tsx +++ b/app/src/organisms/ODD/RunningProtocol/CancelingRunModal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { diff --git a/app/src/organisms/ODD/RunningProtocol/ConfirmCancelRunModal.tsx b/app/src/organisms/ODD/RunningProtocol/ConfirmCancelRunModal.tsx index c0036d03953..453e3152ad4 100644 --- a/app/src/organisms/ODD/RunningProtocol/ConfirmCancelRunModal.tsx +++ b/app/src/organisms/ODD/RunningProtocol/ConfirmCancelRunModal.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, useEffect } from 'react' import { useTranslation } from 'react-i18next' import { useNavigate } from 'react-router-dom' import { useSelector } from 'react-redux' @@ -66,7 +66,7 @@ export function ConfirmCancelRunModal({ const robotName = localRobot?.name ?? '' const { trackProtocolRunEvent } = useTrackProtocolRunEvent(runId, robotName) const navigate = useNavigate() - const [isCanceling, setIsCanceling] = React.useState(false) + const [isCanceling, setIsCanceling] = useState(false) const modalHeader: OddModalHeaderBaseProps = { title: t('cancel_run_modal_heading'), @@ -84,7 +84,7 @@ export function ConfirmCancelRunModal({ }) } - React.useEffect(() => { + useEffect(() => { if (runStatus === RUN_STATUS_STOPPED) { trackProtocolRunEvent({ name: ANALYTICS_PROTOCOL_RUN_ACTION.CANCEL }) if (!isActiveRun) { diff --git a/app/src/organisms/ODD/RunningProtocol/CurrentRunningProtocolCommand.tsx b/app/src/organisms/ODD/RunningProtocol/CurrentRunningProtocolCommand.tsx index 8b2e6c9bcc1..e474d58ab11 100644 --- a/app/src/organisms/ODD/RunningProtocol/CurrentRunningProtocolCommand.tsx +++ b/app/src/organisms/ODD/RunningProtocol/CurrentRunningProtocolCommand.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { css, keyframes } from 'styled-components' import { useTranslation } from 'react-i18next' @@ -21,7 +20,7 @@ import { import { RUN_STATUS_RUNNING, RUN_STATUS_IDLE } from '@opentrons/api-client' import { CommandText } from '/app/molecules/Command' -import { RunTimer } from '../../Devices/ProtocolRun/RunTimer' +import { RunTimer } from '/app/molecules/RunTimer' import { getCommandTextData } from '/app/molecules/Command/utils/getCommandTextData' import { PlayPauseButton } from './PlayPauseButton' import { StopButton } from './StopButton' diff --git a/app/src/organisms/ODD/RunningProtocol/PlayPauseButton.tsx b/app/src/organisms/ODD/RunningProtocol/PlayPauseButton.tsx index 47428f1420b..44b4154cf65 100644 --- a/app/src/organisms/ODD/RunningProtocol/PlayPauseButton.tsx +++ b/app/src/organisms/ODD/RunningProtocol/PlayPauseButton.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { css } from 'styled-components' import { diff --git a/app/src/organisms/ODD/RunningProtocol/RunFailedModal.tsx b/app/src/organisms/ODD/RunningProtocol/RunFailedModal.tsx index 1de8c5138d7..29cef598fd0 100644 --- a/app/src/organisms/ODD/RunningProtocol/RunFailedModal.tsx +++ b/app/src/organisms/ODD/RunningProtocol/RunFailedModal.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { useTranslation } from 'react-i18next' import { useNavigate } from 'react-router-dom' import { css } from 'styled-components' @@ -19,6 +19,7 @@ import { useStopRunMutation } from '@opentrons/react-api-client' import { SmallButton } from '/app/atoms/buttons' import { OddModal } from '/app/molecules/OddModal' import { RUN_STATUS_SUCCEEDED } from '@opentrons/api-client' +import { getHighestPriorityError } from '/app/transformations/runs' import type { OddModalHeaderBaseProps } from '/app/molecules/OddModal/types' import type { @@ -46,7 +47,7 @@ export function RunFailedModal({ const { t, i18n } = useTranslation(['run_details', 'shared', 'branded']) const navigate = useNavigate() const { stopRun } = useStopRunMutation() - const [isCanceling, setIsCanceling] = React.useState(false) + const [isCanceling, setIsCanceling] = useState(false) if ( (errors == null || errors.length === 0) && @@ -203,67 +204,3 @@ const SCROLL_BAR_STYLE = css` border-radius: 11px; } ` - -const _getHighestPriorityError = (error: RunError): RunError => { - if ( - error == null || - error.wrappedErrors == null || - error.wrappedErrors.length === 0 - ) { - return error - } - - let highestPriorityError = error - - error.wrappedErrors.forEach(wrappedError => { - const e = _getHighestPriorityError(wrappedError) - const isHigherPriority = _getIsHigherPriority( - e.errorCode, - highestPriorityError.errorCode - ) - if (isHigherPriority) { - highestPriorityError = e - } - }) - return highestPriorityError -} - -/** - * returns true if the first error code is higher priority than the second, false otherwise - */ -const _getIsHigherPriority = ( - errorCode1: string, - errorCode2: string -): boolean => { - const errorNumber1 = Number(errorCode1) - const errorNumber2 = Number(errorCode2) - - const isSameCategory = - Math.floor(errorNumber1 / 1000) === Math.floor(errorNumber2 / 1000) - const isCode1GenericError = errorNumber1 % 1000 === 0 - - let isHigherPriority = null - - if ( - (isSameCategory && !isCode1GenericError) || - (!isSameCategory && errorNumber1 < errorNumber2) - ) { - isHigherPriority = true - } else { - isHigherPriority = false - } - - return isHigherPriority -} - -export const getHighestPriorityError = (errors: RunError[]): RunError => { - const highestFirstWrappedError = _getHighestPriorityError(errors[0]) - return [highestFirstWrappedError, ...errors.slice(1)].reduce((acc, val) => { - const e = _getHighestPriorityError(val) - const isHigherPriority = _getIsHigherPriority(e.errorCode, acc.errorCode) - if (isHigherPriority) { - return e - } - return acc - }) -} diff --git a/app/src/organisms/ODD/RunningProtocol/RunningProtocolCommandList.tsx b/app/src/organisms/ODD/RunningProtocol/RunningProtocolCommandList.tsx index f351a46541f..f161fa77e05 100644 --- a/app/src/organisms/ODD/RunningProtocol/RunningProtocolCommandList.tsx +++ b/app/src/organisms/ODD/RunningProtocol/RunningProtocolCommandList.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useRef, useState, useEffect } from 'react' import { useTranslation } from 'react-i18next' import { css } from 'styled-components' import { ViewportList } from 'react-viewport-list' @@ -102,14 +102,14 @@ export function RunningProtocolCommandList({ currentRunCommandIndex, }: RunningProtocolCommandListProps): JSX.Element { const { t } = useTranslation('run_details') - const viewPortRef = React.useRef(null) - const ref = React.useRef(null) + const viewPortRef = useRef(null) + const ref = useRef(null) const currentRunStatus = t(`status_${runStatus}`) const onStop = (): void => { if (runStatus === RUN_STATUS_RUNNING) pauseRun() setShowConfirmCancelRunModal(true) } - const [visibleRange, setVisibleRange] = React.useState({ + const [visibleRange, setVisibleRange] = useState({ lowestVisibleIndex: 0, highestVisibleIndex: 0, }) @@ -133,7 +133,7 @@ export function RunningProtocolCommandList({ } } - React.useEffect(() => { + useEffect(() => { // Note (kk:09/25/2023) Need -1 because the element of highestVisibleIndex cannot really readable // due to limited space const isCurrentCommandVisible = diff --git a/app/src/organisms/ODD/RunningProtocol/RunningProtocolSkeleton.tsx b/app/src/organisms/ODD/RunningProtocol/RunningProtocolSkeleton.tsx index 073f650530a..f2427c6bbf4 100644 --- a/app/src/organisms/ODD/RunningProtocol/RunningProtocolSkeleton.tsx +++ b/app/src/organisms/ODD/RunningProtocol/RunningProtocolSkeleton.tsx @@ -1,5 +1,3 @@ -import * as React from 'react' - import { DIRECTION_COLUMN, DIRECTION_ROW, @@ -14,6 +12,7 @@ import { PlayPauseButton } from './PlayPauseButton' import { StopButton } from './StopButton' import { Skeleton } from '/app/atoms/Skeleton' +// eslint-disable-next-line opentrons/no-imports-up-the-tree-of-life import type { ScreenOption } from '/app/pages/ODD/RunningProtocol' const CURRENT_RUNNING_PROTOCOL_COMMAND_SIZE = '99rem' // CurrentRunningProtocolCommand screen diff --git a/app/src/organisms/ODD/RunningProtocol/StopButton.tsx b/app/src/organisms/ODD/RunningProtocol/StopButton.tsx index 2711c8b9da2..4ee9a716c81 100644 --- a/app/src/organisms/ODD/RunningProtocol/StopButton.tsx +++ b/app/src/organisms/ODD/RunningProtocol/StopButton.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { css } from 'styled-components' import { diff --git a/app/src/organisms/ODD/RunningProtocol/__tests__/CancelingRunModal.test.tsx b/app/src/organisms/ODD/RunningProtocol/__tests__/CancelingRunModal.test.tsx index 334493b8db9..5bc8efafe42 100644 --- a/app/src/organisms/ODD/RunningProtocol/__tests__/CancelingRunModal.test.tsx +++ b/app/src/organisms/ODD/RunningProtocol/__tests__/CancelingRunModal.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { screen } from '@testing-library/react' import { describe, it } from 'vitest' diff --git a/app/src/organisms/ODD/RunningProtocol/__tests__/ConfirmCancelRunModal.test.tsx b/app/src/organisms/ODD/RunningProtocol/__tests__/ConfirmCancelRunModal.test.tsx index 55c4b3fec65..69f610d3ef8 100644 --- a/app/src/organisms/ODD/RunningProtocol/__tests__/ConfirmCancelRunModal.test.tsx +++ b/app/src/organisms/ODD/RunningProtocol/__tests__/ConfirmCancelRunModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { when } from 'vitest-when' import { MemoryRouter } from 'react-router-dom' import { fireEvent, screen } from '@testing-library/react' diff --git a/app/src/organisms/ODD/RunningProtocol/__tests__/CurrentRunningProtocolCommand.test.tsx b/app/src/organisms/ODD/RunningProtocol/__tests__/CurrentRunningProtocolCommand.test.tsx index 7cde75fdbaf..8e19bb69491 100644 --- a/app/src/organisms/ODD/RunningProtocol/__tests__/CurrentRunningProtocolCommand.test.tsx +++ b/app/src/organisms/ODD/RunningProtocol/__tests__/CurrentRunningProtocolCommand.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' diff --git a/app/src/organisms/ODD/RunningProtocol/__tests__/RunFailedModal.test.tsx b/app/src/organisms/ODD/RunningProtocol/__tests__/RunFailedModal.test.tsx index 09f86423fcf..8dcfd2e5b88 100644 --- a/app/src/organisms/ODD/RunningProtocol/__tests__/RunFailedModal.test.tsx +++ b/app/src/organisms/ODD/RunningProtocol/__tests__/RunFailedModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { fireEvent, screen } from '@testing-library/react' import { beforeEach, describe, expect, it, vi } from 'vitest' diff --git a/app/src/organisms/ODD/RunningProtocol/__tests__/RunningProtocolCommandList.test.tsx b/app/src/organisms/ODD/RunningProtocol/__tests__/RunningProtocolCommandList.test.tsx index 3504d069ee5..f506dce8404 100644 --- a/app/src/organisms/ODD/RunningProtocol/__tests__/RunningProtocolCommandList.test.tsx +++ b/app/src/organisms/ODD/RunningProtocol/__tests__/RunningProtocolCommandList.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { beforeEach, describe, expect, it, vi } from 'vitest' diff --git a/app/src/organisms/ODD/RunningProtocol/__tests__/RunningProtocolSkeleton.test.tsx b/app/src/organisms/ODD/RunningProtocol/__tests__/RunningProtocolSkeleton.test.tsx index 33bc166f181..656d4d250d1 100644 --- a/app/src/organisms/ODD/RunningProtocol/__tests__/RunningProtocolSkeleton.test.tsx +++ b/app/src/organisms/ODD/RunningProtocol/__tests__/RunningProtocolSkeleton.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { screen } from '@testing-library/react' import { beforeEach, describe, expect, it } from 'vitest' diff --git a/app/src/organisms/PipetteWizardFlows/AttachProbe.tsx b/app/src/organisms/PipetteWizardFlows/AttachProbe.tsx index 24086bc6e6f..66f40287463 100644 --- a/app/src/organisms/PipetteWizardFlows/AttachProbe.tsx +++ b/app/src/organisms/PipetteWizardFlows/AttachProbe.tsx @@ -1,7 +1,8 @@ -import * as React from 'react' +import { useState } from 'react' import { css } from 'styled-components' import { Trans, useTranslation } from 'react-i18next' import { + Banner, COLORS, Flex, RESPONSIVENESS, @@ -10,7 +11,6 @@ import { TYPOGRAPHY, } from '@opentrons/components' import { LEFT, WASTE_CHUTE_CUTOUT } from '@opentrons/shared-data' -import { Banner } from '/app/atoms/Banner' import { GenericWizardTile } from '/app/molecules/GenericWizardTile' import { SimpleWizardBody, @@ -58,9 +58,7 @@ export const AttachProbe = (props: AttachProbeProps): JSX.Element | null => { } = props const { t, i18n } = useTranslation('pipette_wizard_flows') const pipetteWizardStep = { mount, flowType, section: SECTIONS.ATTACH_PROBE } - const [showUnableToDetect, setShowUnableToDetect] = React.useState( - false - ) + const [showUnableToDetect, setShowUnableToDetect] = useState(false) const pipetteId = attachedPipettes[mount]?.serialNumber const displayName = attachedPipettes[mount]?.displayName diff --git a/app/src/organisms/PipetteWizardFlows/BeforeBeginning.tsx b/app/src/organisms/PipetteWizardFlows/BeforeBeginning.tsx index f781e435f2a..ffcb72dae18 100644 --- a/app/src/organisms/PipetteWizardFlows/BeforeBeginning.tsx +++ b/app/src/organisms/PipetteWizardFlows/BeforeBeginning.tsx @@ -1,7 +1,8 @@ -import * as React from 'react' +import { useEffect } from 'react' import { Trans, useTranslation } from 'react-i18next' import { COLORS, + Banner, DIRECTION_COLUMN, Flex, SPACING, @@ -14,14 +15,13 @@ import { WEIGHT_OF_96_CHANNEL, WASTE_CHUTE_CUTOUT, } from '@opentrons/shared-data' -import { Banner } from '/app/atoms/Banner' import { SimpleWizardBody, SimpleWizardInProgressBody, } from '/app/molecules/SimpleWizardBody' import { GenericWizardTile } from '/app/molecules/GenericWizardTile' import { WizardRequiredEquipmentList } from '/app/molecules/WizardRequiredEquipmentList' -import { usePipetteNameSpecs } from '/app/resources/instruments/hooks' +import { usePipetteNameSpecs } from '/app/local-resources/instruments' import { CALIBRATION_PROBE, FLOWS, @@ -79,7 +79,7 @@ export const BeforeBeginning = ( createdMaintenanceRunId, } = props const { t } = useTranslation(['pipette_wizard_flows', 'shared']) - React.useEffect(() => { + useEffect(() => { if (createdMaintenanceRunId == null) { createMaintenanceRun({}) } diff --git a/app/src/organisms/PipetteWizardFlows/Carriage.tsx b/app/src/organisms/PipetteWizardFlows/Carriage.tsx index cdd75df4ffe..f4103cf424d 100644 --- a/app/src/organisms/PipetteWizardFlows/Carriage.tsx +++ b/app/src/organisms/PipetteWizardFlows/Carriage.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { Trans, useTranslation } from 'react-i18next' import capitalize from 'lodash/capitalize' import { diff --git a/app/src/organisms/PipetteWizardFlows/CheckPipetteButton.tsx b/app/src/organisms/PipetteWizardFlows/CheckPipetteButton.tsx index 83c5b1507fd..2300204b65b 100644 --- a/app/src/organisms/PipetteWizardFlows/CheckPipetteButton.tsx +++ b/app/src/organisms/PipetteWizardFlows/CheckPipetteButton.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useInstrumentsQuery } from '@opentrons/react-api-client' import { PrimaryButton } from '@opentrons/components' import { SmallButton } from '/app/atoms/buttons' diff --git a/app/src/organisms/PipetteWizardFlows/ChoosePipette.tsx b/app/src/organisms/PipetteWizardFlows/ChoosePipette.tsx index 8f146e5b57d..f8d31f1adec 100644 --- a/app/src/organisms/PipetteWizardFlows/ChoosePipette.tsx +++ b/app/src/organisms/PipetteWizardFlows/ChoosePipette.tsx @@ -35,13 +35,13 @@ import { } from '@opentrons/shared-data' import { i18n } from '/app/i18n' import { getIsOnDevice } from '/app/redux/config' -import { getTopPortalEl } from '../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import { SmallButton } from '/app/atoms/buttons' import { WizardHeader } from '/app/molecules/WizardHeader' import { ModalContentOneColSimpleButtons } from '/app/molecules/InterventionModal' import singleChannelAndEightChannel from '/app/assets/images/change-pip/1_and_8_channel.png' import ninetySixChannel from '/app/assets/images/change-pip/ninety-six-channel.png' -import { useAttachedPipettesFromInstrumentsQuery } from '../Devices/hooks' +import { useAttachedPipettesFromInstrumentsQuery } from '/app/resources/instruments' import { ExitModal } from './ExitModal' import { FLOWS } from './constants' import { getIsGantryEmpty } from './utils' diff --git a/app/src/organisms/PipetteWizardFlows/DetachPipette.tsx b/app/src/organisms/PipetteWizardFlows/DetachPipette.tsx index 8d5db88c879..46e5f92e389 100644 --- a/app/src/organisms/PipetteWizardFlows/DetachPipette.tsx +++ b/app/src/organisms/PipetteWizardFlows/DetachPipette.tsx @@ -6,18 +6,18 @@ import { useInstrumentsQuery } from '@opentrons/react-api-client' import { ALIGN_CENTER, ALIGN_FLEX_END, + Banner, Btn, COLORS, Flex, JUSTIFY_SPACE_BETWEEN, + LegacyStyledText, PrimaryButton, RESPONSIVENESS, SIZE_1, SPACING, - LegacyStyledText, TYPOGRAPHY, } from '@opentrons/components' -import { Banner } from '/app/atoms/Banner' import { GenericWizardTile } from '/app/molecules/GenericWizardTile' import { SimpleWizardBody, diff --git a/app/src/organisms/PipetteWizardFlows/DetachProbe.tsx b/app/src/organisms/PipetteWizardFlows/DetachProbe.tsx index 03603bd640c..833f28d45dc 100644 --- a/app/src/organisms/PipetteWizardFlows/DetachProbe.tsx +++ b/app/src/organisms/PipetteWizardFlows/DetachProbe.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { LegacyStyledText } from '@opentrons/components' import { GenericWizardTile } from '/app/molecules/GenericWizardTile' diff --git a/app/src/organisms/PipetteWizardFlows/ExitModal.tsx b/app/src/organisms/PipetteWizardFlows/ExitModal.tsx index 90430769d8f..d2bc3517643 100644 --- a/app/src/organisms/PipetteWizardFlows/ExitModal.tsx +++ b/app/src/organisms/PipetteWizardFlows/ExitModal.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import capitalize from 'lodash/capitalize' import { useTranslation } from 'react-i18next' import { diff --git a/app/src/organisms/PipetteWizardFlows/MountPipette.tsx b/app/src/organisms/PipetteWizardFlows/MountPipette.tsx index 6234d5247a0..9ba1b036785 100644 --- a/app/src/organisms/PipetteWizardFlows/MountPipette.tsx +++ b/app/src/organisms/PipetteWizardFlows/MountPipette.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useTranslation } from 'react-i18next' import { SINGLE_MOUNT_PIPETTES, @@ -6,12 +6,12 @@ import { } from '@opentrons/shared-data' import { Flex, + Banner, JUSTIFY_CENTER, SIZE_1, SPACING, LegacyStyledText, } from '@opentrons/components' -import { Banner } from '/app/atoms/Banner' import { GenericWizardTile } from '/app/molecules/GenericWizardTile' import { Skeleton } from '/app/atoms/Skeleton' import { CheckPipetteButton } from './CheckPipetteButton' diff --git a/app/src/organisms/PipetteWizardFlows/MountingPlate.tsx b/app/src/organisms/PipetteWizardFlows/MountingPlate.tsx index a09ee3d2c1b..aaa6178fc79 100644 --- a/app/src/organisms/PipetteWizardFlows/MountingPlate.tsx +++ b/app/src/organisms/PipetteWizardFlows/MountingPlate.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { Trans, useTranslation } from 'react-i18next' import { LEFT } from '@opentrons/shared-data' import { COLORS, SPACING, LegacyStyledText } from '@opentrons/components' diff --git a/app/src/organisms/PipetteWizardFlows/ProbeNotAttached.tsx b/app/src/organisms/PipetteWizardFlows/ProbeNotAttached.tsx index d959065ac49..d98fde280f7 100644 --- a/app/src/organisms/PipetteWizardFlows/ProbeNotAttached.tsx +++ b/app/src/organisms/PipetteWizardFlows/ProbeNotAttached.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { useTranslation } from 'react-i18next' import { ALIGN_CENTER, @@ -32,7 +32,7 @@ export const ProbeNotAttached = ( 'branded', ]) const { isOnDevice, handleOnClick, setShowUnableToDetect } = props - const [numberOfTryAgains, setNumberOfTryAgains] = React.useState(0) + const [numberOfTryAgains, setNumberOfTryAgains] = useState(0) return ( ) => { diff --git a/app/src/organisms/PipetteWizardFlows/__tests__/DetachPipette.test.tsx b/app/src/organisms/PipetteWizardFlows/__tests__/DetachPipette.test.tsx index 9e30b7c2bf4..d7777ed368c 100644 --- a/app/src/organisms/PipetteWizardFlows/__tests__/DetachPipette.test.tsx +++ b/app/src/organisms/PipetteWizardFlows/__tests__/DetachPipette.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, beforeEach, vi, expect } from 'vitest' diff --git a/app/src/organisms/PipetteWizardFlows/__tests__/DetachProbe.test.tsx b/app/src/organisms/PipetteWizardFlows/__tests__/DetachProbe.test.tsx index e6d3262c76f..059846aebb5 100644 --- a/app/src/organisms/PipetteWizardFlows/__tests__/DetachProbe.test.tsx +++ b/app/src/organisms/PipetteWizardFlows/__tests__/DetachProbe.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, beforeEach, vi, expect } from 'vitest' diff --git a/app/src/organisms/PipetteWizardFlows/__tests__/ExitModal.test.tsx b/app/src/organisms/PipetteWizardFlows/__tests__/ExitModal.test.tsx index db576781700..a30407379a2 100644 --- a/app/src/organisms/PipetteWizardFlows/__tests__/ExitModal.test.tsx +++ b/app/src/organisms/PipetteWizardFlows/__tests__/ExitModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, beforeEach, vi, expect } from 'vitest' diff --git a/app/src/organisms/PipetteWizardFlows/__tests__/MountPipette.test.tsx b/app/src/organisms/PipetteWizardFlows/__tests__/MountPipette.test.tsx index aa7d50f534c..4c5d9dda2e0 100644 --- a/app/src/organisms/PipetteWizardFlows/__tests__/MountPipette.test.tsx +++ b/app/src/organisms/PipetteWizardFlows/__tests__/MountPipette.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, beforeEach, vi } from 'vitest' diff --git a/app/src/organisms/PipetteWizardFlows/__tests__/MountingPlate.test.tsx b/app/src/organisms/PipetteWizardFlows/__tests__/MountingPlate.test.tsx index b4d91966dbb..38744ad1bab 100644 --- a/app/src/organisms/PipetteWizardFlows/__tests__/MountingPlate.test.tsx +++ b/app/src/organisms/PipetteWizardFlows/__tests__/MountingPlate.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, waitFor, screen } from '@testing-library/react' import { describe, it, expect, beforeEach, vi } from 'vitest' diff --git a/app/src/organisms/PipetteWizardFlows/__tests__/Results.test.tsx b/app/src/organisms/PipetteWizardFlows/__tests__/Results.test.tsx index e2d93c7e4f2..3382ac401a0 100644 --- a/app/src/organisms/PipetteWizardFlows/__tests__/Results.test.tsx +++ b/app/src/organisms/PipetteWizardFlows/__tests__/Results.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { act, fireEvent, screen, waitFor } from '@testing-library/react' import { describe, it, expect, vi, beforeEach } from 'vitest' diff --git a/app/src/organisms/PipetteWizardFlows/__tests__/UnskippableModal.test.tsx b/app/src/organisms/PipetteWizardFlows/__tests__/UnskippableModal.test.tsx index 6b4928a9581..a290e689809 100644 --- a/app/src/organisms/PipetteWizardFlows/__tests__/UnskippableModal.test.tsx +++ b/app/src/organisms/PipetteWizardFlows/__tests__/UnskippableModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, vi } from 'vitest' diff --git a/app/src/organisms/PipetteWizardFlows/__tests__/hooks.test.tsx b/app/src/organisms/PipetteWizardFlows/__tests__/hooks.test.tsx index 6b1f8964459..f44bd96fc6e 100644 --- a/app/src/organisms/PipetteWizardFlows/__tests__/hooks.test.tsx +++ b/app/src/organisms/PipetteWizardFlows/__tests__/hooks.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { describe, it, beforeEach, vi, afterEach, expect } from 'vitest' import { I18nextProvider } from 'react-i18next' import { renderHook } from '@testing-library/react' diff --git a/app/src/organisms/PipetteWizardFlows/getPipetteWizardStepsForProtocol.ts b/app/src/organisms/PipetteWizardFlows/getPipetteWizardStepsForProtocol.ts index 50e271082e0..296c428bc75 100644 --- a/app/src/organisms/PipetteWizardFlows/getPipetteWizardStepsForProtocol.ts +++ b/app/src/organisms/PipetteWizardFlows/getPipetteWizardStepsForProtocol.ts @@ -2,7 +2,7 @@ import { LEFT, RIGHT } from '@opentrons/shared-data' import { FLOWS, SECTIONS } from './constants' import type { LoadedPipette } from '@opentrons/shared-data' import type { Mount } from '/app/redux/pipettes/types' -import type { AttachedPipettesFromInstrumentsQuery } from '../Devices/hooks' +import type { AttachedPipettesFromInstrumentsQuery } from '/app/resources/instruments' import type { PipetteWizardStep } from './types' const calibrateAlreadyAttachedPipetteOn = ( diff --git a/app/src/organisms/PipetteWizardFlows/hooks.tsx b/app/src/organisms/PipetteWizardFlows/hooks.tsx index 8d727aeeb75..4d07586c9de 100644 --- a/app/src/organisms/PipetteWizardFlows/hooks.tsx +++ b/app/src/organisms/PipetteWizardFlows/hooks.tsx @@ -3,7 +3,7 @@ import capitalize from 'lodash/capitalize' import { LEFT, RIGHT, SINGLE_MOUNT_PIPETTES } from '@opentrons/shared-data' import { FLOWS } from './constants' import type { LoadedPipette, PipetteMount } from '@opentrons/shared-data' -import type { AttachedPipettesFromInstrumentsQuery } from '../Devices/hooks' +import type { AttachedPipettesFromInstrumentsQuery } from '/app/resources/instruments' import type { PipetteWizardFlow, SelectablePipettes } from './types' interface PipetteFlowWizardHeaderTextProps { diff --git a/app/src/organisms/PipetteWizardFlows/index.tsx b/app/src/organisms/PipetteWizardFlows/index.tsx index 3388d39dbfb..39022810b56 100644 --- a/app/src/organisms/PipetteWizardFlows/index.tsx +++ b/app/src/organisms/PipetteWizardFlows/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useMemo, useState, useEffect } from 'react' import { createPortal } from 'react-dom' import { useSelector } from 'react-redux' import { useTranslation } from 'react-i18next' @@ -21,12 +21,12 @@ import { useChainMaintenanceCommands, useNotifyCurrentMaintenanceRun, } from '/app/resources/maintenance_runs' -import { getTopPortalEl } from '../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import { WizardHeader } from '/app/molecules/WizardHeader' import { FirmwareUpdateModal } from '../FirmwareUpdateModal' import { getIsOnDevice } from '/app/redux/config' import { SimpleWizardBody } from '/app/molecules/SimpleWizardBody' -import { useAttachedPipettesFromInstrumentsQuery } from '../Devices/hooks' +import { useAttachedPipettesFromInstrumentsQuery } from '/app/resources/instruments' import { usePipetteFlowWizardHeaderText } from './hooks' import { getPipetteWizardSteps } from './getPipetteWizardSteps' import { getPipetteWizardStepsForProtocol } from './getPipetteWizardStepsForProtocol' @@ -70,13 +70,13 @@ export const PipetteWizardFlows = ( const { t } = useTranslation('pipette_wizard_flows') const attachedPipettes = useAttachedPipettesFromInstrumentsQuery() - const memoizedPipetteInfo = React.useMemo(() => props.pipetteInfo ?? null, []) - const isGantryEmpty = React.useMemo( + const memoizedPipetteInfo = useMemo(() => props.pipetteInfo ?? null, []) + const isGantryEmpty = useMemo( () => attachedPipettes[LEFT] == null && attachedPipettes[RIGHT] == null, [] ) - const pipetteWizardSteps = React.useMemo( + const pipetteWizardSteps = useMemo( () => memoizedPipetteInfo == null ? getPipetteWizardSteps(flowType, mount, selectedPipette, isGantryEmpty) @@ -91,14 +91,12 @@ export const PipetteWizardFlows = ( pipette => pipette.mount === mount ) const host = useHost() - const [currentStepIndex, setCurrentStepIndex] = React.useState(0) + const [currentStepIndex, setCurrentStepIndex] = useState(0) const totalStepCount = pipetteWizardSteps != null ? pipetteWizardSteps.length - 1 : 0 const currentStep = pipetteWizardSteps?.[currentStepIndex] ?? null - const [isFetchingPipettes, setIsFetchingPipettes] = React.useState( - false - ) - const memoizedAttachedPipettes = React.useMemo(() => attachedPipettes, []) + const [isFetchingPipettes, setIsFetchingPipettes] = useState(false) + const memoizedAttachedPipettes = useMemo(() => attachedPipettes, []) const hasCalData = memoizedAttachedPipettes[mount]?.data.calibratedOffset?.last_modified != null @@ -111,8 +109,8 @@ export const PipetteWizardFlows = ( attachedPipettes: memoizedAttachedPipettes, pipetteInfo: memoizedPipetteInfo, }) - const memoizedWizardTitle = React.useMemo(() => wizardTitle, []) - const [createdMaintenanceRunId, setCreatedMaintenanceRunId] = React.useState< + const memoizedWizardTitle = useMemo(() => wizardTitle, []) + const [createdMaintenanceRunId, setCreatedMaintenanceRunId] = useState< string | null >(null) // we should start checking for run deletion only after the maintenance run is created @@ -120,7 +118,7 @@ export const PipetteWizardFlows = ( const [ monitorMaintenanceRunForDeletion, setMonitorMaintenanceRunForDeletion, - ] = React.useState(false) + ] = useState(false) const goBack = (): void => { setCurrentStepIndex( @@ -151,7 +149,7 @@ export const PipetteWizardFlows = ( // this will close the modal in case the run was deleted by the terminate // activity modal on the ODD - React.useEffect(() => { + useEffect(() => { if ( createdMaintenanceRunId !== null && maintenanceRunData?.data.id === createdMaintenanceRunId @@ -171,10 +169,8 @@ export const PipetteWizardFlows = ( closeFlow, ]) - const [errorMessage, setShowErrorMessage] = React.useState( - null - ) - const [isExiting, setIsExiting] = React.useState(false) + const [errorMessage, setShowErrorMessage] = useState(null) + const [isExiting, setIsExiting] = useState(false) const proceed = (): void => { if (!isCommandMutationLoading) { setCurrentStepIndex( @@ -185,12 +181,13 @@ export const PipetteWizardFlows = ( } } const handleClose = (): void => { - if (onComplete != null) onComplete() + if (onComplete != null) { + onComplete() + } if (maintenanceRunData != null) { deleteMaintenanceRun(maintenanceRunData?.data.id) - } else { - closeFlow() } + closeFlow() } const { @@ -213,13 +210,13 @@ export const PipetteWizardFlows = ( [{ commandType: 'home' as const, params: {} }], false ) - .then(() => { - handleClose() - }) .catch(error => { setIsExiting(true) setShowErrorMessage(error.message as string) }) + .finally(() => { + handleClose() + }) } } const { diff --git a/app/src/organisms/PipetteWizardFlows/types.ts b/app/src/organisms/PipetteWizardFlows/types.ts index 587e7d84e1f..a8785e8a31c 100644 --- a/app/src/organisms/PipetteWizardFlows/types.ts +++ b/app/src/organisms/PipetteWizardFlows/types.ts @@ -1,7 +1,7 @@ import type { SECTIONS, FLOWS } from './constants' import type { useCreateCommandMutation } from '@opentrons/react-api-client' import type { PipetteMount, CreateCommand } from '@opentrons/shared-data' -import type { AttachedPipettesFromInstrumentsQuery } from '../Devices/hooks/useAttachedPipettesFromInstrumentsQuery' +import type { AttachedPipettesFromInstrumentsQuery } from '/app/resources/instruments' export type PipetteWizardStep = | BeforeBeginningStep diff --git a/app/src/organisms/PipetteWizardFlows/utils.tsx b/app/src/organisms/PipetteWizardFlows/utils.tsx index 1eb2ad83632..98a2adeabb4 100644 --- a/app/src/organisms/PipetteWizardFlows/utils.tsx +++ b/app/src/organisms/PipetteWizardFlows/utils.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { css } from 'styled-components' import { LEFT, RIGHT } from '@opentrons/shared-data' import { SPACING } from '@opentrons/components' @@ -24,7 +23,7 @@ import zAxisDetach96 from '/app/assets/videos/pipette-wizard-flows/Pipette_Zaxis import attachProbe96 from '/app/assets/videos/pipette-wizard-flows/Pipette_Attach_Probe_96.webm' import detachProbe96 from '/app/assets/videos/pipette-wizard-flows/Pipette_Detach_Probe_96.webm' -import type { AttachedPipettesFromInstrumentsQuery } from '../Devices/hooks' +import type { AttachedPipettesFromInstrumentsQuery } from '/app/resources/instruments' import type { PipetteWizardFlow, PipetteWizardStep } from './types' export function getIsGantryEmpty( diff --git a/app/src/organisms/RunTimeControl/hooks.ts b/app/src/organisms/RunTimeControl/hooks.ts index 5e519baa2b0..d2ddfaf4744 100644 --- a/app/src/organisms/RunTimeControl/hooks.ts +++ b/app/src/organisms/RunTimeControl/hooks.ts @@ -6,8 +6,8 @@ import { useRunStatus, useCloneRun, DEFAULT_RUN_QUERY_REFETCH_INTERVAL, + useMostRecentCompletedAnalysis, } from '/app/resources/runs' -import { useMostRecentCompletedAnalysis } from '../LabwarePositionCheck/useMostRecentCompletedAnalysis' import type { UseQueryOptions } from 'react-query' import type { RunStatus, Run, RunData } from '@opentrons/api-client' diff --git a/app/src/organisms/RunTimeControl/index.ts b/app/src/organisms/RunTimeControl/index.ts new file mode 100644 index 00000000000..fc78d35129c --- /dev/null +++ b/app/src/organisms/RunTimeControl/index.ts @@ -0,0 +1 @@ +export * from './hooks' diff --git a/app/src/organisms/TakeoverModal/TakeoverModal.tsx b/app/src/organisms/TakeoverModal/TakeoverModal.tsx index 713df38cdc7..8f6441124a7 100644 --- a/app/src/organisms/TakeoverModal/TakeoverModal.tsx +++ b/app/src/organisms/TakeoverModal/TakeoverModal.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { createPortal } from 'react-dom' import { useTranslation } from 'react-i18next' @@ -14,7 +14,7 @@ import { TYPOGRAPHY, } from '@opentrons/components' -import { getTopPortalEl } from '../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import { SmallButton } from '/app/atoms/buttons' import { OddModal } from '/app/molecules/OddModal' diff --git a/app/src/organisms/TakeoverModal/__tests__/MaintenanceRunTakeover.test.tsx b/app/src/organisms/TakeoverModal/__tests__/MaintenanceRunTakeover.test.tsx index c67518c2ecc..94a59aa903a 100644 --- a/app/src/organisms/TakeoverModal/__tests__/MaintenanceRunTakeover.test.tsx +++ b/app/src/organisms/TakeoverModal/__tests__/MaintenanceRunTakeover.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { screen } from '@testing-library/react' import { describe, it, expect, vi, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' diff --git a/app/src/organisms/TakeoverModal/__tests__/TakeoverModal.test.tsx b/app/src/organisms/TakeoverModal/__tests__/TakeoverModal.test.tsx index 96314e1b6ce..a902544e4a0 100644 --- a/app/src/organisms/TakeoverModal/__tests__/TakeoverModal.test.tsx +++ b/app/src/organisms/TakeoverModal/__tests__/TakeoverModal.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, expect, vi, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' diff --git a/app/src/organisms/TakeoverModal/useMaintenanceRunTakeover.ts b/app/src/organisms/TakeoverModal/useMaintenanceRunTakeover.ts index 3c6373dee07..f166cc9a9d2 100644 --- a/app/src/organisms/TakeoverModal/useMaintenanceRunTakeover.ts +++ b/app/src/organisms/TakeoverModal/useMaintenanceRunTakeover.ts @@ -1,7 +1,7 @@ -import * as React from 'react' +import { useContext } from 'react' import { MaintenanceRunContext } from './MaintenanceRunStatusProvider' import type { MaintenanceRunStatus } from './MaintenanceRunStatusProvider' export function useMaintenanceRunTakeover(): MaintenanceRunStatus { - return React.useContext(MaintenanceRunContext) + return useContext(MaintenanceRunContext) } diff --git a/app/src/organisms/ToasterOven/ToasterContext.ts b/app/src/organisms/ToasterOven/ToasterContext.ts index 0634a22ae5d..3467da62872 100644 --- a/app/src/organisms/ToasterOven/ToasterContext.ts +++ b/app/src/organisms/ToasterOven/ToasterContext.ts @@ -1,4 +1,4 @@ -import * as React from 'react' +import { createContext } from 'react' import type { ToastProps, @@ -25,7 +25,7 @@ export interface ToasterContextType { makeSnackbar: MakeSnackbar } -export const ToasterContext = React.createContext({ +export const ToasterContext = createContext({ eatToast: () => {}, makeToast: () => '', makeSnackbar: () => {}, diff --git a/app/src/organisms/ToasterOven/hooks.ts b/app/src/organisms/ToasterOven/hooks.ts index 5c37a0e4cb0..555a08768bb 100644 --- a/app/src/organisms/ToasterOven/hooks.ts +++ b/app/src/organisms/ToasterOven/hooks.ts @@ -1,11 +1,11 @@ -import * as React from 'react' +import { useContext } from 'react' import { ToasterContext } from './ToasterContext' import type { ToasterContextType } from './ToasterContext' export function useToaster(): ToasterContextType { - const { eatToast, makeToast, makeSnackbar } = React.useContext(ToasterContext) + const { eatToast, makeToast, makeSnackbar } = useContext(ToasterContext) return { eatToast, makeToast, makeSnackbar } } diff --git a/app/src/organisms/UpdateRobotSoftware/CheckUpdates.tsx b/app/src/organisms/UpdateRobotSoftware/CheckUpdates.tsx index e23ff5417f6..9df29bc6280 100644 --- a/app/src/organisms/UpdateRobotSoftware/CheckUpdates.tsx +++ b/app/src/organisms/UpdateRobotSoftware/CheckUpdates.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { diff --git a/app/src/organisms/UpdateRobotSoftware/CompleteUpdateSoftware.tsx b/app/src/organisms/UpdateRobotSoftware/CompleteUpdateSoftware.tsx index f75a1777146..9f29911ac88 100644 --- a/app/src/organisms/UpdateRobotSoftware/CompleteUpdateSoftware.tsx +++ b/app/src/organisms/UpdateRobotSoftware/CompleteUpdateSoftware.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { diff --git a/app/src/organisms/UpdateRobotSoftware/ErrorUpdateSoftware.tsx b/app/src/organisms/UpdateRobotSoftware/ErrorUpdateSoftware.tsx index 22324c25b95..f1629e15b64 100644 --- a/app/src/organisms/UpdateRobotSoftware/ErrorUpdateSoftware.tsx +++ b/app/src/organisms/UpdateRobotSoftware/ErrorUpdateSoftware.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useTranslation } from 'react-i18next' import { diff --git a/app/src/organisms/UpdateRobotSoftware/NoUpdateFound.tsx b/app/src/organisms/UpdateRobotSoftware/NoUpdateFound.tsx index 35eed9fcc1b..27b466f06d9 100644 --- a/app/src/organisms/UpdateRobotSoftware/NoUpdateFound.tsx +++ b/app/src/organisms/UpdateRobotSoftware/NoUpdateFound.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { diff --git a/app/src/organisms/UpdateRobotSoftware/UpdateSoftware.tsx b/app/src/organisms/UpdateRobotSoftware/UpdateSoftware.tsx index 67c0cd1a3bc..9c499d8a4f3 100644 --- a/app/src/organisms/UpdateRobotSoftware/UpdateSoftware.tsx +++ b/app/src/organisms/UpdateRobotSoftware/UpdateSoftware.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { diff --git a/app/src/organisms/UpdateRobotSoftware/__tests__/CheckUpdates.test.tsx b/app/src/organisms/UpdateRobotSoftware/__tests__/CheckUpdates.test.tsx index 80bef11873f..d56c7305a0d 100644 --- a/app/src/organisms/UpdateRobotSoftware/__tests__/CheckUpdates.test.tsx +++ b/app/src/organisms/UpdateRobotSoftware/__tests__/CheckUpdates.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { screen } from '@testing-library/react' import { describe, it } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' diff --git a/app/src/organisms/UpdateRobotSoftware/__tests__/CompleteUpdateSoftware.test.tsx b/app/src/organisms/UpdateRobotSoftware/__tests__/CompleteUpdateSoftware.test.tsx index ab9f20849e1..b6b91424b92 100644 --- a/app/src/organisms/UpdateRobotSoftware/__tests__/CompleteUpdateSoftware.test.tsx +++ b/app/src/organisms/UpdateRobotSoftware/__tests__/CompleteUpdateSoftware.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { screen } from '@testing-library/react' import { describe, it, expect, vi, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' diff --git a/app/src/organisms/UpdateRobotSoftware/__tests__/ErrorUpdateSoftware.test.tsx b/app/src/organisms/UpdateRobotSoftware/__tests__/ErrorUpdateSoftware.test.tsx index eef021fe01e..d1706a4bf18 100644 --- a/app/src/organisms/UpdateRobotSoftware/__tests__/ErrorUpdateSoftware.test.tsx +++ b/app/src/organisms/UpdateRobotSoftware/__tests__/ErrorUpdateSoftware.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { screen } from '@testing-library/react' import { describe, it, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' diff --git a/app/src/organisms/UpdateRobotSoftware/__tests__/NoUpdateFound.test.tsx b/app/src/organisms/UpdateRobotSoftware/__tests__/NoUpdateFound.test.tsx index 5e6fec3bdca..2f276dc2f20 100644 --- a/app/src/organisms/UpdateRobotSoftware/__tests__/NoUpdateFound.test.tsx +++ b/app/src/organisms/UpdateRobotSoftware/__tests__/NoUpdateFound.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { describe, it, vi, expect } from 'vitest' import '@testing-library/jest-dom/vitest' diff --git a/app/src/organisms/UpdateRobotSoftware/__tests__/UpdateRobotSoftware.test.tsx b/app/src/organisms/UpdateRobotSoftware/__tests__/UpdateRobotSoftware.test.tsx index 86bbb93b1ec..9df863fe5ce 100644 --- a/app/src/organisms/UpdateRobotSoftware/__tests__/UpdateRobotSoftware.test.tsx +++ b/app/src/organisms/UpdateRobotSoftware/__tests__/UpdateRobotSoftware.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { screen } from '@testing-library/react' import { describe, it, vi, beforeEach, expect } from 'vitest' import '@testing-library/jest-dom/vitest' diff --git a/app/src/organisms/UpdateRobotSoftware/__tests__/UpdateSoftware.test.tsx b/app/src/organisms/UpdateRobotSoftware/__tests__/UpdateSoftware.test.tsx index 2a54550eae2..93deeb27956 100644 --- a/app/src/organisms/UpdateRobotSoftware/__tests__/UpdateSoftware.test.tsx +++ b/app/src/organisms/UpdateRobotSoftware/__tests__/UpdateSoftware.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { screen } from '@testing-library/react' import { describe, it, beforeEach } from 'vitest' import '@testing-library/jest-dom/vitest' diff --git a/app/src/organisms/UpdateRobotSoftware/index.tsx b/app/src/organisms/UpdateRobotSoftware/index.tsx index 42b907ddb17..785494410d4 100644 --- a/app/src/organisms/UpdateRobotSoftware/index.tsx +++ b/app/src/organisms/UpdateRobotSoftware/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, useEffect } from 'react' import { useDispatch, useSelector } from 'react-redux' import type { Dispatch } from '/app/redux/types' @@ -41,9 +41,9 @@ export function UpdateRobotSoftware( step: null, error: null, } - const [isDownloading, setIsDownloading] = React.useState(false) + const [isDownloading, setIsDownloading] = useState(false) - React.useEffect(() => { + useEffect(() => { // check isDownloading to avoid dispatching again if (!isDownloading) { setIsDownloading(true) diff --git a/app/src/organisms/WellSelection/index.tsx b/app/src/organisms/WellSelection/index.tsx index 19cd9e04363..656745c0056 100644 --- a/app/src/organisms/WellSelection/index.tsx +++ b/app/src/organisms/WellSelection/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import reduce from 'lodash/reduce' import { COLORS, Labware, RobotCoordinateSpace } from '@opentrons/components' @@ -33,7 +33,7 @@ export function WellSelection(props: WellSelectionProps): JSX.Element { selectWells, channels, } = props - const [highlightedWells, setHighlightedWells] = React.useState({}) + const [highlightedWells, setHighlightedWells] = useState({}) const _wellsFromSelected: ( selectedWells: WellGroup diff --git a/app/src/pages/Desktop/AppSettings/AdvancedSettings.tsx b/app/src/pages/Desktop/AppSettings/AdvancedSettings.tsx index 686e64ce782..59439a6a088 100644 --- a/app/src/pages/Desktop/AppSettings/AdvancedSettings.tsx +++ b/app/src/pages/Desktop/AppSettings/AdvancedSettings.tsx @@ -1,6 +1,16 @@ -import * as React from 'react' -import { Box, SPACING } from '@opentrons/components' +import { css } from 'styled-components' + +import { + Box, + DIRECTION_COLUMN, + Flex, + RadioGroup, + SPACING, + TYPOGRAPHY, +} from '@opentrons/components' + import { Divider } from '/app/atoms/structure' +import { i18n } from '/app/i18n' import { ClearUnavailableRobots, EnableDevTools, @@ -12,7 +22,8 @@ import { U2EInformation, UpdatedChannel, AdditionalCustomLabwareSourceFolder, -} from '/app/organisms/AdvancedSettings' +} from '/app/organisms/Desktop/AdvancedSettings' +import { useFeatureFlag } from '/app/redux/config' export function AdvancedSettings(): JSX.Element { return ( @@ -37,7 +48,36 @@ export function AdvancedSettings(): JSX.Element { + {/* TODO(bh, 2024-09-23): remove when localization setting designs implemented */} + ) } + +function LocalizationSetting(): JSX.Element | null { + const enableLocalization = useFeatureFlag('enableLocalization') + + return enableLocalization ? ( + <> + + + ) => { + void i18n.changeLanguage(event.currentTarget.value) + }} + options={[ + { name: 'EN', value: 'en' }, + { name: 'CN', value: 'zh' }, + ]} + /> + + + ) : null +} diff --git a/app/src/pages/Desktop/AppSettings/GeneralSettings.tsx b/app/src/pages/Desktop/AppSettings/GeneralSettings.tsx index 45918056041..82960177c9b 100644 --- a/app/src/pages/Desktop/AppSettings/GeneralSettings.tsx +++ b/app/src/pages/Desktop/AppSettings/GeneralSettings.tsx @@ -1,5 +1,5 @@ // app info card with version and updated -import * as React from 'react' +import { useState } from 'react' import { createPortal } from 'react-dom' import { useTranslation } from 'react-i18next' import { useSelector, useDispatch } from 'react-redux' @@ -7,6 +7,7 @@ import { useSelector, useDispatch } from 'react-redux' import { ALIGN_CENTER, ALIGN_START, + Banner, Box, COLORS, DIRECTION_COLUMN, @@ -24,7 +25,6 @@ import { import { TertiaryButton, ToggleButton } from '/app/atoms/buttons' import { ExternalLink } from '/app/atoms/Link/ExternalLink' import { Divider } from '/app/atoms/structure' -import { Banner } from '/app/atoms/Banner' import { CURRENT_VERSION, getAvailableShellUpdate, @@ -40,10 +40,10 @@ import { useTrackEvent, ANALYTICS_APP_UPDATE_NOTIFICATIONS_TOGGLED, } from '/app/redux/analytics' -import { UpdateAppModal } from '/app/organisms/UpdateAppModal' -import { PreviousVersionModal } from '/app/organisms/AppSettings/PreviousVersionModal' -import { ConnectRobotSlideout } from '/app/organisms/AppSettings/ConnectRobotSlideout' -import { getTopPortalEl } from '../../../App/portal' +import { UpdateAppModal } from '/app/organisms/Desktop/UpdateAppModal' +import { PreviousVersionModal } from '/app/organisms/Desktop/AppSettings/PreviousVersionModal' +import { ConnectRobotSlideout } from '/app/organisms/Desktop/AppSettings/ConnectRobotSlideout' +import { getTopPortalEl } from '/app/App/portal' import type { Dispatch, State } from '/app/redux/types' @@ -60,22 +60,21 @@ export function GeneralSettings(): JSX.Element { const [ showPreviousVersionModal, setShowPreviousVersionModal, - ] = React.useState(false) + ] = useState(false) const updateAvailable = Boolean(useSelector(getAvailableShellUpdate)) - const [showUpdateBanner, setShowUpdateBanner] = React.useState( + const [showUpdateBanner, setShowUpdateBanner] = useState( updateAvailable ) - const [ - showConnectRobotSlideout, - setShowConnectRobotSlideout, - ] = React.useState(false) + const [showConnectRobotSlideout, setShowConnectRobotSlideout] = useState( + false + ) // may be enabled, disabled, or unknown (because config is loading) const updateAlertEnabled = useSelector((s: State) => { const ignored = getAlertIsPermanentlyIgnored(s, ALERT_APP_UPDATE_AVAILABLE) return ignored !== null ? !ignored : null }) - const [showUpdateModal, setShowUpdateModal] = React.useState(false) + const [showUpdateModal, setShowUpdateModal] = useState(false) const handleToggle = (): void => { if (updateAlertEnabled !== null) { dispatch( diff --git a/app/src/pages/Desktop/AppSettings/PrivacySettings.tsx b/app/src/pages/Desktop/AppSettings/PrivacySettings.tsx index b0e75b3671c..abe45b61fa6 100644 --- a/app/src/pages/Desktop/AppSettings/PrivacySettings.tsx +++ b/app/src/pages/Desktop/AppSettings/PrivacySettings.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { useSelector, useDispatch } from 'react-redux' diff --git a/app/src/pages/Desktop/AppSettings/__test__/AdvancedSettings.test.tsx b/app/src/pages/Desktop/AppSettings/__test__/AdvancedSettings.test.tsx index 2b5bcca9faf..ac4285014bb 100644 --- a/app/src/pages/Desktop/AppSettings/__test__/AdvancedSettings.test.tsx +++ b/app/src/pages/Desktop/AppSettings/__test__/AdvancedSettings.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { vi, it, describe, expect, beforeEach, afterEach } from 'vitest' import { screen } from '@testing-library/react' @@ -17,7 +16,7 @@ import { ShowLabwareOffsetSnippets, U2EInformation, UpdatedChannel, -} from '/app/organisms/AdvancedSettings' +} from '/app/organisms/Desktop/AdvancedSettings' import { AdvancedSettings } from '../AdvancedSettings' @@ -29,7 +28,7 @@ vi.mock('/app/redux/protocol-analysis') vi.mock('/app/redux/system-info') vi.mock('@opentrons/components/src/hooks') vi.mock('/app/redux/analytics') -vi.mock('/app/organisms/AdvancedSettings') +vi.mock('/app/organisms/Desktop/AdvancedSettings') const render = (): ReturnType => { return renderWithProviders( diff --git a/app/src/pages/Desktop/AppSettings/__test__/AppSettings.test.tsx b/app/src/pages/Desktop/AppSettings/__test__/AppSettings.test.tsx index 5002dec5407..da48a1c690e 100644 --- a/app/src/pages/Desktop/AppSettings/__test__/AppSettings.test.tsx +++ b/app/src/pages/Desktop/AppSettings/__test__/AppSettings.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { vi, describe, beforeEach, it, expect, afterEach } from 'vitest' import { Route } from 'react-router' import { MemoryRouter, Routes } from 'react-router-dom' @@ -10,14 +9,14 @@ import * as Config from '/app/redux/config' import { GeneralSettings } from '../GeneralSettings' import { PrivacySettings } from '../PrivacySettings' import { AdvancedSettings } from '../AdvancedSettings' -import { FeatureFlags } from '/app/organisms/AppSettings/FeatureFlags' +import { FeatureFlags } from '/app/organisms/Desktop/AppSettings/FeatureFlags' import { AppSettings } from '..' vi.mock('/app/redux/config') vi.mock('../GeneralSettings') vi.mock('../PrivacySettings') vi.mock('../AdvancedSettings') -vi.mock('/app/organisms/AppSettings/FeatureFlags') +vi.mock('/app/organisms/Desktop/AppSettings/FeatureFlags') const render = (path = '/'): ReturnType => { return renderWithProviders( diff --git a/app/src/pages/Desktop/AppSettings/__test__/GeneralSettings.test.tsx b/app/src/pages/Desktop/AppSettings/__test__/GeneralSettings.test.tsx index 5965baac3e2..5cfd02e09a8 100644 --- a/app/src/pages/Desktop/AppSettings/__test__/GeneralSettings.test.tsx +++ b/app/src/pages/Desktop/AppSettings/__test__/GeneralSettings.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { vi, it, describe, expect, beforeEach, afterEach } from 'vitest' import { screen } from '@testing-library/react' diff --git a/app/src/pages/Desktop/AppSettings/__test__/PrivacySettings.test.tsx b/app/src/pages/Desktop/AppSettings/__test__/PrivacySettings.test.tsx index 9635ae518a7..3b0aaee80a4 100644 --- a/app/src/pages/Desktop/AppSettings/__test__/PrivacySettings.test.tsx +++ b/app/src/pages/Desktop/AppSettings/__test__/PrivacySettings.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { vi, it, describe } from 'vitest' import { MemoryRouter } from 'react-router-dom' diff --git a/app/src/pages/Desktop/AppSettings/index.tsx b/app/src/pages/Desktop/AppSettings/index.tsx index f11aa930187..be7853b36b7 100644 --- a/app/src/pages/Desktop/AppSettings/index.tsx +++ b/app/src/pages/Desktop/AppSettings/index.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { useSelector } from 'react-redux' import { Navigate, useParams } from 'react-router-dom' @@ -19,11 +18,11 @@ import * as Config from '/app/redux/config' import { GeneralSettings } from './GeneralSettings' import { PrivacySettings } from './PrivacySettings' import { AdvancedSettings } from './AdvancedSettings' -import { FeatureFlags } from '/app/organisms/AppSettings/FeatureFlags' +import { FeatureFlags } from '/app/organisms/Desktop/AppSettings/FeatureFlags' import { NavTab } from '/app/molecules/NavTab' import { Line } from '/app/atoms/structure' -import type { DesktopRouteParams, AppSettingsTab } from '../../../App/types' +import type { DesktopRouteParams, AppSettingsTab } from '/app/App/types' export function AppSettings(): JSX.Element { const { t } = useTranslation('app_settings') diff --git a/app/src/pages/Desktop/Devices/CalibrationDashboard/__tests__/CalibrationDashboard.test.tsx b/app/src/pages/Desktop/Devices/CalibrationDashboard/__tests__/CalibrationDashboard.test.tsx index c8e4935bf21..a1076795490 100644 --- a/app/src/pages/Desktop/Devices/CalibrationDashboard/__tests__/CalibrationDashboard.test.tsx +++ b/app/src/pages/Desktop/Devices/CalibrationDashboard/__tests__/CalibrationDashboard.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { vi, describe, it, beforeEach } from 'vitest' import { screen } from '@testing-library/react' import { MemoryRouter, Route, Routes } from 'react-router-dom' @@ -7,23 +6,22 @@ import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' import { CalibrationDashboard } from '..' -import { - useCalibrationTaskList, - useAttachedPipettes, -} from '/app/organisms/Devices/hooks' +import { useCalibrationTaskList } from '/app/organisms/Desktop/Devices/hooks' import { useDashboardCalibratePipOffset } from '../hooks/useDashboardCalibratePipOffset' import { useDashboardCalibrateTipLength } from '../hooks/useDashboardCalibrateTipLength' import { useDashboardCalibrateDeck } from '../hooks/useDashboardCalibrateDeck' -import { expectedTaskList } from '/app/organisms/Devices/hooks/__fixtures__/taskListFixtures' +import { expectedTaskList } from '/app/organisms/Desktop/Devices/hooks/__fixtures__/taskListFixtures' import { mockLeftProtoPipette } from '/app/redux/pipettes/__fixtures__' import { useNotifyAllRunsQuery } from '/app/resources/runs' +import { useAttachedPipettes } from '/app/resources/instruments' vi.mock('/app/redux-resources/robots') -vi.mock('/app/organisms/Devices/hooks') +vi.mock('/app/organisms/Desktop/Devices/hooks') vi.mock('../hooks/useDashboardCalibratePipOffset') vi.mock('../hooks/useDashboardCalibrateTipLength') vi.mock('../hooks/useDashboardCalibrateDeck') vi.mock('/app/resources/runs') +vi.mock('/app/resources/instruments') const render = (path = '/') => { return renderWithProviders( diff --git a/app/src/pages/Desktop/Devices/CalibrationDashboard/hooks/useDashboardCalibrateDeck.tsx b/app/src/pages/Desktop/Devices/CalibrationDashboard/hooks/useDashboardCalibrateDeck.tsx index 9ce182dd812..b4f23bbdb67 100644 --- a/app/src/pages/Desktop/Devices/CalibrationDashboard/hooks/useDashboardCalibrateDeck.tsx +++ b/app/src/pages/Desktop/Devices/CalibrationDashboard/hooks/useDashboardCalibrateDeck.tsx @@ -1,19 +1,19 @@ -import * as React from 'react' +import { useRef } from 'react' import { createPortal } from 'react-dom' import { useSelector } from 'react-redux' import { useTranslation } from 'react-i18next' import { ModalShell } from '@opentrons/components' -import { getTopPortalEl } from '../../../../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import { WizardHeader } from '/app/molecules/WizardHeader' -import { CalibrateDeck } from '/app/organisms/CalibrateDeck' -import { LoadingState } from '/app/organisms/CalibrationPanels' +import { CalibrateDeck } from '/app/organisms/Desktop/CalibrateDeck' +import { LoadingState } from '/app/organisms/Desktop/CalibrationPanels' import * as RobotApi from '/app/redux/robot-api' import * as Sessions from '/app/redux/sessions' import { getDeckCalibrationSession } from '/app/redux/sessions/deck-calibration/selectors' import type { State } from '/app/redux/types' -import type { DashboardCalDeckInvoker } from '/app/organisms/Devices/hooks/useCalibrationTaskList' +import type { DashboardCalDeckInvoker } from '/app/organisms/Desktop/Devices/hooks/useCalibrationTaskList' import type { DeckCalibrationSession } from '/app/redux/sessions' import type { SessionCommandString } from '/app/redux/sessions/types' import type { RequestState } from '/app/redux/robot-api/types' @@ -26,11 +26,11 @@ const spinnerCommandBlockList: SessionCommandString[] = [ export function useDashboardCalibrateDeck( robotName: string ): [DashboardCalDeckInvoker, JSX.Element | null, boolean] { - const trackedRequestId = React.useRef(null) - const createRequestId = React.useRef(null) - const jogRequestId = React.useRef(null) - const exitBeforeDeckConfigCompletion = React.useRef(false) - const invalidateHandlerRef = React.useRef<(() => void) | undefined>() + const trackedRequestId = useRef(null) + const createRequestId = useRef(null) + const jogRequestId = useRef(null) + const exitBeforeDeckConfigCompletion = useRef(false) + const invalidateHandlerRef = useRef<(() => void) | undefined>() const { t } = useTranslation('robot_calibration') const deckCalSession: DeckCalibrationSession | null = useSelector( diff --git a/app/src/pages/Desktop/Devices/CalibrationDashboard/hooks/useDashboardCalibratePipOffset.tsx b/app/src/pages/Desktop/Devices/CalibrationDashboard/hooks/useDashboardCalibratePipOffset.tsx index b78a616f6cc..029065ea5a7 100644 --- a/app/src/pages/Desktop/Devices/CalibrationDashboard/hooks/useDashboardCalibratePipOffset.tsx +++ b/app/src/pages/Desktop/Devices/CalibrationDashboard/hooks/useDashboardCalibratePipOffset.tsx @@ -1,18 +1,18 @@ -import * as React from 'react' +import { useRef, useEffect } from 'react' import { createPortal } from 'react-dom' import { useSelector, useDispatch } from 'react-redux' import { useTranslation } from 'react-i18next' import { ModalShell } from '@opentrons/components' -import { getTopPortalEl } from '../../../../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import { WizardHeader } from '/app/molecules/WizardHeader' -import { CalibratePipetteOffset } from '/app/organisms/CalibratePipetteOffset' -import { LoadingState } from '/app/organisms/CalibrationPanels' +import { CalibratePipetteOffset } from '/app/organisms/Desktop/CalibratePipetteOffset' +import { LoadingState } from '/app/organisms/Desktop/CalibrationPanels' import * as RobotApi from '/app/redux/robot-api' import * as Sessions from '/app/redux/sessions' import { getPipetteOffsetCalibrationSession } from '/app/redux/sessions/pipette-offset-calibration/selectors' import { pipetteOffsetCalibrationStarted } from '/app/redux/analytics' -import type { DashboardCalOffsetInvoker } from '/app/organisms/Devices/hooks/useCalibrationTaskList' +import type { DashboardCalOffsetInvoker } from '/app/organisms/Desktop/Devices/hooks/useCalibrationTaskList' import type { State } from '/app/redux/types' import type { SessionCommandString, @@ -29,10 +29,10 @@ export function useDashboardCalibratePipOffset( robotName: string, onComplete: (() => unknown) | null = null ): [DashboardCalOffsetInvoker, JSX.Element | null] { - const createRequestId = React.useRef(null) - const deleteRequestId = React.useRef(null) - const jogRequestId = React.useRef(null) - const spinnerRequestId = React.useRef(null) + const createRequestId = useRef(null) + const deleteRequestId = useRef(null) + const jogRequestId = useRef(null) + const spinnerRequestId = useRef(null) const dispatch = useDispatch() const { t } = useTranslation('robot_calibration') @@ -112,7 +112,7 @@ export function useDashboardCalibratePipOffset( : null )?.status === RobotApi.PENDING - React.useEffect(() => { + useEffect(() => { if (shouldClose) { onComplete?.() deleteRequestId.current = null diff --git a/app/src/pages/Desktop/Devices/CalibrationDashboard/hooks/useDashboardCalibrateTipLength.tsx b/app/src/pages/Desktop/Devices/CalibrationDashboard/hooks/useDashboardCalibrateTipLength.tsx index d8da4848f5f..deddb78c198 100644 --- a/app/src/pages/Desktop/Devices/CalibrationDashboard/hooks/useDashboardCalibrateTipLength.tsx +++ b/app/src/pages/Desktop/Devices/CalibrationDashboard/hooks/useDashboardCalibrateTipLength.tsx @@ -1,14 +1,14 @@ -import * as React from 'react' +import { useRef, useState } from 'react' import { createPortal } from 'react-dom' import { useSelector, useDispatch } from 'react-redux' import { useTranslation } from 'react-i18next' import { ModalShell } from '@opentrons/components' -import { getTopPortalEl } from '../../../../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import { WizardHeader } from '/app/molecules/WizardHeader' -import { CalibrateTipLength } from '/app/organisms/CalibrateTipLength' -import { AskForCalibrationBlockModal } from '/app/organisms/CalibrateTipLength/AskForCalibrationBlockModal' -import { LoadingState } from '/app/organisms/CalibrationPanels' +import { CalibrateTipLength } from '/app/organisms/Desktop/CalibrateTipLength' +import { AskForCalibrationBlockModal } from '/app/organisms/Desktop/CalibrateTipLength/AskForCalibrationBlockModal' +import { LoadingState } from '/app/organisms/Desktop/CalibrationPanels' import * as RobotApi from '/app/redux/robot-api' import * as Sessions from '/app/redux/sessions' import { tipLengthCalibrationStarted } from '/app/redux/analytics' @@ -22,7 +22,7 @@ import type { TipLengthCalibrationSessionParams, } from '/app/redux/sessions/types' import type { State } from '/app/redux/types' -import type { DashboardCalTipLengthInvoker } from '/app/organisms/Devices/hooks/useCalibrationTaskList' +import type { DashboardCalTipLengthInvoker } from '/app/organisms/Desktop/Devices/hooks/useCalibrationTaskList' // tip length calibration commands for which the full page spinner should not appear const spinnerCommandBlockList: SessionCommandString[] = [ @@ -32,15 +32,15 @@ const spinnerCommandBlockList: SessionCommandString[] = [ export function useDashboardCalibrateTipLength( robotName: string ): [DashboardCalTipLengthInvoker, JSX.Element | null] { - const createRequestId = React.useRef(null) - const trackedRequestId = React.useRef(null) - const jogRequestId = React.useRef(null) - const sessionParams = React.useRef< + const createRequestId = useRef(null) + const trackedRequestId = useRef(null) + const jogRequestId = useRef(null) + const sessionParams = useRef< | (Pick & Partial>) | null >(null) - const invalidateHandlerRef = React.useRef<(() => void) | undefined>() + const invalidateHandlerRef = useRef<(() => void) | undefined>() const dispatch = useDispatch() const { t } = useTranslation('robot_calibration') @@ -86,9 +86,9 @@ export function useDashboardCalibrateTipLength( ) const configHasCalibrationBlock = useSelector(getHasCalibrationBlock) - const [showCalBlockModal, setShowCalBlockModal] = React.useState< - boolean | null - >(null) + const [showCalBlockModal, setShowCalBlockModal] = useState( + null + ) const handleStartDashboardTipLengthCalSession: DashboardCalTipLengthInvoker = props => { const { params, hasBlockModalResponse, invalidateHandler } = props diff --git a/app/src/pages/Desktop/Devices/CalibrationDashboard/index.tsx b/app/src/pages/Desktop/Devices/CalibrationDashboard/index.tsx index 2a29daa1fd4..226e44e15d8 100644 --- a/app/src/pages/Desktop/Devices/CalibrationDashboard/index.tsx +++ b/app/src/pages/Desktop/Devices/CalibrationDashboard/index.tsx @@ -1,7 +1,6 @@ -import * as React from 'react' import { useParams } from 'react-router-dom' import { ApiHostProvider } from '@opentrons/react-api-client' -import { CalibrationTaskList } from '/app/organisms/CalibrationTaskList' +import { CalibrationTaskList } from '/app/organisms/Desktop/CalibrationTaskList' import { OPENTRONS_USB } from '/app/redux/discovery' import { appShellRequestor } from '/app/redux/shell/remote' import { useDashboardCalibrateDeck } from './hooks/useDashboardCalibrateDeck' @@ -9,7 +8,7 @@ import { useDashboardCalibratePipOffset } from './hooks/useDashboardCalibratePip import { useDashboardCalibrateTipLength } from './hooks/useDashboardCalibrateTipLength' import { useRobot } from '/app/redux-resources/robots' -import type { DesktopRouteParams } from '../../../../App/types' +import type { DesktopRouteParams } from '/app/App/types' export function CalibrationDashboard(): JSX.Element { const { robotName } = useParams< diff --git a/app/src/pages/Desktop/Devices/DeviceDetails/DeviceDetailsComponent.tsx b/app/src/pages/Desktop/Devices/DeviceDetails/DeviceDetailsComponent.tsx index 63ed9ca0991..ced0067d758 100644 --- a/app/src/pages/Desktop/Devices/DeviceDetails/DeviceDetailsComponent.tsx +++ b/app/src/pages/Desktop/Devices/DeviceDetails/DeviceDetailsComponent.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useEstopQuery } from '@opentrons/react-api-client' import { ALIGN_CENTER, @@ -11,10 +10,10 @@ import { } from '@opentrons/components' import { DeviceDetailsDeckConfiguration } from '/app/organisms/DeviceDetailsDeckConfiguration' -import { RobotOverview } from '/app/organisms/Devices/RobotOverview' -import { InstrumentsAndModules } from '/app/organisms/Devices/InstrumentsAndModules' -import { RecentProtocolRuns } from '/app/organisms/Devices/RecentProtocolRuns' -import { EstopBanner } from '/app/organisms/Devices/EstopBanner' +import { RobotOverview } from '/app/organisms/Desktop/Devices/RobotOverview' +import { InstrumentsAndModules } from '/app/organisms/Desktop/Devices/InstrumentsAndModules' +import { RecentProtocolRuns } from '/app/organisms/Desktop/Devices/RecentProtocolRuns' +import { EstopBanner } from '/app/organisms/Desktop/Devices/EstopBanner' import { DISENGAGED, useEstopContext } from '/app/organisms/EmergencyStop' import { useIsFlex } from '/app/redux-resources/robots' diff --git a/app/src/pages/Desktop/Devices/DeviceDetails/__tests__/DeviceDetails.test.tsx b/app/src/pages/Desktop/Devices/DeviceDetails/__tests__/DeviceDetails.test.tsx index 4729c3d6b59..ddb4e62e8a4 100644 --- a/app/src/pages/Desktop/Devices/DeviceDetails/__tests__/DeviceDetails.test.tsx +++ b/app/src/pages/Desktop/Devices/DeviceDetails/__tests__/DeviceDetails.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { vi, it, describe, expect, beforeEach } from 'vitest' import { when } from 'vitest-when' import { screen } from '@testing-library/react' @@ -7,10 +6,10 @@ import { MemoryRouter, Route, Routes } from 'react-router-dom' import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' -import { useSyncRobotClock } from '/app/organisms/Devices/hooks' -import { InstrumentsAndModules } from '/app/organisms/Devices/InstrumentsAndModules' -import { RecentProtocolRuns } from '/app/organisms/Devices/RecentProtocolRuns' -import { RobotOverview } from '/app/organisms/Devices/RobotOverview' +import { useSyncRobotClock } from '/app/organisms/Desktop/Devices/hooks' +import { InstrumentsAndModules } from '/app/organisms/Desktop/Devices/InstrumentsAndModules' +import { RecentProtocolRuns } from '/app/organisms/Desktop/Devices/RecentProtocolRuns' +import { RobotOverview } from '/app/organisms/Desktop/Devices/RobotOverview' import { getScanning } from '/app/redux/discovery' import { mockConnectableRobot } from '/app/redux/discovery/__fixtures__' import { useRobot } from '/app/redux-resources/robots' @@ -18,10 +17,10 @@ import { DeviceDetails } from '..' import type { State } from '/app/redux/types' -vi.mock('/app/organisms/Devices/hooks') -vi.mock('/app/organisms/Devices/InstrumentsAndModules') -vi.mock('/app/organisms/Devices/RecentProtocolRuns') -vi.mock('/app/organisms/Devices/RobotOverview') +vi.mock('/app/organisms/Desktop/Devices/hooks') +vi.mock('/app/organisms/Desktop/Devices/InstrumentsAndModules') +vi.mock('/app/organisms/Desktop/Devices/RecentProtocolRuns') +vi.mock('/app/organisms/Desktop/Devices/RobotOverview') vi.mock('/app/redux/discovery') vi.mock('/app/redux-resources/robots') diff --git a/app/src/pages/Desktop/Devices/DeviceDetails/__tests__/DeviceDetailsComponent.test.tsx b/app/src/pages/Desktop/Devices/DeviceDetails/__tests__/DeviceDetailsComponent.test.tsx index a436cbe672a..e725f35fcaf 100644 --- a/app/src/pages/Desktop/Devices/DeviceDetails/__tests__/DeviceDetailsComponent.test.tsx +++ b/app/src/pages/Desktop/Devices/DeviceDetails/__tests__/DeviceDetailsComponent.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { vi, it, describe, expect, beforeEach } from 'vitest' import { when } from 'vitest-when' @@ -6,9 +5,9 @@ import { renderWithProviders } from '/app/__testing-utils__' import { useEstopQuery } from '@opentrons/react-api-client' import { i18n } from '/app/i18n' -import { InstrumentsAndModules } from '/app/organisms/Devices/InstrumentsAndModules' -import { RecentProtocolRuns } from '/app/organisms/Devices/RecentProtocolRuns' -import { RobotOverview } from '/app/organisms/Devices/RobotOverview' +import { InstrumentsAndModules } from '/app/organisms/Desktop/Devices/InstrumentsAndModules' +import { RecentProtocolRuns } from '/app/organisms/Desktop/Devices/RecentProtocolRuns' +import { RobotOverview } from '/app/organisms/Desktop/Devices/RobotOverview' import { DISENGAGED, NOT_PRESENT } from '/app/organisms/EmergencyStop' import { DeviceDetailsDeckConfiguration } from '/app/organisms/DeviceDetailsDeckConfiguration' import { useIsFlex } from '/app/redux-resources/robots' @@ -16,9 +15,9 @@ import { DeviceDetailsComponent } from '../DeviceDetailsComponent' vi.mock('@opentrons/react-api-client') vi.mock('/app/redux-resources/robots') -vi.mock('/app/organisms/Devices/InstrumentsAndModules') -vi.mock('/app/organisms/Devices/RecentProtocolRuns') -vi.mock('/app/organisms/Devices/RobotOverview') +vi.mock('/app/organisms/Desktop/Devices/InstrumentsAndModules') +vi.mock('/app/organisms/Desktop/Devices/RecentProtocolRuns') +vi.mock('/app/organisms/Desktop/Devices/RobotOverview') vi.mock('/app/organisms/DeviceDetailsDeckConfiguration') vi.mock('/app/redux/discovery') diff --git a/app/src/pages/Desktop/Devices/DeviceDetails/index.tsx b/app/src/pages/Desktop/Devices/DeviceDetails/index.tsx index 1a261c43b41..1baef896c97 100644 --- a/app/src/pages/Desktop/Devices/DeviceDetails/index.tsx +++ b/app/src/pages/Desktop/Devices/DeviceDetails/index.tsx @@ -1,16 +1,15 @@ -import * as React from 'react' import { useSelector } from 'react-redux' import { Navigate, useParams } from 'react-router-dom' import { ApiHostProvider } from '@opentrons/react-api-client' -import { useSyncRobotClock } from '/app/organisms/Devices/hooks' +import { useSyncRobotClock } from '/app/organisms/Desktop/Devices/hooks' import { getScanning, OPENTRONS_USB } from '/app/redux/discovery' import { appShellRequestor } from '/app/redux/shell/remote' import { DeviceDetailsComponent } from './DeviceDetailsComponent' import { useRobot } from '/app/redux-resources/robots' -import type { DesktopRouteParams } from '../../../../App/types' +import type { DesktopRouteParams } from '/app/App/types' export function DeviceDetails(): JSX.Element | null { const { robotName } = useParams< diff --git a/app/src/pages/Desktop/Devices/DevicesLanding/NewRobotSetupHelp.tsx b/app/src/pages/Desktop/Devices/DevicesLanding/NewRobotSetupHelp.tsx index c9c9ea6d2cd..d3fba7af095 100644 --- a/app/src/pages/Desktop/Devices/DevicesLanding/NewRobotSetupHelp.tsx +++ b/app/src/pages/Desktop/Devices/DevicesLanding/NewRobotSetupHelp.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { createPortal } from 'react-dom' import { useTranslation } from 'react-i18next' import { @@ -14,7 +14,7 @@ import { Modal, } from '@opentrons/components' -import { getTopPortalEl } from '../../../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import { ExternalLink } from '/app/atoms/Link/ExternalLink' const NEW_FLEX_SETUP_SUPPORT_ARTICLE_HREF = @@ -24,9 +24,7 @@ const NEW_OT2_SETUP_SUPPORT_ARTICLE_HREF = export function NewRobotSetupHelp(): JSX.Element { const { t } = useTranslation(['devices_landing', 'shared', 'branded']) - const [showNewRobotHelpModal, setShowNewRobotHelpModal] = React.useState( - false - ) + const [showNewRobotHelpModal, setShowNewRobotHelpModal] = useState(false) return ( <> diff --git a/app/src/pages/Desktop/Devices/DevicesLanding/__tests__/DevicesLanding.test.tsx b/app/src/pages/Desktop/Devices/DevicesLanding/__tests__/DevicesLanding.test.tsx index b23625de551..2b34b24ff96 100644 --- a/app/src/pages/Desktop/Devices/DevicesLanding/__tests__/DevicesLanding.test.tsx +++ b/app/src/pages/Desktop/Devices/DevicesLanding/__tests__/DevicesLanding.test.tsx @@ -1,11 +1,10 @@ -import * as React from 'react' import { fireEvent, screen } from '@testing-library/react' import { vi, it, describe, expect, beforeEach, afterEach } from 'vitest' import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' -import { DevicesEmptyState } from '/app/organisms/Devices/DevicesEmptyState' -import { RobotCard } from '/app/organisms/Devices/RobotCard' +import { DevicesEmptyState } from '/app/organisms/Desktop/Devices/DevicesEmptyState' +import { RobotCard } from '/app/organisms/Desktop/Devices/RobotCard' import { getScanning, getConnectableRobots, @@ -19,8 +18,8 @@ import { } from '/app/redux/discovery/__fixtures__' import { DevicesLanding } from '..' -vi.mock('/app/organisms/Devices/DevicesEmptyState') -vi.mock('/app/organisms/Devices/RobotCard') +vi.mock('/app/organisms/Desktop/Devices/DevicesEmptyState') +vi.mock('/app/organisms/Desktop/Devices/RobotCard') vi.mock('/app/redux/discovery') const render = () => { diff --git a/app/src/pages/Desktop/Devices/DevicesLanding/__tests__/NewRobotSetupHelp.test.tsx b/app/src/pages/Desktop/Devices/DevicesLanding/__tests__/NewRobotSetupHelp.test.tsx index 7c21a22a938..cc90f46b41d 100644 --- a/app/src/pages/Desktop/Devices/DevicesLanding/__tests__/NewRobotSetupHelp.test.tsx +++ b/app/src/pages/Desktop/Devices/DevicesLanding/__tests__/NewRobotSetupHelp.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { it, describe, expect } from 'vitest' import { fireEvent, screen } from '@testing-library/react' diff --git a/app/src/pages/Desktop/Devices/DevicesLanding/index.tsx b/app/src/pages/Desktop/Devices/DevicesLanding/index.tsx index 7ee8afd2993..a3ebf7114e6 100644 --- a/app/src/pages/Desktop/Devices/DevicesLanding/index.tsx +++ b/app/src/pages/Desktop/Devices/DevicesLanding/index.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { useSelector } from 'react-redux' import partition from 'lodash/partition' @@ -28,8 +27,8 @@ import { OPENTRONS_USB, } from '/app/redux/discovery' import { appShellRequestor } from '/app/redux/shell/remote' -import { RobotCard } from '/app/organisms/Devices/RobotCard' -import { DevicesEmptyState } from '/app/organisms/Devices/DevicesEmptyState' +import { RobotCard } from '/app/organisms/Desktop/Devices/RobotCard' +import { DevicesEmptyState } from '/app/organisms/Desktop/Devices/DevicesEmptyState' import { CollapsibleSection } from '/app/molecules/CollapsibleSection' import { Divider } from '/app/atoms/structure' diff --git a/app/src/pages/Desktop/Devices/ProtocolRunDetails/__tests__/ProtocolRunDetails.test.tsx b/app/src/pages/Desktop/Devices/ProtocolRunDetails/__tests__/ProtocolRunDetails.test.tsx index 8c6e304cf42..d90285e6804 100644 --- a/app/src/pages/Desktop/Devices/ProtocolRunDetails/__tests__/ProtocolRunDetails.test.tsx +++ b/app/src/pages/Desktop/Devices/ProtocolRunDetails/__tests__/ProtocolRunDetails.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { vi, it, describe, expect, beforeEach, afterEach } from 'vitest' import { Route, MemoryRouter, Routes } from 'react-router-dom' import { fireEvent, screen } from '@testing-library/react' @@ -7,33 +6,34 @@ import { when } from 'vitest-when' import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' import { mockConnectableRobot } from '/app/redux/discovery/__fixtures__' +import { useSyncRobotClock } from '/app/organisms/Desktop/Devices/hooks' +import { ProtocolRunHeader } from '/app/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader' +import { ProtocolRunModuleControls } from '/app/organisms/Desktop/Devices/ProtocolRun/ProtocolRunModuleControls' +import { ProtocolRunSetup } from '/app/organisms/Desktop/Devices/ProtocolRun/ProtocolRunSetup' +import { RunPreviewComponent } from '/app/organisms/Desktop/Devices/RunPreview' +import { ProtocolRunRuntimeParameters } from '/app/organisms/Desktop/Devices/ProtocolRun/ProtocolRunRunTimeParameters' import { + useCurrentRunId, + useMostRecentCompletedAnalysis, + useRunHasStarted, useModuleRenderInfoForProtocolById, useRunStatuses, - useSyncRobotClock, - useRunHasStarted, -} from '/app/organisms/Devices/hooks' -import { useMostRecentCompletedAnalysis } from '/app/organisms/LabwarePositionCheck/useMostRecentCompletedAnalysis' -import { ProtocolRunHeader } from '/app/organisms/Devices/ProtocolRun/ProtocolRunHeader' -import { ProtocolRunModuleControls } from '/app/organisms/Devices/ProtocolRun/ProtocolRunModuleControls' -import { ProtocolRunSetup } from '/app/organisms/Devices/ProtocolRun/ProtocolRunSetup' -import { RunPreviewComponent } from '/app/organisms/RunPreview' -import { ProtocolRunRuntimeParameters } from '/app/organisms/Devices/ProtocolRun/ProtocolRunRunTimeParameters' -import { useCurrentRunId } from '/app/resources/runs' +} from '/app/resources/runs' import { mockRobotSideAnalysis } from '/app/molecules/Command/__fixtures__' import { useRobot } from '/app/redux-resources/robots' import { ProtocolRunDetails } from '..' import type { ModuleModel, ModuleType } from '@opentrons/shared-data' -vi.mock('/app/organisms/LabwarePositionCheck/useMostRecentCompletedAnalysis') -vi.mock('/app/organisms/Devices/hooks') -vi.mock('/app/organisms/Devices/ProtocolRun/ProtocolRunHeader') -vi.mock('/app/organisms/Devices/ProtocolRun/ProtocolRunSetup') -vi.mock('/app/organisms/RunPreview') -vi.mock('/app/organisms/Devices/ProtocolRun/ProtocolRunModuleControls') +vi.mock('/app/organisms/Desktop/Devices/hooks') +vi.mock('/app/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader') +vi.mock('/app/organisms/Desktop/Devices/ProtocolRun/ProtocolRunSetup') +vi.mock('/app/organisms/Desktop/Devices/RunPreview') +vi.mock('/app/organisms/Desktop/Devices/ProtocolRun/ProtocolRunModuleControls') vi.mock('/app/resources/runs') -vi.mock('/app/organisms/Devices/ProtocolRun/ProtocolRunRunTimeParameters') +vi.mock( + '/app/organisms/Desktop/Devices/ProtocolRun/ProtocolRunRunTimeParameters' +) vi.mock('/app/redux/config') vi.mock('/app/redux-resources/robots') diff --git a/app/src/pages/Desktop/Devices/ProtocolRunDetails/index.tsx b/app/src/pages/Desktop/Devices/ProtocolRunDetails/index.tsx index ee7d82553d4..7ea4ceae7c6 100644 --- a/app/src/pages/Desktop/Devices/ProtocolRunDetails/index.tsx +++ b/app/src/pages/Desktop/Devices/ProtocolRunDetails/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useEffect, useRef, useState } from 'react' import isEmpty from 'lodash/isEmpty' import { useTranslation } from 'react-i18next' import { useDispatch } from 'react-redux' @@ -22,33 +22,30 @@ import { useHoverTooltip, } from '@opentrons/components' import { ApiHostProvider } from '@opentrons/react-api-client' -import { - useModuleRenderInfoForProtocolById, - useRunHasStarted, - useRunStatuses, - useSyncRobotClock, -} from '/app/organisms/Devices/hooks' -import { ProtocolRunHeader } from '/app/organisms/Devices/ProtocolRun/ProtocolRunHeader' -import { RunPreview } from '/app/organisms/RunPreview' +import { useSyncRobotClock } from '/app/organisms/Desktop/Devices/hooks' +import { ProtocolRunHeader } from '/app/organisms/Desktop/Devices/ProtocolRun/ProtocolRunHeader' +import { RunPreview } from '/app/organisms/Desktop/Devices/RunPreview' import { ProtocolRunSetup, initialMissingSteps, -} from '/app/organisms/Devices/ProtocolRun/ProtocolRunSetup' -import { BackToTopButton } from '/app/organisms/Devices/ProtocolRun/BackToTopButton' -import { ProtocolRunModuleControls } from '/app/organisms/Devices/ProtocolRun/ProtocolRunModuleControls' -import { ProtocolRunRuntimeParameters } from '/app/organisms/Devices/ProtocolRun/ProtocolRunRunTimeParameters' -import { useCurrentRunId } from '/app/resources/runs' +} from '/app/organisms/Desktop/Devices/ProtocolRun/ProtocolRunSetup' +import { BackToTopButton } from '/app/organisms/Desktop/Devices/ProtocolRun/BackToTopButton' +import { ProtocolRunModuleControls } from '/app/organisms/Desktop/Devices/ProtocolRun/ProtocolRunModuleControls' +import { ProtocolRunRuntimeParameters } from '/app/organisms/Desktop/Devices/ProtocolRun/ProtocolRunRunTimeParameters' +import { + useCurrentRunId, + useMostRecentCompletedAnalysis, + useRunHasStarted, + useModuleRenderInfoForProtocolById, + useRunStatuses, +} from '/app/resources/runs' import { OPENTRONS_USB } from '/app/redux/discovery' import { fetchProtocols } from '/app/redux/protocol-storage' import { appShellRequestor } from '/app/redux/shell/remote' -import { useMostRecentCompletedAnalysis } from '/app/organisms/LabwarePositionCheck/useMostRecentCompletedAnalysis' import { useRobot, useRobotType } from '/app/redux-resources/robots' import type { ViewportListRef } from 'react-viewport-list' -import type { - DesktopRouteParams, - ProtocolRunDetailsTab, -} from '../../../../App/types' +import type { DesktopRouteParams, ProtocolRunDetailsTab } from '/app/App/types' import type { Dispatch } from '/app/redux/types' const baseRoundTabStyling = css` @@ -137,7 +134,7 @@ export function ProtocolRunDetails(): JSX.Element | null { const robot = useRobot(robotName) useSyncRobotClock(robotName) - React.useEffect(() => { + useEffect(() => { dispatch(fetchProtocols()) }, [dispatch]) return robot != null ? ( @@ -178,11 +175,11 @@ interface PageContentsProps { function PageContents(props: PageContentsProps): JSX.Element { const { runId, robotName, protocolRunDetailsTab } = props const robotType = useRobotType(robotName) - const protocolRunHeaderRef = React.useRef(null) - const listRef = React.useRef(null) - const [jumpedIndex, setJumpedIndex] = React.useState(null) + const protocolRunHeaderRef = useRef(null) + const listRef = useRef(null) + const [jumpedIndex, setJumpedIndex] = useState(null) - React.useEffect(() => { + useEffect(() => { if (jumpedIndex != null) { setTimeout(() => { setJumpedIndex(null) @@ -190,7 +187,7 @@ function PageContents(props: PageContentsProps): JSX.Element { } }, [jumpedIndex]) - const [missingSteps, setMissingSteps] = React.useState< + const [missingSteps, setMissingSteps] = useState< ReturnType >(initialMissingSteps()) @@ -323,7 +320,7 @@ const SetupTab = (props: SetupTabProps): JSX.Element | null => { // On the initial render or when a run first begins, navigate to "run preview" if the run has started. // If "run again" is clicked, the user should NOT be directed back to the "setup" tab. - React.useEffect(() => { + useEffect(() => { if (runHasStarted && protocolRunDetailsTab !== 'run-preview') { navigate(`/devices/${robotName}/protocol-runs/${runId}/run-preview`) } @@ -352,7 +349,7 @@ const ParametersTab = (props: ParametersTabProps): JSX.Element | null => { const navigate = useNavigate() const disabled = mostRecentAnalysis == null - React.useEffect(() => { + useEffect(() => { if (disabled && protocolRunDetailsTab === 'runtime-parameters') { navigate(`/devices/${robotName}/protocol-runs/${runId}/run-preview`, { replace: true, @@ -394,7 +391,7 @@ const ModuleControlsTab = ( : 'not_available_for_a_run_in_progress' )}` - React.useEffect(() => { + useEffect(() => { if (disabled && protocolRunDetailsTab === 'module-controls') navigate(`/devices/${robotName}/protocol-runs/${runId}/run-preview`) }, [disabled, navigate, protocolRunDetailsTab, robotName, runId]) diff --git a/app/src/pages/Desktop/Devices/RobotSettings/__tests__/RobotSettings.test.tsx b/app/src/pages/Desktop/Devices/RobotSettings/__tests__/RobotSettings.test.tsx index aa8343c1bd8..2d63a704a6f 100644 --- a/app/src/pages/Desktop/Devices/RobotSettings/__tests__/RobotSettings.test.tsx +++ b/app/src/pages/Desktop/Devices/RobotSettings/__tests__/RobotSettings.test.tsx @@ -1,13 +1,12 @@ -import * as React from 'react' import { vi, it, describe, expect, beforeEach, afterEach } from 'vitest' import { fireEvent, screen } from '@testing-library/react' import { Route, MemoryRouter, Routes } from 'react-router-dom' import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' -import { RobotSettingsCalibration } from '/app/organisms/RobotSettingsCalibration' -import { RobotSettingsNetworking } from '/app/organisms/Devices/RobotSettings/RobotSettingsNetworking' -import { RobotSettingsAdvanced } from '/app/organisms/Devices/RobotSettings/RobotSettingsAdvanced' +import { RobotSettingsCalibration } from '/app/organisms/Desktop/RobotSettingsCalibration' +import { RobotSettingsNetworking } from '/app/organisms/Desktop/Devices/RobotSettings/RobotSettingsNetworking' +import { RobotSettingsAdvanced } from '/app/organisms/Desktop/Devices/RobotSettings/RobotSettingsAdvanced' import { useRobot } from '/app/redux-resources/robots' import { RobotSettings } from '..' import { when } from 'vitest-when' @@ -18,9 +17,9 @@ import { } from '/app/redux/discovery/__fixtures__' import { getRobotUpdateSession } from '/app/redux/robot-update' -vi.mock('/app/organisms/RobotSettingsCalibration') -vi.mock('/app/organisms/Devices/RobotSettings/RobotSettingsNetworking') -vi.mock('/app/organisms/Devices/RobotSettings/RobotSettingsAdvanced') +vi.mock('/app/organisms/Desktop/RobotSettingsCalibration') +vi.mock('/app/organisms/Desktop/Devices/RobotSettings/RobotSettingsNetworking') +vi.mock('/app/organisms/Desktop/Devices/RobotSettings/RobotSettingsAdvanced') vi.mock('/app/redux-resources/robots') vi.mock('/app/redux/discovery/selectors') vi.mock('/app/redux/robot-update') diff --git a/app/src/pages/Desktop/Devices/RobotSettings/index.tsx b/app/src/pages/Desktop/Devices/RobotSettings/index.tsx index 15f289764b4..4c44b9b3beb 100644 --- a/app/src/pages/Desktop/Devices/RobotSettings/index.tsx +++ b/app/src/pages/Desktop/Devices/RobotSettings/index.tsx @@ -1,8 +1,9 @@ -import * as React from 'react' +import { useState } from 'react' import { useTranslation } from 'react-i18next' import { useParams, Navigate } from 'react-router-dom' import { + Banner, BORDERS, Box, COLORS, @@ -25,20 +26,16 @@ import { import { appShellRequestor } from '/app/redux/shell/remote' import { getRobotUpdateSession } from '/app/redux/robot-update' import { getDevtoolsEnabled } from '/app/redux/config' -import { Banner } from '/app/atoms/Banner' import { useRobot } from '/app/redux-resources/robots' import { Line } from '/app/atoms/structure' import { NavTab } from '/app/molecules/NavTab' -import { RobotSettingsCalibration } from '/app/organisms/RobotSettingsCalibration' -import { RobotSettingsAdvanced } from '/app/organisms/Devices/RobotSettings/RobotSettingsAdvanced' -import { RobotSettingsNetworking } from '/app/organisms/Devices/RobotSettings/RobotSettingsNetworking' -import { RobotSettingsFeatureFlags } from '/app/organisms/Devices/RobotSettings/RobotSettingsFeatureFlags' -import { ReachableBanner } from '/app/organisms/Devices/ReachableBanner' +import { RobotSettingsCalibration } from '/app/organisms/Desktop/RobotSettingsCalibration' +import { RobotSettingsAdvanced } from '/app/organisms/Desktop/Devices/RobotSettings/RobotSettingsAdvanced' +import { RobotSettingsNetworking } from '/app/organisms/Desktop/Devices/RobotSettings/RobotSettingsNetworking' +import { RobotSettingsFeatureFlags } from '/app/organisms/Desktop/Devices/RobotSettings/RobotSettingsFeatureFlags' +import { ReachableBanner } from '/app/organisms/Desktop/Devices/ReachableBanner' -import type { - DesktopRouteParams, - RobotSettingsTab, -} from '../../../../App/types' +import type { DesktopRouteParams, RobotSettingsTab } from '/app/App/types' export function RobotSettings(): JSX.Element | null { const { t } = useTranslation('device_settings') @@ -48,9 +45,7 @@ export function RobotSettings(): JSX.Element | null { const robot = useRobot(robotName) const isCalibrationDisabled = robot?.status !== CONNECTABLE const isNetworkingDisabled = robot?.status === UNREACHABLE - const [showRobotBusyBanner, setShowRobotBusyBanner] = React.useState( - false - ) + const [showRobotBusyBanner, setShowRobotBusyBanner] = useState(false) const robotUpdateSession = useSelector(getRobotUpdateSession) const updateRobotStatus = (isRobotBusy: boolean): void => { diff --git a/app/src/pages/Desktop/Labware/__tests__/Labware.test.tsx b/app/src/pages/Desktop/Labware/__tests__/Labware.test.tsx index b5133473704..3c919b7f295 100644 --- a/app/src/pages/Desktop/Labware/__tests__/Labware.test.tsx +++ b/app/src/pages/Desktop/Labware/__tests__/Labware.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { vi, it, describe, expect, beforeEach, afterEach } from 'vitest' import { fireEvent, screen } from '@testing-library/react' import { MemoryRouter } from 'react-router-dom' diff --git a/app/src/pages/Desktop/Labware/__tests__/hooks.test.tsx b/app/src/pages/Desktop/Labware/__tests__/hooks.test.tsx index 14783cd6fe5..5fe55c260dc 100644 --- a/app/src/pages/Desktop/Labware/__tests__/hooks.test.tsx +++ b/app/src/pages/Desktop/Labware/__tests__/hooks.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { Provider } from 'react-redux' import { createStore } from 'redux' import { vi, it, describe, expect, beforeEach, afterEach } from 'vitest' diff --git a/app/src/pages/Desktop/Labware/index.tsx b/app/src/pages/Desktop/Labware/index.tsx index 955f8a26fc1..159e57c306e 100644 --- a/app/src/pages/Desktop/Labware/index.tsx +++ b/app/src/pages/Desktop/Labware/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState, useEffect } from 'react' import { useTranslation } from 'react-i18next' import startCase from 'lodash/startCase' import { css } from 'styled-components' @@ -84,35 +84,33 @@ const SORT_BY_BUTTON_STYLE = css` export function Labware(): JSX.Element { const { t } = useTranslation(['labware_landing', 'shared']) const enableLabwareCreator = useFeatureFlag('enableLabwareCreator') - const [sortBy, setSortBy] = React.useState('alphabetical') - const [showSortByMenu, setShowSortByMenu] = React.useState(false) + const [sortBy, setSortBy] = useState('alphabetical') + const [showSortByMenu, setShowSortByMenu] = useState(false) const toggleSetShowSortByMenu = (): void => { setShowSortByMenu(!showSortByMenu) } const dispatch = useDispatch() - const [showLC, setShowLC] = React.useState(false) + const [showLC, setShowLC] = useState(false) const trackEvent = useTrackEvent() - const [filterBy, setFilterBy] = React.useState('all') + const [filterBy, setFilterBy] = useState('all') const { makeToast } = useToaster() const labware = useAllLabware(sortBy, filterBy) const { labwareFailureMessage, clearLabwareFailure } = useLabwareFailure() const { newLabwareName, clearLabwareName } = useNewLabwareName() - const [showAddLabwareSlideout, setShowAddLabwareSlideout] = React.useState( - false - ) + const [showAddLabwareSlideout, setShowAddLabwareSlideout] = useState(false) const [ currentLabwareDef, setCurrentLabwareDef, - ] = React.useState(null) + ] = useState(null) const sortOverflowWrapperRef = useOnClickOutside({ onClickOutside: () => { setShowSortByMenu(false) }, }) - React.useEffect(() => { + useEffect(() => { if (labwareFailureMessage != null) { setShowAddLabwareSlideout(false) makeToast(labwareFailureMessage, ERROR_TOAST, { diff --git a/app/src/pages/Desktop/Protocols/ProtocolDetails/ProtocolTimeline.tsx b/app/src/pages/Desktop/Protocols/ProtocolDetails/ProtocolTimeline.tsx index affaf82f9f3..e781987b8b6 100644 --- a/app/src/pages/Desktop/Protocols/ProtocolDetails/ProtocolTimeline.tsx +++ b/app/src/pages/Desktop/Protocols/ProtocolDetails/ProtocolTimeline.tsx @@ -1,12 +1,12 @@ -import * as React from 'react' +import { useEffect } from 'react' import { useParams } from 'react-router-dom' import { useDispatch, useSelector } from 'react-redux' import { Icon, Box, SPACING } from '@opentrons/components' import { fetchProtocols, getStoredProtocol } from '/app/redux/protocol-storage' -import { ProtocolTimelineScrubber } from '/app/organisms/ProtocolTimelineScrubber' +import { ProtocolTimelineScrubber } from '/app/organisms/Desktop/ProtocolTimelineScrubber' import type { Dispatch, State } from '/app/redux/types' -import type { DesktopRouteParams } from '../../../../App/types' +import type { DesktopRouteParams } from '/app/App/types' export function ProtocolTimeline(): JSX.Element { const { protocolKey } = useParams< @@ -17,7 +17,7 @@ export function ProtocolTimeline(): JSX.Element { getStoredProtocol(state, protocolKey) ) - React.useEffect(() => { + useEffect(() => { dispatch(fetchProtocols()) }, []) diff --git a/app/src/pages/Desktop/Protocols/ProtocolDetails/__tests__/ProtocolDetails.test.tsx b/app/src/pages/Desktop/Protocols/ProtocolDetails/__tests__/ProtocolDetails.test.tsx index e51038afbc9..e9e7b273d54 100644 --- a/app/src/pages/Desktop/Protocols/ProtocolDetails/__tests__/ProtocolDetails.test.tsx +++ b/app/src/pages/Desktop/Protocols/ProtocolDetails/__tests__/ProtocolDetails.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { vi, it, describe, expect, beforeEach, afterEach } from 'vitest' import { screen } from '@testing-library/react' import { Route, MemoryRouter, Routes } from 'react-router-dom' @@ -8,7 +7,7 @@ import { renderWithProviders } from '/app/__testing-utils__' import { i18n } from '/app/i18n' import { getStoredProtocol } from '/app/redux/protocol-storage' import { storedProtocolData } from '/app/redux/protocol-storage/__fixtures__' -import { ProtocolDetails as ProtocolDetailsContents } from '/app/organisms/ProtocolDetails' +import { ProtocolDetails as ProtocolDetailsContents } from '/app/organisms/Desktop/ProtocolDetails' import { ProtocolDetails } from '../' @@ -17,7 +16,7 @@ import type { State } from '/app/redux/types' const mockProtocolKey = 'protocolKeyStub' vi.mock('/app/redux/protocol-storage') -vi.mock('/app/organisms/ProtocolDetails') +vi.mock('/app/organisms/Desktop/ProtocolDetails') const MOCK_STATE: State = { protocolStorage: { diff --git a/app/src/pages/Desktop/Protocols/ProtocolDetails/index.tsx b/app/src/pages/Desktop/Protocols/ProtocolDetails/index.tsx index e147fab13b5..66402416da7 100644 --- a/app/src/pages/Desktop/Protocols/ProtocolDetails/index.tsx +++ b/app/src/pages/Desktop/Protocols/ProtocolDetails/index.tsx @@ -1,12 +1,12 @@ -import * as React from 'react' +import { useEffect } from 'react' import { useParams, Navigate } from 'react-router-dom' import { useDispatch, useSelector } from 'react-redux' import { fetchProtocols, getStoredProtocol } from '/app/redux/protocol-storage' -import { ProtocolDetails as ProtocolDetailsContents } from '/app/organisms/ProtocolDetails' +import { ProtocolDetails as ProtocolDetailsContents } from '/app/organisms/Desktop/ProtocolDetails' import type { Dispatch, State } from '/app/redux/types' -import type { DesktopRouteParams } from '../../../../App/types' +import type { DesktopRouteParams } from '/app/App/types' export function ProtocolDetails(): JSX.Element { const { protocolKey } = useParams< @@ -18,7 +18,7 @@ export function ProtocolDetails(): JSX.Element { getStoredProtocol(state, protocolKey) ) - React.useEffect(() => { + useEffect(() => { dispatch(fetchProtocols()) }, [dispatch]) diff --git a/app/src/pages/Desktop/Protocols/ProtocolsLanding/__tests__/ProtocolsLanding.test.tsx b/app/src/pages/Desktop/Protocols/ProtocolsLanding/__tests__/ProtocolsLanding.test.tsx index 61a35c9aefc..8f1e87fef38 100644 --- a/app/src/pages/Desktop/Protocols/ProtocolsLanding/__tests__/ProtocolsLanding.test.tsx +++ b/app/src/pages/Desktop/Protocols/ProtocolsLanding/__tests__/ProtocolsLanding.test.tsx @@ -1,17 +1,16 @@ -import * as React from 'react' import { vi, it, describe } from 'vitest' import { screen } from '@testing-library/react' import { renderWithProviders } from '/app/__testing-utils__' -import { ProtocolsEmptyState } from '/app/organisms/ProtocolsLanding/ProtocolsEmptyState' +import { ProtocolsEmptyState } from '/app/organisms/Desktop/ProtocolsLanding/ProtocolsEmptyState' import { getStoredProtocols } from '/app/redux/protocol-storage' import { storedProtocolData } from '/app/redux/protocol-storage/__fixtures__' -import { ProtocolList } from '/app/organisms/ProtocolsLanding/ProtocolList' +import { ProtocolList } from '/app/organisms/Desktop/ProtocolsLanding/ProtocolList' import { ProtocolsLanding } from '..' vi.mock('/app/redux/protocol-storage') -vi.mock('/app/organisms/ProtocolsLanding/ProtocolsEmptyState') -vi.mock('/app/organisms/ProtocolsLanding/ProtocolList') +vi.mock('/app/organisms/Desktop/ProtocolsLanding/ProtocolsEmptyState') +vi.mock('/app/organisms/Desktop/ProtocolsLanding/ProtocolList') const render = () => { return renderWithProviders()[0] diff --git a/app/src/pages/Desktop/Protocols/ProtocolsLanding/index.tsx b/app/src/pages/Desktop/Protocols/ProtocolsLanding/index.tsx index 628594247c6..b88ca50d90f 100644 --- a/app/src/pages/Desktop/Protocols/ProtocolsLanding/index.tsx +++ b/app/src/pages/Desktop/Protocols/ProtocolsLanding/index.tsx @@ -1,8 +1,8 @@ -import * as React from 'react' +import { useEffect } from 'react' import { useDispatch, useSelector } from 'react-redux' import { fetchProtocols, getStoredProtocols } from '/app/redux/protocol-storage' -import { ProtocolsEmptyState } from '/app/organisms/ProtocolsLanding/ProtocolsEmptyState' -import { ProtocolList } from '/app/organisms/ProtocolsLanding/ProtocolList' +import { ProtocolsEmptyState } from '/app/organisms/Desktop/ProtocolsLanding/ProtocolsEmptyState' +import { ProtocolList } from '/app/organisms/Desktop/ProtocolsLanding/ProtocolList' import type { Dispatch, State } from '/app/redux/types' @@ -11,7 +11,7 @@ export function ProtocolsLanding(): JSX.Element { const storedProtocols = useSelector((state: State) => getStoredProtocols(state) ) - React.useEffect(() => { + useEffect(() => { dispatch(fetchProtocols()) }, [dispatch]) diff --git a/app/src/pages/Desktop/Protocols/hooks/index.ts b/app/src/pages/Desktop/Protocols/hooks/index.ts deleted file mode 100644 index 2d4069e290c..00000000000 --- a/app/src/pages/Desktop/Protocols/hooks/index.ts +++ /dev/null @@ -1,82 +0,0 @@ -import last from 'lodash/last' -import { - useProtocolAnalysisAsDocumentQuery, - useProtocolQuery, -} from '@opentrons/react-api-client' - -import { - getLabwareSetupItemGroups, - useRequiredProtocolHardwareFromAnalysis, -} from '/app/transformations/commands' - -import type { - CompletedProtocolAnalysis, - RunTimeParameter, -} from '@opentrons/shared-data' -import type { - LabwareSetupItem, - ProtocolHardware, -} from '/app/transformations/commands' - -/** - * Returns an array of RunTimeParameters objects that are optional by the given protocol ID. - * - * @param {string} protocolId The ID of the protocol for which required hardware is being retrieved. - * @returns {RunTimeParameters[]} An array of RunTimeParameters objects that are required by the given protocol ID. - */ - -export const useRunTimeParameters = ( - protocolId: string -): RunTimeParameter[] => { - const { data: protocolData } = useProtocolQuery(protocolId) - const { data: analysis } = useProtocolAnalysisAsDocumentQuery( - protocolId, - last(protocolData?.data.analysisSummaries)?.id ?? null, - { enabled: protocolData != null } - ) - - return analysis?.runTimeParameters ?? [] -} - -/** - * Returns an array of ProtocolHardware objects that are required by the given protocol ID. - * - * @param {string} protocolId The ID of the protocol for which required hardware is being retrieved. - * @returns {ProtocolHardware[]} An array of ProtocolHardware objects that are required by the given protocol ID. - */ - -export const useRequiredProtocolHardware = ( - protocolId: string -): { requiredProtocolHardware: ProtocolHardware[]; isLoading: boolean } => { - const { data: protocolData } = useProtocolQuery(protocolId) - const { data: analysis } = useProtocolAnalysisAsDocumentQuery( - protocolId, - last(protocolData?.data.analysisSummaries)?.id ?? null, - { enabled: protocolData != null } - ) - - return useRequiredProtocolHardwareFromAnalysis(analysis ?? null) -} - -/** - * Returns an array of LabwareSetupItem objects that are required by the given protocol ID. - * - * @param {string} protocolId The ID of the protocol for which required labware setup items are being retrieved. - * @returns {LabwareSetupItem[]} An array of LabwareSetupItem objects that are required by the given protocol ID. - */ -export const useRequiredProtocolLabware = ( - protocolId: string -): LabwareSetupItem[] => { - const { data: protocolData } = useProtocolQuery(protocolId) - const { - data: mostRecentAnalysis, - } = useProtocolAnalysisAsDocumentQuery( - protocolId, - last(protocolData?.data.analysisSummaries)?.id ?? null, - { enabled: protocolData != null } - ) - const commands = - (mostRecentAnalysis as CompletedProtocolAnalysis)?.commands ?? [] - const { onDeckItems, offDeckItems } = getLabwareSetupItemGroups(commands) - return [...onDeckItems, ...offDeckItems] -} diff --git a/app/src/pages/ODD/ConnectViaEthernet/DisplayConnectionStatus.tsx b/app/src/pages/ODD/ConnectViaEthernet/DisplayConnectionStatus.tsx index 90bd374b948..746b04f2e24 100644 --- a/app/src/pages/ODD/ConnectViaEthernet/DisplayConnectionStatus.tsx +++ b/app/src/pages/ODD/ConnectViaEthernet/DisplayConnectionStatus.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { useNavigate } from 'react-router-dom' diff --git a/app/src/pages/ODD/ConnectViaEthernet/TitleHeader.tsx b/app/src/pages/ODD/ConnectViaEthernet/TitleHeader.tsx index c837499c22b..30715fdab2f 100644 --- a/app/src/pages/ODD/ConnectViaEthernet/TitleHeader.tsx +++ b/app/src/pages/ODD/ConnectViaEthernet/TitleHeader.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useNavigate } from 'react-router-dom' import { diff --git a/app/src/pages/ODD/ConnectViaEthernet/__tests__/ConnectViaEthernet.test.tsx b/app/src/pages/ODD/ConnectViaEthernet/__tests__/ConnectViaEthernet.test.tsx index c3288101571..c785d8c5e88 100644 --- a/app/src/pages/ODD/ConnectViaEthernet/__tests__/ConnectViaEthernet.test.tsx +++ b/app/src/pages/ODD/ConnectViaEthernet/__tests__/ConnectViaEthernet.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { vi, it, describe, beforeEach, afterEach } from 'vitest' import { screen } from '@testing-library/react' diff --git a/app/src/pages/ODD/ConnectViaEthernet/__tests__/DisplayConnectionStatus.test.tsx b/app/src/pages/ODD/ConnectViaEthernet/__tests__/DisplayConnectionStatus.test.tsx index 17bbb8e85b1..9efbfd5c3dc 100644 --- a/app/src/pages/ODD/ConnectViaEthernet/__tests__/DisplayConnectionStatus.test.tsx +++ b/app/src/pages/ODD/ConnectViaEthernet/__tests__/DisplayConnectionStatus.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { vi, it, describe, expect, beforeEach } from 'vitest' import { fireEvent, screen } from '@testing-library/react' diff --git a/app/src/pages/ODD/ConnectViaEthernet/__tests__/TitleHeader.test.tsx b/app/src/pages/ODD/ConnectViaEthernet/__tests__/TitleHeader.test.tsx index 8b40ae71671..cffa8e9c63a 100644 --- a/app/src/pages/ODD/ConnectViaEthernet/__tests__/TitleHeader.test.tsx +++ b/app/src/pages/ODD/ConnectViaEthernet/__tests__/TitleHeader.test.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { vi, it, describe, expect, beforeEach } from 'vitest' import { fireEvent, screen } from '@testing-library/react' diff --git a/app/src/pages/ODD/ConnectViaEthernet/index.tsx b/app/src/pages/ODD/ConnectViaEthernet/index.tsx index fe141f853ae..644d0616e1e 100644 --- a/app/src/pages/ODD/ConnectViaEthernet/index.tsx +++ b/app/src/pages/ODD/ConnectViaEthernet/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { useTranslation } from 'react-i18next' import { useSelector, useDispatch } from 'react-redux' @@ -28,7 +28,7 @@ export function ConnectViaEthernet(): JSX.Element { const [ showNetworkDetailsModal, setShowNetworkDetailsModal, - ] = React.useState(false) + ] = useState(false) const { ethernet } = useSelector((state: State) => getNetworkInterfaces(state, robotName) diff --git a/app/src/pages/ODD/ConnectViaUSB/_tests__/ConnectedViaUSB.test.tsx b/app/src/pages/ODD/ConnectViaUSB/_tests__/ConnectedViaUSB.test.tsx index dea215d9026..4072cd1a7a3 100644 --- a/app/src/pages/ODD/ConnectViaUSB/_tests__/ConnectedViaUSB.test.tsx +++ b/app/src/pages/ODD/ConnectViaUSB/_tests__/ConnectedViaUSB.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { vi, it, describe, expect, beforeEach, afterEach } from 'vitest' import { MemoryRouter } from 'react-router-dom' import { fireEvent } from '@testing-library/react' diff --git a/app/src/pages/ODD/ConnectViaUSB/index.tsx b/app/src/pages/ODD/ConnectViaUSB/index.tsx index e1ff45917e0..40ae95e63cf 100644 --- a/app/src/pages/ODD/ConnectViaUSB/index.tsx +++ b/app/src/pages/ODD/ConnectViaUSB/index.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { useNavigate } from 'react-router-dom' import { diff --git a/app/src/pages/ODD/ConnectViaWifi/JoinOtherNetwork.tsx b/app/src/pages/ODD/ConnectViaWifi/JoinOtherNetwork.tsx index e956944122a..4abd146238a 100644 --- a/app/src/pages/ODD/ConnectViaWifi/JoinOtherNetwork.tsx +++ b/app/src/pages/ODD/ConnectViaWifi/JoinOtherNetwork.tsx @@ -4,7 +4,7 @@ import { useTranslation } from 'react-i18next' import { Flex, DIRECTION_COLUMN } from '@opentrons/components' import { SetWifiSsid } from '/app/organisms/ODD/NetworkSettings' -import { RobotSetupHeader } from '/app/organisms/RobotSetupHeader' +import { RobotSetupHeader } from '/app/organisms/ODD/RobotSetupHeader' import type { WifiScreenOption } from './' diff --git a/app/src/pages/ODD/ConnectViaWifi/SelectAuthenticationType.tsx b/app/src/pages/ODD/ConnectViaWifi/SelectAuthenticationType.tsx index 9d367353d53..34f8e11e788 100644 --- a/app/src/pages/ODD/ConnectViaWifi/SelectAuthenticationType.tsx +++ b/app/src/pages/ODD/ConnectViaWifi/SelectAuthenticationType.tsx @@ -1,10 +1,9 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { Flex, DIRECTION_COLUMN } from '@opentrons/components' import { SelectAuthenticationType as SelectAuthenticationTypeComponent } from '/app/organisms/ODD/NetworkSettings' -import { RobotSetupHeader } from '/app/organisms/RobotSetupHeader' +import { RobotSetupHeader } from '/app/organisms/ODD/RobotSetupHeader' import type { WifiSecurityType } from '@opentrons/api-client' import type { WifiScreenOption } from './' diff --git a/app/src/pages/ODD/ConnectViaWifi/SetWifiCred.tsx b/app/src/pages/ODD/ConnectViaWifi/SetWifiCred.tsx index 0c022ea0f99..e2716fc2282 100644 --- a/app/src/pages/ODD/ConnectViaWifi/SetWifiCred.tsx +++ b/app/src/pages/ODD/ConnectViaWifi/SetWifiCred.tsx @@ -1,10 +1,10 @@ -import * as React from 'react' +import type * as React from 'react' import { useTranslation } from 'react-i18next' import { Flex, DIRECTION_COLUMN } from '@opentrons/components' import { SetWifiCred as SetWifiCredComponent } from '/app/organisms/ODD/NetworkSettings' -import { RobotSetupHeader } from '/app/organisms/RobotSetupHeader' +import { RobotSetupHeader } from '/app/organisms/ODD/RobotSetupHeader' import type { WifiScreenOption } from './' diff --git a/app/src/pages/ODD/ConnectViaWifi/WifiConnectStatus.tsx b/app/src/pages/ODD/ConnectViaWifi/WifiConnectStatus.tsx index f20e32ccb01..e1ffbb14b79 100644 --- a/app/src/pages/ODD/ConnectViaWifi/WifiConnectStatus.tsx +++ b/app/src/pages/ODD/ConnectViaWifi/WifiConnectStatus.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { Flex, DIRECTION_COLUMN, SPACING } from '@opentrons/components' @@ -8,7 +7,7 @@ import { FailedToConnect, WifiConnectionDetails, } from '/app/organisms/ODD/NetworkSettings' -import { RobotSetupHeader } from '/app/organisms/RobotSetupHeader' +import { RobotSetupHeader } from '/app/organisms/ODD/RobotSetupHeader' import * as RobotApi from '/app/redux/robot-api' import type { WifiSecurityType } from '@opentrons/api-client' diff --git a/app/src/pages/ODD/ConnectViaWifi/__tests__/ConnectViaWifi.test.tsx b/app/src/pages/ODD/ConnectViaWifi/__tests__/ConnectViaWifi.test.tsx index 52c0e3c95dd..004ba7b0762 100644 --- a/app/src/pages/ODD/ConnectViaWifi/__tests__/ConnectViaWifi.test.tsx +++ b/app/src/pages/ODD/ConnectViaWifi/__tests__/ConnectViaWifi.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { vi, it, describe, expect, beforeEach, afterEach } from 'vitest' import { MemoryRouter } from 'react-router-dom' import { fireEvent, screen } from '@testing-library/react' diff --git a/app/src/pages/ODD/ConnectViaWifi/index.tsx b/app/src/pages/ODD/ConnectViaWifi/index.tsx index df153941a3b..54555b85f53 100644 --- a/app/src/pages/ODD/ConnectViaWifi/index.tsx +++ b/app/src/pages/ODD/ConnectViaWifi/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import { useState } from 'react' import { useSelector } from 'react-redux' import last from 'lodash/last' @@ -27,16 +27,15 @@ export type WifiScreenOption = | 'WifiConnectStatus' export function ConnectViaWifi(): JSX.Element { - const [selectedSsid, setSelectedSsid] = React.useState('') - const [ - selectedAuthType, - setSelectedAuthType, - ] = React.useState('wpa-psk') + const [selectedSsid, setSelectedSsid] = useState('') + const [selectedAuthType, setSelectedAuthType] = useState( + 'wpa-psk' + ) - const [currentOption, setCurrentOption] = React.useState( + const [currentOption, setCurrentOption] = useState( 'WifiList' ) - const [password, setPassword] = React.useState('') + const [password, setPassword] = useState('') const localRobot = useSelector(getLocalRobot) const robotName = localRobot?.name != null ? localRobot.name : 'no name' const list = useWifiList(robotName, WIFI_LIST_POLL_MS) diff --git a/app/src/pages/ODD/DeckConfiguration/__tests__/DeckConfiguration.test.tsx b/app/src/pages/ODD/DeckConfiguration/__tests__/DeckConfiguration.test.tsx index 9715b60b09a..796e40cb6ee 100644 --- a/app/src/pages/ODD/DeckConfiguration/__tests__/DeckConfiguration.test.tsx +++ b/app/src/pages/ODD/DeckConfiguration/__tests__/DeckConfiguration.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { MemoryRouter } from 'react-router-dom' import { vi, it, describe, expect, beforeEach } from 'vitest' import { fireEvent, screen } from '@testing-library/react' diff --git a/app/src/pages/ODD/DeckConfiguration/index.tsx b/app/src/pages/ODD/DeckConfiguration/index.tsx index e759572daf7..2de5de02c46 100644 --- a/app/src/pages/ODD/DeckConfiguration/index.tsx +++ b/app/src/pages/ODD/DeckConfiguration/index.tsx @@ -11,10 +11,10 @@ import { JUSTIFY_SPACE_AROUND, } from '@opentrons/components' -import { ChildNavigation } from '/app/organisms/ChildNavigation' +import { ChildNavigation } from '/app/organisms/ODD/ChildNavigation' import { DeckFixtureSetupInstructionsModal } from '/app/organisms/DeviceDetailsDeckConfiguration/DeckFixtureSetupInstructionsModal' import { DeckConfigurationDiscardChangesModal } from '/app/organisms/DeviceDetailsDeckConfiguration/DeckConfigurationDiscardChangesModal' -import { getTopPortalEl } from '../../../App/portal' +import { getTopPortalEl } from '/app/App/portal' import { useDeckConfigurationEditingTools, useNotifyDeckConfigurationQuery, diff --git a/app/src/pages/ODD/EmergencyStop/__tests__/EmergencyStop.test.tsx b/app/src/pages/ODD/EmergencyStop/__tests__/EmergencyStop.test.tsx index 2bfff093233..428e276c2e8 100644 --- a/app/src/pages/ODD/EmergencyStop/__tests__/EmergencyStop.test.tsx +++ b/app/src/pages/ODD/EmergencyStop/__tests__/EmergencyStop.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { vi, it, describe, expect, beforeEach } from 'vitest' import { useEstopQuery } from '@opentrons/react-api-client' import { fireEvent, screen } from '@testing-library/react' diff --git a/app/src/pages/ODD/EmergencyStop/index.tsx b/app/src/pages/ODD/EmergencyStop/index.tsx index 92806b6adef..7cca1beb9fd 100644 --- a/app/src/pages/ODD/EmergencyStop/index.tsx +++ b/app/src/pages/ODD/EmergencyStop/index.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { useTranslation } from 'react-i18next' import { useNavigate } from 'react-router-dom' diff --git a/app/src/pages/ODD/InitialLoadingScreen/__tests__/InitialLoadingScreen.test.tsx b/app/src/pages/ODD/InitialLoadingScreen/__tests__/InitialLoadingScreen.test.tsx index 114b09ebb3f..e9b45591b4b 100644 --- a/app/src/pages/ODD/InitialLoadingScreen/__tests__/InitialLoadingScreen.test.tsx +++ b/app/src/pages/ODD/InitialLoadingScreen/__tests__/InitialLoadingScreen.test.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { vi, it, describe, beforeEach, afterEach } from 'vitest' import { screen } from '@testing-library/react' diff --git a/app/src/pages/ODD/InitialLoadingScreen/index.tsx b/app/src/pages/ODD/InitialLoadingScreen/index.tsx index 9bbda2e6493..f35fad13b56 100644 --- a/app/src/pages/ODD/InitialLoadingScreen/index.tsx +++ b/app/src/pages/ODD/InitialLoadingScreen/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import type * as React from 'react' import { useSelector } from 'react-redux' import { ALIGN_CENTER, diff --git a/app/src/pages/ODD/InstrumentDetail/InstrumentDetailOverflowMenu.tsx b/app/src/pages/ODD/InstrumentDetail/InstrumentDetailOverflowMenu.tsx index 5692653566a..3b589295d0b 100644 --- a/app/src/pages/ODD/InstrumentDetail/InstrumentDetailOverflowMenu.tsx +++ b/app/src/pages/ODD/InstrumentDetail/InstrumentDetailOverflowMenu.tsx @@ -1,6 +1,8 @@ import * as React from 'react' import NiceModal, { useModal } from '@ebay/nice-modal-react' import { useTranslation } from 'react-i18next' +import { createPortal } from 'react-dom' + import { ALIGN_CENTER, COLORS, @@ -15,19 +17,14 @@ import { import { SINGLE_MOUNT_PIPETTES, NINETY_SIX_CHANNEL, - FLEX_ROBOT_TYPE, - getPipetteModelSpecs, } from '@opentrons/shared-data' import { ApiHostProvider } from '@opentrons/react-api-client' import { PipetteWizardFlows } from '/app/organisms/PipetteWizardFlows' import { GripperWizardFlows } from '/app/organisms/GripperWizardFlows' -import { - DropTipWizardFlows, - useDropTipWizardFlows, -} from '/app/organisms/DropTipWizardFlows' import { FLOWS } from '/app/organisms/PipetteWizardFlows/constants' import { GRIPPER_FLOW_TYPES } from '/app/organisms/GripperWizardFlows/constants' +import { getTopPortalEl } from '/app/App/portal' import type { PipetteData, @@ -38,18 +35,24 @@ import type { interface InstrumentDetailsOverflowMenuProps { instrument: PipetteData | GripperData host: HostConfig | null + toggleDTWiz: () => void } export const handleInstrumentDetailOverflowMenu = ( instrument: InstrumentDetailsOverflowMenuProps['instrument'], - host: InstrumentDetailsOverflowMenuProps['host'] + host: InstrumentDetailsOverflowMenuProps['host'], + toggleDTWiz: () => void ): void => { - NiceModal.show(InstrumentDetailsOverflowMenu, { instrument, host }) + NiceModal.show(InstrumentDetailsOverflowMenu, { + instrument, + host, + toggleDTWiz, + }) } const InstrumentDetailsOverflowMenu = NiceModal.create( (props: InstrumentDetailsOverflowMenuProps): JSX.Element => { - const { instrument, host } = props + const { instrument, host, toggleDTWiz } = props const { t } = useTranslation('robot_controls') const modal = useModal() const [wizardProps, setWizardProps] = React.useState< @@ -66,9 +69,6 @@ const InstrumentDetailsOverflowMenu = NiceModal.create( modal.remove() }, } - const { showDTWiz, toggleDTWiz } = useDropTipWizardFlows() - const pipetteModelSpecs = - getPipetteModelSpecs((instrument as PipetteData).instrumentModel) ?? null const is96Channel = instrument?.ok && @@ -97,64 +97,62 @@ const InstrumentDetailsOverflowMenu = NiceModal.create( } } + const handleDropTip = (): void => { + toggleDTWiz() + modal.remove() + } + + // TODO(jh 09-24-24): Create an ODD-specific component that wraps MenuList with a portal. return ( - - {instrument.data.calibratedOffset?.last_modified != null ? ( - - - - - {t('recalibrate')} - - - - ) : null} - {instrument.mount !== 'extension' ? ( - - - - - {t('drop_tips')} - - - - ) : null} - + {createPortal( + + {instrument.data.calibratedOffset?.last_modified != null ? ( + + + + + {t('recalibrate')} + + + + ) : null} + {instrument.mount !== 'extension' ? ( + + + + + {t('drop_tips')} + + + + ) : null} + , + getTopPortalEl() + )} {wizardProps != null && 'mount' in wizardProps ? ( ) : null} {wizardProps != null && !('mount' in wizardProps) ? ( ) : null} - {showDTWiz && - instrument.mount !== 'extension' && - pipetteModelSpecs != null ? ( - - ) : null} ) } diff --git a/app/src/pages/ODD/InstrumentDetail/__tests__/InstrumentDetail.test.tsx b/app/src/pages/ODD/InstrumentDetail/__tests__/InstrumentDetail.test.tsx index 1bfc5e53c00..f9efce16e0d 100644 --- a/app/src/pages/ODD/InstrumentDetail/__tests__/InstrumentDetail.test.tsx +++ b/app/src/pages/ODD/InstrumentDetail/__tests__/InstrumentDetail.test.tsx @@ -1,4 +1,3 @@ -import React from 'react' import { vi, it, describe, expect, beforeEach, afterEach } from 'vitest' import { screen } from '@testing-library/react' import { useParams } from 'react-router-dom' @@ -11,18 +10,31 @@ import { InstrumentDetail } from '..' import { useGripperDisplayName, usePipetteModelSpecs, -} from '/app/resources/instruments/hooks' +} from '/app/local-resources/instruments' import { useIsOEMMode } from '/app/resources/robot-settings/hooks' +import { + DropTipWizardFlows, + useDropTipWizardFlows, +} from '/app/organisms/DropTipWizardFlows' import type { Instruments } from '@opentrons/api-client' - +import type * as SharedData from '@opentrons/shared-data' + +vi.mock('@opentrons/shared-data', async importOriginal => { + const actual = await importOriginal() + return { + ...actual, + getPipetteModelSpecs: vi.fn(), + } +}) vi.mock('@opentrons/react-api-client') vi.mock('react-router-dom', () => ({ useParams: vi.fn(), useNavigate: vi.fn(), })) -vi.mock('/app/resources/instruments/hooks') +vi.mock('/app/local-resources/instruments') vi.mock('/app/resources/robot-settings/hooks') +vi.mock('/app/organisms/DropTipWizardFlows') const render = () => { return renderWithProviders(, { @@ -98,6 +110,11 @@ describe('InstrumentDetail', () => { vi.mocked(useGripperDisplayName).mockReturnValue('mockGripper') vi.mocked(useParams).mockReturnValue({ mount: 'left' }) vi.mocked(useIsOEMMode).mockReturnValue(false) + vi.mocked(useDropTipWizardFlows).mockReturnValue({ + toggleDTWiz: () => null, + showDTWiz: false, + }) + vi.mocked(DropTipWizardFlows).mockReturnValue(
    MOCK_DROP_TIP_WIZ
    ) }) afterEach(() => { diff --git a/app/src/pages/ODD/InstrumentDetail/__tests__/InstrumentDetailOverflowMenu.test.tsx b/app/src/pages/ODD/InstrumentDetail/__tests__/InstrumentDetailOverflowMenu.test.tsx index 385e042bbb5..d6fc3b4953c 100644 --- a/app/src/pages/ODD/InstrumentDetail/__tests__/InstrumentDetailOverflowMenu.test.tsx +++ b/app/src/pages/ODD/InstrumentDetail/__tests__/InstrumentDetailOverflowMenu.test.tsx @@ -1,4 +1,3 @@ -import React from 'react' import NiceModal from '@ebay/nice-modal-react' import { fireEvent, screen } from '@testing-library/react' import { vi, it, describe, expect, beforeEach, afterEach } from 'vitest' @@ -11,9 +10,7 @@ import { handleInstrumentDetailOverflowMenu } from '../InstrumentDetailOverflowM import { useNotifyCurrentMaintenanceRun } from '/app/resources/maintenance_runs' import { PipetteWizardFlows } from '/app/organisms/PipetteWizardFlows' import { GripperWizardFlows } from '/app/organisms/GripperWizardFlows' -import { useDropTipWizardFlows } from '/app/organisms/DropTipWizardFlows' -import type { Mock } from 'vitest' import type { PipetteData, GripperData, @@ -28,10 +25,10 @@ vi.mock('@opentrons/shared-data', async importOriginal => { getPipetteModelSpecs: vi.fn(), } }) + vi.mock('/app/resources/maintenance_runs') vi.mock('/app/organisms/PipetteWizardFlows') vi.mock('/app/organisms/GripperWizardFlows') -vi.mock('/app/organisms/DropTipWizardFlows') const MOCK_PIPETTE = { mount: 'left', @@ -103,13 +100,18 @@ const MOCK_GRIPPER = { } as GripperData const MOCK_HOST: HostConfig = { hostname: 'TEST_HOST' } +const mockToggleDTWiz = vi.fn() const render = (pipetteOrGripper: PipetteData | GripperData) => { return renderWithProviders(